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 <f.ebner@proxmox.com>
This commit is contained in:
Fabian Ebner 2020-12-01 09:24:21 +01:00 committed by Thomas Lamprecht
parent 1c56bcf39d
commit acc963c3e5
2 changed files with 90 additions and 15 deletions

View File

@ -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'};

View File

@ -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;