]> git.proxmox.com Git - qemu-server.git/commitdiff
api/resume: allow to resume 'to-disk suspended' VMs
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 19 Mar 2019 11:57:08 +0000 (12:57 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 19 Mar 2019 12:24:06 +0000 (13:24 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Cc: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-by: Dominik CSapak <d.csapak@proxmox.com>
PVE/API2/Qemu.pm

index 3c0ad2393b0c959633526948560a815314e95093..99e37d8771888eaf2277435cc5f5824f4f26f878 100644 (file)
@@ -2444,14 +2444,28 @@ __PACKAGE__->register_method({
 
        my $nocheck = extract_param($param, 'nocheck');
 
-       die "VM $vmid not running\n" if !PVE::QemuServer::check_running($vmid, $nocheck);
+       my $to_disk_suspended;
+       eval {
+           PVE::QemuConfig->lock_config($vmid, sub {
+               my $conf = PVE::QemuConfig->load_config($vmid);
+               $to_disk_suspended = PVE::QemuConfig->has_lock($conf, 'suspended');
+           });
+       };
+
+       die "VM $vmid not running\n"
+           if !$to_disk_suspended && !PVE::QemuServer::check_running($vmid, $nocheck);
 
        my $realcmd = sub {
            my $upid = shift;
 
            syslog('info', "resume VM $vmid: $upid\n");
 
-           PVE::QemuServer::vm_resume($vmid, $skiplock, $nocheck);
+           if (!$to_disk_suspended) {
+               PVE::QemuServer::vm_resume($vmid, $skiplock, $nocheck);
+           } else {
+               my $storecfg = PVE::Storage::config();
+               PVE::QemuServer::vm_start($storecfg, $vmid, undef, $skiplock);
+           }
 
            return;
        };