[pve-devel] [PATCH manager 5/6] vzdump: support setting protected status and notes
Fabian Ebner
f.ebner at proxmox.com
Thu Dec 16 13:12:32 CET 2021
Check the number of protected backups early if the protected flag
is set.
Suggested-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
---
Dependency bump for guest-common needed.
Arguably, a warning from failing to set notes is not very visible, but
I didn't want to make it a full-blown error.
PVE/VZDump.pm | 46 +++++++++++++++++++++++++++++++++++++---------
1 file changed, 37 insertions(+), 9 deletions(-)
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 8e20c320..1aa3822e 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -4,6 +4,7 @@ use strict;
use warnings;
use Fcntl ':flock';
+use File::Basename;
use File::Path;
use IO::File;
use IO::Select;
@@ -772,21 +773,30 @@ sub exec_backup_task {
}
}
- if ($backup_limit && !$opts->{remove}) {
+ if (($backup_limit && !$opts->{remove}) || $opts->{protected}) {
my $count;
+ my $protected_count;
if (my $storeid = $opts->{storage}) {
- my $backups = PVE::Storage::volume_list($cfg, $storeid, $vmid, 'backup');
- $count = grep {
- !$_->{protected} && (!$_->{subtype} || $_->{subtype} eq $vmtype)
- } $backups->@*;
+ my @backups = grep {
+ !$_->{subtype} || $_->{subtype} eq $vmtype
+ } PVE::Storage::volume_list($cfg, $storeid, $vmid, 'backup')->@*;
+
+ $count = grep { !$_->{protected} } @backups;
+ $protected_count = scalar(@backups) - $count;
} else {
$count = scalar(get_unprotected_backup_file_list($opts->{dumpdir}, $bkname)->@*);
}
- die "There is a max backup limit of $backup_limit enforced by the".
- " target storage or the vzdump parameters.".
- " Either increase the limit or delete old backup(s).\n"
- if $count >= $backup_limit;
+ if ($opts->{protected}) {
+ my $max_protected = $opts->{scfg}->{'max-protected-backups'} // 5;
+ if ($max_protected > -1 && $protected_count >= $max_protected) {
+ die "The number of protected backups per guest is limited to $max_protected ".
+ "on storage '$opts->{storage}'\n";
+ }
+ } elsif ($count >= $backup_limit) {
+ die "There is a max backup limit of $backup_limit enforced by the target storage ".
+ "or the vzdump parameters. Either increase the limit or delete old backups.\n";
+ }
}
if (!$self->{opts}->{pbs}) {
@@ -987,6 +997,24 @@ sub exec_backup_task {
debugmsg ('info', "archive file size: $cs", $logfd);
}
+ # Mark as protected before pruning.
+ if (my $storeid = $opts->{storage}) {
+ my $volname = $opts->{pbs} ? $task->{target} : basename($task->{target});
+ my $volid = "${storeid}:backup/${volname}";
+
+ if ((my $notes = $opts->{notes}) && $opts->{notes} ne '') {
+ debugmsg('info', "adding notes to backup", $logfd);
+ eval { PVE::Storage::update_volume_attribute($cfg, $volid, 'notes', $notes) };
+ debugmsg('warn', "unable to add notes - $@", $logfd) if $@;
+ }
+
+ if ($opts->{protected}) {
+ debugmsg('info', "marking backup as protected", $logfd);
+ eval { PVE::Storage::update_volume_attribute($cfg, $volid, 'protected', 1) };
+ die "unable to set protected flag - $@\n" if $@;
+ }
+ }
+
if ($opts->{remove}) {
my $keepstr = join(', ', map { "$_=$prune_options->{$_}" } sort keys %$prune_options);
debugmsg ('info', "prune older backups with retention: $keepstr", $logfd);
--
2.30.2
More information about the pve-devel
mailing list