vm stop-cleanup: allow callers to decide error behavior

and keep it the same for all current callers as before by setting the
additional 'noerr' parameter to '1'.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2025-02-13 14:17:00 +01:00 committed by Fiona Ebner
parent 45f67709ea
commit 21cacf5c92
2 changed files with 9 additions and 6 deletions

View File

@ -963,7 +963,7 @@ __PACKAGE__->register_method({
if (!$clean || $guest) { if (!$clean || $guest) {
# vm was shutdown from inside the guest or crashed, doing api cleanup # vm was shutdown from inside the guest or crashed, doing api cleanup
PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0); PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0, 1);
} }
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop'); PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop');

View File

@ -6123,7 +6123,7 @@ sub cleanup_pci_devices {
} }
sub vm_stop_cleanup { sub vm_stop_cleanup {
my ($storecfg, $vmid, $conf, $keepActive, $apply_pending_changes) = @_; my ($storecfg, $vmid, $conf, $keepActive, $apply_pending_changes, $noerr) = @_;
eval { eval {
@ -6149,7 +6149,10 @@ sub vm_stop_cleanup {
vmconfig_apply_pending($vmid, $conf, $storecfg) if $apply_pending_changes; vmconfig_apply_pending($vmid, $conf, $storecfg) if $apply_pending_changes;
}; };
warn $@ if $@; # avoid errors - just warn if (my $err = $@) {
die $err if !$noerr;
warn $err;
}
} }
# call only in locked context # call only in locked context
@ -6200,7 +6203,7 @@ sub _do_vm_stop {
die "VM quit/powerdown failed - got timeout\n"; die "VM quit/powerdown failed - got timeout\n";
} }
} else { } else {
vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 1) if $conf; vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 1, 1) if $conf;
return; return;
} }
} else { } else {
@ -6231,7 +6234,7 @@ sub _do_vm_stop {
sleep 1; sleep 1;
} }
vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 1) if $conf; vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 1, 1) if $conf;
} }
# Note: use $nocheck to skip tests if VM configuration file exists. # Note: use $nocheck to skip tests if VM configuration file exists.
@ -6246,7 +6249,7 @@ sub vm_stop {
my $pid = check_running($vmid, $nocheck, $migratedfrom); my $pid = check_running($vmid, $nocheck, $migratedfrom);
kill 15, $pid if $pid; kill 15, $pid if $pid;
my $conf = PVE::QemuConfig->load_config($vmid, $migratedfrom); my $conf = PVE::QemuConfig->load_config($vmid, $migratedfrom);
vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 0); vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive, 0, 1);
return; return;
} }