]> git.proxmox.com Git - pve-manager.git/commitdiff
fix #1278 api: add pool backup option
authorTim Marx <t.marx@proxmox.com>
Wed, 19 Jun 2019 10:08:37 +0000 (12:08 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 28 Jun 2019 16:05:19 +0000 (18:05 +0200)
Signed-off-by: Tim Marx <t.marx@proxmox.com>
PVE/API2/Backup.pm
PVE/API2/VZDump.pm
PVE/API2Tools.pm
PVE/VZDump.pm

index e8463e679f710353fb9d861fd390fbb2bb1018bf..9a2171cc0817a4274157ef5710744ed7cd8d87e0 100644 (file)
@@ -453,13 +453,18 @@ __PACKAGE__->register_method({
                        $job->{$k} = $param->{$k};
                    }
 
-                   $job->{all} = 1 if defined($job->{exclude});
+                   $job->{all} = 1 if (defined($job->{exclude}) && !defined($job->{pool}));
 
                    if (defined($param->{vmid})) {
                        delete $job->{all};
                        delete $job->{exclude};
+                       delete $job->{pool};
                    } elsif ($param->{all}) {
                        delete $job->{vmid};
+                       delete $job->{pool};
+                   } elsif ($job->{pool}) {
+                       delete $job->{vmid};
+                       delete $job->{all};
                    }
 
                    PVE::VZDump::verify_vzdump_parameters($job, 1);
index 4e5aec85fd9439b5fbd77b503b2019b0369f04fb..8e4096747e02087b3f9b4bd0502f0ba09439bd7c 100644 (file)
@@ -11,6 +11,7 @@ use PVE::AccessControl;
 use PVE::JSONSchema qw(get_standard_option);
 use PVE::Storage;
 use PVE::VZDump;
+use PVE::API2Tools;
 
 use Data::Dumper; # fixme: remove
 
@@ -70,9 +71,13 @@ __PACKAGE__->register_method ({
        return 'OK' if $param->{node} && $param->{node} ne $nodename;
 
        my $cmdline = PVE::VZDump::command_line($param);
-
+       my @vmids;
        # convert string lists to arrays
-       my @vmids = PVE::Tools::split_list(extract_param($param, 'vmid'));
+       if ($param->{pool}) {
+           @vmids = @{PVE::API2Tools::get_resource_pool_guest_members($param->{pool})};
+       } else {
+           @vmids = PVE::Tools::split_list(extract_param($param, 'vmid'));
+       }
 
        if($param->{stop}){
            PVE::VZDump::stop_running_backups();
index 5ab202b499e413f8b994d01a8a1c0bbb36dddaa1..e79ac9b258b14a36d04cf62c1afc92c1542cd591 100644 (file)
@@ -231,4 +231,27 @@ sub resolve_proxyto {
     return $node;
 }
 
+sub get_resource_pool_guest_members {
+    my ($pool) = @_;
+
+    my $usercfg = PVE::Cluster::cfs_read_file("user.cfg");
+
+    my $vmlist = PVE::Cluster::get_vmlist() || {};
+    my $idlist = $vmlist->{ids} || {};
+
+    my $data = $usercfg->{pools}->{$pool};
+
+    die "pool '$pool' does not exist\n"
+       if !$data;
+
+    my $members = [];
+
+    foreach my $vmid (keys %{$data->{vms}}) {
+       my $vmdata = $idlist->{$vmid};
+       next if !$vmdata;
+       push @$members, $vmid;
+    }
+    return $members;
+}
+
 1;
index 7740da0fe087de05f2e4dccbbcb29d22068051d3..272f40b80526643f9371dd6e2ca27d20f6ced8c5 100644 (file)
@@ -175,6 +175,11 @@ my $confdesc = {
        optional => 1,
        default => 1,
     },
+    pool => {
+       type => 'string',
+       description => 'Backup all known guest systems included in the specified pool.',
+       optional => 1,
+    }
 };
 
 # Load available plugins
@@ -1176,7 +1181,10 @@ sub verify_vzdump_parameters {
     raise_param_exc({ exclude => "option conflicts with option 'vmid'"})
        if $param->{exclude} && $param->{vmid};
 
-    $param->{all} = 1 if defined($param->{exclude});
+    raise_param_exc({ pool => "option conflicts with option 'vmid'"})
+       if $param->{pool} && $param->{vmid};
+
+    $param->{all} = 1 if (defined($param->{exclude}) && !$param->{pool});
 
     warn "option 'size' is deprecated and will be removed in a future " .
         "release, please update your script/configuration!\n"
@@ -1185,7 +1193,7 @@ sub verify_vzdump_parameters {
     return if !$check_missing;
 
     raise_param_exc({ vmid => "property is missing"})
-       if !($param->{all} || $param->{stop}) && !$param->{vmid};
+       if !($param->{all} || $param->{stop} || $param->{pool}) && !$param->{vmid};
 
 }