From f78ff6457bf47def2fe3ade8244920e8b21f4630 Mon Sep 17 00:00:00 2001 From: Mikhail Feoktistov Date: Tue, 21 Feb 2017 17:27:59 +0300 Subject: [PATCH] Do not use createXML for non transient domains For these domains use defineXML (crobinso: Add undefine on start() failure) --- virtinst/guest.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/virtinst/guest.py b/virtinst/guest.py index 0699f4bc0..aef38074d 100644 --- a/virtinst/guest.py +++ b/virtinst/guest.py @@ -387,12 +387,27 @@ class Guest(XMLBuilder): meter = util.ensure_meter(meter) meter.start(size=None, text=meter_label) - if doboot or transient or self.installer.has_install_phase(): + if transient: self.domain = self.conn.createXML(install_xml or final_xml, 0) + else: + # Not all hypervisors (vz) support createXML, so avoid it here + self.domain = self.conn.defineXML(install_xml or final_xml) - if not transient: - self.domain = self.conn.defineXML(final_xml) - meter.end(0) + # Handle undefining the VM if the initial startup fails + if doboot or self.installer.has_install_phase(): + try: + self.domain.create() + except: + import sys + exc_info = sys.exc_info() + try: + self.domain.undefine() + except: + pass + raise exc_info[0], exc_info[1], exc_info[2] + + if install_xml and install_xml != final_xml: + self.domain = self.conn.defineXML(final_xml) try: logging.debug("XML fetched from libvirt object:\n%s",