X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=PVE%2FStorage%2FPlugin.pm;h=d2d818437bf2ceaef051fad938cf92f64f920352;hb=5b715fd9845dfd07e7ed5657706498bb137cb9e9;hp=b4f3be860f98d25732e1575f08b084bca33aea45;hpb=1d95f21615fb837d11c1863217414fb1534c154e;p=pve-storage.git diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index b4f3be8..d2d8184 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -19,7 +19,7 @@ use base qw(PVE::SectionConfig); use constant COMPRESSOR_RE => 'gz|lzo|zst'; -use constant COMMENT_EXT => ".comment"; +use constant NOTES_EXT => ".notes"; our @COMMON_TAR_FLAGS = qw( --one-file-system @@ -37,7 +37,9 @@ our @SHARED_STORAGE = ( 'iscsidirect', 'glusterfs', 'zfs', - 'drbd'); + 'drbd', + 'pbs', +); our $MAX_VOLUMES_PER_GUEST = 1024; @@ -52,6 +54,11 @@ my %prune_option = ( ); our $prune_backups_format = { + 'keep-all' => { + type => 'boolean', + description => 'Keep all backups. Conflicts with the other options when true.', + optional => 1, + }, 'keep-last' => { %prune_option, description => 'Keep the last backups.', @@ -84,12 +91,17 @@ our $prune_backups_format = { }; PVE::JSONSchema::register_format('prune-backups', $prune_backups_format, \&validate_prune_backups); sub validate_prune_backups { - my ($keep) = @_; + my ($prune_backups) = @_; - die "at least one keep-option must be set and positive\n" - if !grep { $_ } values %{$keep}; + my $keep_all = delete $prune_backups->{'keep-all'}; + + if (!scalar(grep {$_ > 0} values %{$prune_backups})) { + $prune_backups = { 'keep-all' => 1 }; + } elsif ($keep_all) { + die "keep-all cannot be set together with other options.\n"; + } - return $keep; + return $prune_backups; } register_standard_option('prune-backups', { description => "The retention options with shorter intervals are processed first " . @@ -427,6 +439,7 @@ sub on_add_hook { my ($class, $storeid, $scfg, %param) = @_; # do nothing by default + return undef; } # called during storage configuration update (before the updated storage config got written) @@ -436,6 +449,7 @@ sub on_update_hook { my ($class, $storeid, $scfg, %param) = @_; # do nothing by default + return undef; } # called during deletion of storage (before the new storage config got written) @@ -447,6 +461,7 @@ sub on_delete_hook { my ($class, $storeid, $scfg) = @_; # do nothing by default + return undef; } sub cluster_lock_storage { @@ -813,6 +828,18 @@ sub file_size_info { return wantarray ? ($size, $format, $used, $parent, $st->ctime) : $size; } +sub get_volume_notes { + my ($class, $scfg, $storeid, $volname, $timeout) = @_; + + die "volume notes are not supported for $class"; +} + +sub update_volume_notes { + my ($class, $scfg, $storeid, $volname, $notes, $timeout) = @_; + + die "volume notes are not supported for $class"; +} + sub volume_size_info { my ($class, $scfg, $storeid, $volname, $timeout) = @_; my $path = $class->filesystem_path($scfg, $volname); @@ -1022,10 +1049,10 @@ my $get_subdir_files = sub { $info->{vmid} = $vmid // $1; } - my $comment_fn = $original.COMMENT_EXT; - if (-f $comment_fn) { - my $comment = PVE::Tools::file_read_firstline($comment_fn); - $info->{comment} = $comment if defined($comment); + my $notes_fn = $original.NOTES_EXT; + if (-f $notes_fn) { + my $notes = PVE::Tools::file_read_firstline($notes_fn); + $info->{notes} = $notes if defined($notes); } } elsif ($tt eq 'snippets') {