diff --git a/core-modules/000QubesVm.py b/core-modules/000QubesVm.py index 8bb3efe3..dcecc392 100644 --- a/core-modules/000QubesVm.py +++ b/core-modules/000QubesVm.py @@ -666,8 +666,16 @@ class QubesVm(object): domain_config = self.create_config_file() if self._libvirt_domain: self._libvirt_domain.undefine() - self._libvirt_domain = vmm.libvirt_conn.defineXML(domain_config) - self.uuid = uuid.UUID(bytes=self._libvirt_domain.UUID()) + try: + self._libvirt_domain = vmm.libvirt_conn.defineXML(domain_config) + self.uuid = uuid.UUID(bytes=self._libvirt_domain.UUID()) + except libvirt.libvirtError: + if libvirt.virGetLastError()[0] == libvirt.VIR_ERR_NO_DOMAIN: + # accept the fact that libvirt doesn't know anything about this + # domain... + pass + else: + raise @property def libvirt_domain(self): @@ -695,6 +703,9 @@ class QubesVm(object): if dry_run: return 666 + if self.libvirt_domain is None: + return 0 + if not self.libvirt_domain.isActive(): return 0 return self.libvirt_domain.info()[1] @@ -745,6 +756,9 @@ class QubesVm(object): return "NA" libvirt_domain = self.libvirt_domain + if libvirt_domain is None: + return "NA" + if libvirt_domain.isActive(): if libvirt_domain.state()[0] == libvirt.VIR_DOMAIN_PAUSED: return "Paused" @@ -1722,12 +1736,18 @@ class QubesVm(object): if dry_run: return + if not self.is_running(): + raise QubesException ("VM not running!") + self.libvirt_domain.suspend() def unpause(self): if dry_run: return + if not self.is_paused(): + raise QubesException ("VM not paused!") + self.libvirt_domain.resume() def get_xml_attrs(self):