$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);
use PVE::JSONSchema qw(get_standard_option);
use PVE::Storage;
use PVE::VZDump;
+use PVE::API2Tools;
use Data::Dumper; # fixme: remove
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();
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;
optional => 1,
default => 1,
},
+ pool => {
+ type => 'string',
+ description => 'Backup all known guest systems included in the specified pool.',
+ optional => 1,
+ }
};
# Load available plugins
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"
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};
}