From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 777C7601B0 for ; Tue, 1 Dec 2020 09:24:57 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6DED6E418 for ; Tue, 1 Dec 2020 09:24:27 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 6EF5FE3FD for ; Tue, 1 Dec 2020 09:24:26 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 3A13A44139 for ; Tue, 1 Dec 2020 09:24:26 +0100 (CET) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Tue, 1 Dec 2020 09:24:21 +0100 Message-Id: <20201201082421.4646-4-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201201082421.4646-1-f.ebner@proxmox.com> References: <20201201082421.4646-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.009 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [vzdump.pm] Subject: [pve-devel] [PATCH manager 4/4] vzdump: defaults: correctly parse prune-backups and convert maxfiles X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 01 Dec 2020 08:24:57 -0000 Also simplify handling in new(), now that we never have maxfiles there anymore. Signed-off-by: Fabian Ebner --- PVE/VZDump.pm | 20 ++------ test/vzdump_new_retention_test.pl | 85 +++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 15 deletions(-) diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm index 8574fc94..6892918f 100644 --- a/PVE/VZDump.pm +++ b/PVE/VZDump.pm @@ -230,6 +230,8 @@ sub read_vzdump_defaults { $res->{$key} = $defaults->{$key} if !defined($res->{$key}); } + $parse_prune_backups_maxfiles->($res, "options in '$fn'"); + return $res; } @@ -437,7 +439,7 @@ sub new { $opts->{remove} = 1 if !defined($opts->{remove}); foreach my $k (keys %$defaults) { - next if $k eq 'exclude-path' || $k eq 'maxfiles'; # dealt with separately + next if $k eq 'exclude-path' || $k eq 'prune-backups'; # dealt with separately if ($k eq 'dumpdir' || $k eq 'storage') { $opts->{$k} = $defaults->{$k} if !defined ($opts->{dumpdir}) && !defined ($opts->{storage}); @@ -494,11 +496,7 @@ sub new { $opts->{dumpdir} = $info->{dumpdir}; $opts->{scfg} = $info->{scfg}; $opts->{pbs} = $info->{pbs}; - - if (!defined($opts->{'prune-backups'}) && !defined($opts->{maxfiles})) { - $opts->{'prune-backups'} = $info->{'prune-backups'}; - $opts->{maxfiles} = $info->{maxfiles}; - } + $opts->{'prune-backups'} //= $info->{'prune-backups'}; } } elsif ($opts->{dumpdir}) { $errors .= "dumpdir '$opts->{dumpdir}' does not exist" @@ -507,15 +505,7 @@ sub new { die "internal error"; } - if (!defined($opts->{'prune-backups'})) { - my $maxfiles = delete $opts->{maxfiles} // $defaults->{maxfiles}; - $maxfiles = int($maxfiles); # shouldn't be necessary, but be safe - if ($maxfiles) { - $opts->{'prune-backups'} = { 'keep-last' => $maxfiles }; - } else { - $opts->{'prune-backups'} = { 'keep-all' => 1 }; - } - } + $opts->{'prune-backups'} //= $defaults->{'prune-backups'}; # avoid triggering any remove code path if keep-all is set $opts->{remove} = 0 if $opts->{'prune-backups'}->{'keep-all'}; diff --git a/test/vzdump_new_retention_test.pl b/test/vzdump_new_retention_test.pl index 87faa899..569419fb 100755 --- a/test/vzdump_new_retention_test.pl +++ b/test/vzdump_new_retention_test.pl @@ -164,6 +164,61 @@ my @tests = ( remove => 1, }, }, + { + description => 'prune-backups vzdump 1', + vzdump_param => { + 'prune-backups' => 'keep-last=1,keep-hourly=2,keep-daily=3,' . + 'keep-weekly=4,keep-monthly=5,keep-yearly=6', + }, + expected => { + 'prune-backups' => { + 'keep-last' => 1, + 'keep-hourly' => 2, + 'keep-daily' => 3, + 'keep-weekly' => 4, + 'keep-monthly' => 5, + 'keep-yearly' => 6, + }, + remove => 1, + }, + }, + { + description => 'prune-backups vzdump 2', + vzdump_param => { + 'prune-backups' => 'keep-all=1', + }, + expected => { + 'prune-backups' => { + 'keep-all' => 1, + }, + remove => 0, + }, + }, + { + description => 'prune-backups vzdump 3', + vzdump_param => { + 'prune-backups' => 'keep-hourly=0,keep-monthly=0,keep-yearly=0', + }, + expected => { + 'prune-backups' => { + 'keep-all' => 1, + }, + remove => 0, + }, + }, + { + description => 'both vzdump 1', + vzdump_param => { + 'prune-backups' => 'keep-all=1', + maxfiles => 7, + }, + expected => { + 'prune-backups' => { + 'keep-all' => 1, + }, + remove => 0, + }, + }, { description => 'prune-backups storage 1', storage_param => { @@ -379,6 +434,36 @@ my @tests = ( remove => 1, }, }, + { + description => 'mixed 8', + storage_param => { + 'prune-backups' => 'keep-last=10', + }, + vzdump_param => { + 'prune-backups' => 'keep-all=1', + }, + expected => { + 'prune-backups' => { + 'keep-last' => 10, + }, + remove => 1, + }, + }, + { + description => 'mixed 9', + vzdump_param => { + 'prune-backups' => 'keep-last=10', + }, + cli_param => { + 'prune-backups' => 'keep-all=1', + }, + expected => { + 'prune-backups' => { + 'keep-all' => 1, + }, + remove => 0, + }, + }, ); plan tests => scalar @tests; -- 2.20.1