]> git.proxmox.com Git - pve-manager.git/commitdiff
vzdump: defaults: correctly parse prune-backups and convert maxfiles
authorFabian Ebner <f.ebner@proxmox.com>
Tue, 1 Dec 2020 08:24:21 +0000 (09:24 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 2 Dec 2020 12:15:52 +0000 (13:15 +0100)
Also simplify handling in new(), now that we never have maxfiles there anymore.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
PVE/VZDump.pm
test/vzdump_new_retention_test.pl

index 8574fc94d1b81a2c7ea7084df591d4c8ec966ba4..6892918f7084625696f9836471fdb6e073d891cc 100644 (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'};
index 87faa8992a6df6adb1dfdb64fe163f5ff019b31d..569419fb30455f58cdbe4de92fd74ce8eba85897 100755 (executable)
@@ -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;