qm: cleanup: detect and handle reboot trigger

if the reboot trigger file was set, start the vm again
also cleanup the reboot trigger on vm startup, to prevent
leftover files to trigger a reboot at the next shutdown

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2019-09-11 14:07:43 +02:00 committed by Thomas Lamprecht
parent dae98db96e
commit 64457ed4aa
2 changed files with 16 additions and 0 deletions

View File

@ -763,6 +763,7 @@ __PACKAGE__->register_method({
my $vmid = $param->{vmid}; my $vmid = $param->{vmid};
my $clean = $param->{'clean-shutdown'}; my $clean = $param->{'clean-shutdown'};
my $guest = $param->{'guest-requested'}; my $guest = $param->{'guest-requested'};
my $restart = 0;
# return if we do not have the config anymore # return if we do not have the config anymore
return if !-f PVE::QemuConfig->config_file($vmid); return if !-f PVE::QemuConfig->config_file($vmid);
@ -790,10 +791,21 @@ __PACKAGE__->register_method({
PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0); PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0);
} }
PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop'); PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-stop');
$restart = eval { PVE::QemuServer::clear_reboot_request($vmid) };
warn $@ if $@;
}); });
warn "Finished cleanup for $vmid\n"; warn "Finished cleanup for $vmid\n";
if ($restart) {
warn "Restarting VM $vmid\n";
PVE::API2::Qemu->vm_start({
vmid => $vmid,
node => $nodename,
});
}
return undef; return undef;
}}); }});

View File

@ -5340,6 +5340,10 @@ sub vm_start {
die "VM $vmid already running\n" if check_running($vmid, undef, $migratedfrom); die "VM $vmid already running\n" if check_running($vmid, undef, $migratedfrom);
# clean up leftover reboot request files
eval { clear_reboot_request($vmid); };
warn $@ if $@;
if (!$statefile && scalar(keys %{$conf->{pending}})) { if (!$statefile && scalar(keys %{$conf->{pending}})) {
vmconfig_apply_pending($vmid, $conf, $storecfg); vmconfig_apply_pending($vmid, $conf, $storecfg);
$conf = PVE::QemuConfig->load_config($vmid); # update/reload $conf = PVE::QemuConfig->load_config($vmid); # update/reload