Wonderful ! It could be great to have something like, shutdown (clean shutdown) + start.
----- Mail original ----- De: "Dominik Csapak" <d.csa...@proxmox.com> À: "pve-devel" <pve-devel@pve.proxmox.com> Envoyé: Mardi 16 Octobre 2018 12:07:06 Objet: [pve-devel] [PATCH qemu-server 4/4] implement a 'real' reboot for vms instead of letting qemu handle a reset, add '-no-reboot' by default (>= qemu 3.0) and use our cleanup to start the vm again this has the advantage that pending changes will be applied on a reboot from within the guest, starts with a new qemu version and enables us to have a 'reboot' button in the future (more work for this is needed) it still respects the 'reboot' config we had Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- PVE/CLI/qm.pm | 22 ++++++++++++++++++++++ PVE/QemuServer.pm | 7 ++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm index 6a14c12..8772e8c 100755 --- a/PVE/CLI/qm.pm +++ b/PVE/CLI/qm.pm @@ -758,6 +758,8 @@ __PACKAGE__->register_method({ my $guest = $param->{'guest-requested'}; my $reset = $param->{'was-reset'}; + my $needs_reset = 0; + my $storecfg = PVE::Storage::config(); PVE::QemuConfig->lock_config($vmid, sub { @@ -780,8 +782,28 @@ __PACKAGE__->register_method({ # vm was shutdown from inside the guest or crashed, doing api cleanup PVE::QemuServer::vm_stop_cleanup($storecfg, $vmid, $conf, 0, 0); } + + if ((!defined($conf->{reboot}) || $conf->{reboot}) && $reset) { + $needs_reset = 1; + } }); + if ($needs_reset) { + my $rpcenv = PVE::RPCEnvironment::get(); + my $authuser = $rpcenv->get_user(); + # got reset parameter, we should start the vm again + my $realcmd = sub { + my $upid = shift; + + syslog('info', "restart VM $vmid: $upid\n"); + + PVE::QemuServer::vm_start($storecfg, $vmid); + return; + }; + + $rpcenv->fork_worker('qmrestart', $vmid, $authuser, $realcmd); + } + return undef; }}); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 4838e79..7dad560 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3402,7 +3402,12 @@ sub config_to_command { push @$cmd, '-no-acpi' if defined($conf->{acpi}) && $conf->{acpi} == 0; - push @$cmd, '-no-reboot' if defined($conf->{reboot}) && $conf->{reboot} == 0; + # we add it by default and check in the cleanup call if we want to start + # it again + if ((defined($conf->{reboot}) && $conf->{reboot} == 0) || + qemu_machine_feature_enabled($machine_type, $kvmver, 3, 0)) { + push @$cmd, '-no-reboot' if defined($conf->{reboot}) && $conf->{reboot} == 0; + } push @$cmd, '-vga', $vga if $vga && $vga !~ m/^serial\d+$/; # for kvm 77 and later -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel