my $local_vmids = delete $vmids_per_node->{$nodename} // [];
+ # include IDs for deleted guests, and visibly fail later
+ my $orphaned_vmids = delete $vmids_per_node->{''} // [];
+ push @{$local_vmids}, @{$orphaned_vmids};
+
my $skiplist = [ map { @$_ } values $vmids_per_node->%* ];
if($param->{stop}){
my $vmlist = PVE::Cluster::get_vmlist();
foreach my $vmid (@{$opts->{vmids}}) {
- my $guest_type = $vmlist->{ids}->{$vmid}->{type};
- my $plugin = $vzdump_plugins->{$guest_type};
- next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Backup' ], $opts->{all});
+ my $plugin;
+ if (defined($vmlist->{ids}->{$vmid})) {
+ my $guest_type = $vmlist->{ids}->{$vmid}->{type};
+ $plugin = $vzdump_plugins->{$guest_type};
+ next if !$rpcenv->check($authuser, "/vms/$vmid", [ 'VM.Backup' ], $opts->{all});
+ }
push @$tasklist, {
mode => $opts->{mode},
plugin => $plugin,
$vmids = check_vmids(@$vmids);
for my $vmid (@$vmids) {
- my $node = $vmlist->{ids}->{$vmid}->{node};
- next if (defined $job->{node} && $job->{node} ne $node);
+ if (defined($vmlist->{ids}->{$vmid})) {
+ my $node = $vmlist->{ids}->{$vmid}->{node};
+ next if (defined $job->{node} && $job->{node} ne $node);
- push @{$vmids_per_node->{$node}}, $vmid;
+ push @{$vmids_per_node->{$node}}, $vmid;
+ } else {
+ push @{$vmids_per_node->{''}}, $vmid;
+ }
}
return $vmids_per_node;
use lib '..';
-use Test::More tests => 9;
+use Test::More tests => 10;
use Test::MockModule;
use PVE::VZDump;
}
});
+$addtest->('Test VMID not present in vmlist', {
+ expected => {
+ node1 => [ 100 ],
+ node2 => [ 201, 212 ],
+ '' => [ 7654 ],
+ },
+ param => {
+ vmid => '100, 201, 212, 7654',
+ }
+});
+
for my $test (@{$tests}) {
my $testname = $test->{name};