]> git.proxmox.com Git - pve-ha-manager.git/blobdiff - src/PVE/HA/Resources/PVEVM.pm
fix #1794: VM resource: catch qmp command exceptions
[pve-ha-manager.git] / src / PVE / HA / Resources / PVEVM.pm
index 55d4368a6dede7e6ccee10d7513765728030309f..d07d5c98933ee7323decd7befc3db22a1c2a67c4 100644 (file)
@@ -5,9 +5,16 @@ use warnings;
 
 use PVE::HA::Tools;
 
-use PVE::QemuConfig;
-use PVE::QemuServer;
-use PVE::API2::Qemu;
+BEGIN {
+    if (!$ENV{PVE_GENERATING_DOCS}) {
+       require PVE::QemuConfig;
+       import  PVE::QemuConfig;
+       require PVE::QemuServer;
+       import  PVE::QemuServer;
+       require PVE::API2::Qemu;
+       import  PVE::API2::Qemu;
+    }
+}
 
 use base qw(PVE::HA::Resources);
 
@@ -113,7 +120,22 @@ sub check_running {
 
     my $nodename = $haenv->nodename();
 
-    return PVE::QemuServer::check_running($vmid, 1, $nodename);
+    if (PVE::QemuServer::check_running($vmid, 1, $nodename)) {
+       # do not count VMs which are suspended for a backup job as running
+       my $conf = PVE::QemuConfig->load_config($vmid, $nodename);
+       if (defined($conf->{lock}) && $conf->{lock} eq 'backup') {
+           my $qmpstatus = eval {
+               PVE::QemuServer::vm_qmp_command($vmid, { execute => 'query-status' })
+           };
+           warn "$@\n" if $@;
+
+           return 0 if defined($qmpstatus) && $qmpstatus->{status} eq 'prelaunch';
+       }
+
+       return 1;
+    } else {
+       return 0;
+    }
 }
 
 sub remove_locks {