From acc963c3e57fa1df993acfe6f39c8c42e5b12d18 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Tue, 1 Dec 2020 09:24:21 +0100 Subject: [PATCH] vzdump: defaults: correctly parse prune-backups and convert maxfiles 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.39.2