b64c012
# HG changeset patch
b64c012
# User Cole Robinson <crobinso@redhat.com>
b64c012
# Date 1236957667 14400
b64c012
# Node ID 4331403b2e66dafdda618283dcea259a66fba423
b64c012
# Parent  89c007e38850e1283447ea4c19ff6f64ce6224b6
b64c012
Fix xml parsing for old style 'console' xml.
b64c012
b64c012
diff -r 89c007e38850 -r 4331403b2e66 src/virtManager/details.py
b64c012
--- a/src/virtManager/details.py	Mon Mar 09 23:38:03 2009 -0400
b64c012
+++ b/src/virtManager/details.py	Fri Mar 13 11:21:07 2009 -0400
b64c012
@@ -1106,7 +1106,7 @@
b64c012
                                              _("(Primary Console)") or "")
b64c012
         self.window.get_widget("char-type").set_markup(typelabel)
b64c012
         self.window.get_widget("char-dev-type").set_text(charinfo[4] or "-")
b64c012
-        self.window.get_widget("char-target-port").set_text(charinfo[3])
b64c012
+        self.window.get_widget("char-target-port").set_text(charinfo[3] or "")
b64c012
         self.window.get_widget("char-source-path").set_text(charinfo[5] or "-")
b64c012
 
b64c012
     def refresh_hostdev_page(self):
b64c012
diff -r 89c007e38850 -r 4331403b2e66 src/virtManager/domain.py
b64c012
--- a/src/virtManager/domain.py	Mon Mar 09 23:38:03 2009 -0400
b64c012
+++ b/src/virtManager/domain.py	Fri Mar 13 11:21:07 2009 -0400
b64c012
@@ -806,7 +806,7 @@
b64c012
         def _parse_char_devs(ctx):
b64c012
             chars = []
b64c012
             devs  = []
b64c012
-            devs = ctx.xpathEval("/domain/devices/console")
b64c012
+            devs.extend(ctx.xpathEval("/domain/devices/console"))
b64c012
             devs.extend(ctx.xpathEval("/domain/devices/parallel"))
b64c012
             devs.extend(ctx.xpathEval("/domain/devices/serial"))
b64c012
 
b64c012
@@ -822,7 +822,7 @@
b64c012
                 target_port = None
b64c012
                 source_path = None
b64c012
 
b64c012
-                for child in node.children:
b64c012
+                for child in node.children or []:
b64c012
                     if child.name == "target":
b64c012
                         target_port = child.prop("port")
b64c012
                     if child.name == "source":
b64c012
# HG changeset patch
b64c012
# User Cole Robinson <crobinso@redhat.com>
b64c012
# Date 1236964404 14400
b64c012
# Node ID 7ab8a12b3527d97bc92acca7e6e6ff3fbdd9746b
b64c012
# Parent  4331403b2e66dafdda618283dcea259a66fba423
b64c012
Check what XMLDesc flags the connection supports before using them.
b64c012
b64c012
diff -r 4331403b2e66 -r 7ab8a12b3527 src/virtManager/connection.py
b64c012
--- a/src/virtManager/connection.py	Fri Mar 13 11:21:07 2009 -0400
b64c012
+++ b/src/virtManager/connection.py	Fri Mar 13 13:13:24 2009 -0400
b64c012
@@ -104,6 +104,7 @@
b64c012
         self.state = self.STATE_DISCONNECTED
b64c012
         self.vmm = None
b64c012
         self.storage_capable = None
b64c012
+        self.dom_xml_flags = None
b64c012
 
b64c012
         # Connection Storage pools: UUID -> vmmStoragePool
b64c012
         self.pools = {}
b64c012
@@ -290,6 +291,29 @@
b64c012
     def get_capabilities(self):
b64c012
         return virtinst.CapabilitiesParser.parse(self.vmm.getCapabilities())
b64c012
 
b64c012
+    def set_dom_flags(self, vm):
b64c012
+        if self.dom_xml_flags != None:
b64c012
+            # Already set
b64c012
+            return
b64c012
+
b64c012
+        self.dom_xml_flags = []
b64c012
+        for flags in [libvirt.VIR_DOMAIN_XML_SECURE,
b64c012
+                      libvirt.VIR_DOMAIN_XML_INACTIVE,
b64c012
+                      (libvirt.VIR_DOMAIN_XML_SECURE |
b64c012
+                       libvirt.VIR_DOMAIN_XML_INACTIVE )]:
b64c012
+            try:
b64c012
+                vm.XMLDesc(flags)
b64c012
+                self.dom_xml_flags.append(flags)
b64c012
+            except libvirt.libvirtError, e:
b64c012
+                logging.debug("%s does not support flags=%d : %s" %
b64c012
+                              (self.get_uri(), flags, str(e)))
b64c012
+
b64c012
+    def has_dom_flags(self, flags):
b64c012
+        if self.dom_xml_flags == None:
b64c012
+            return False
b64c012
+
b64c012
+        return bool(self.dom_xml_flags.count(flags))
b64c012
+
b64c012
     def is_kvm_supported(self):
b64c012
         if self.is_qemu_session():
b64c012
             return False
b64c012
diff -r 4331403b2e66 -r 7ab8a12b3527 src/virtManager/domain.py
b64c012
--- a/src/virtManager/domain.py	Fri Mar 13 11:21:07 2009 -0400
b64c012
+++ b/src/virtManager/domain.py	Fri Mar 13 13:13:24 2009 -0400
b64c012
@@ -75,6 +75,10 @@
b64c012
         self.toggle_sample_network_traffic()
b64c012
         self.toggle_sample_disk_io()
b64c012
 
b64c012
+        # Determine available XML flags (older libvirt versions will error
b64c012
+        # out if passed SECURE_XML, INACTIVE_XML, etc)
b64c012
+        self.connection.set_dom_flags(vm)
b64c012
+
b64c012
     def get_xml(self):
b64c012
         # Get domain xml. If cached xml is invalid, update.
b64c012
         if self._xml is None or not self._valid_xml:
b64c012
@@ -85,8 +89,12 @@
b64c012
         # Force an xml update. Signal 'config-changed' if domain xml has
b64c012
         # changed since last refresh
b64c012
 
b64c012
+        flags = libvirt.VIR_DOMAIN_XML_SECURE
b64c012
+        if not self.connection.has_dom_flags(flags):
b64c012
+            flags = 0
b64c012
+
b64c012
         origxml = self._xml
b64c012
-        self._xml = self.vm.XMLDesc(libvirt.VIR_DOMAIN_XML_SECURE)
b64c012
+        self._xml = self.vm.XMLDesc(flags)
b64c012
         self._valid_xml = True
b64c012
 
b64c012
         if origxml != self._xml:
b64c012
@@ -106,8 +114,15 @@
b64c012
         return self._orig_inactive_xml
b64c012
 
b64c012
     def refresh_inactive_xml(self):
b64c012
-        self._orig_inactive_xml = self.vm.XMLDesc(libvirt.VIR_DOMAIN_XML_INACTIVE | libvirt.VIR_DOMAIN_XML_SECURE)
b64c012
-        print "xml refresh to: %s" % self._orig_inactive_xml
b64c012
+        flags = (libvirt.VIR_DOMAIN_XML_INACTIVE |
b64c012
+                 libvirt.VIR_DOMAIN_XML_SECURE)
b64c012
+        if not self.connection.has_dom_flags(flags):
b64c012
+            flags = libvirt.VIR_DOMAIN_XML_INACTIVE
b64c012
+
b64c012
+            if not self.connection.has_dom_flags:
b64c012
+                flags = 0
b64c012
+
b64c012
+        self._orig_inactive_xml = self.vm.XMLDesc(flags)
b64c012
 
b64c012
     def release_handle(self):
b64c012
         del(self.vm)
b64c012
# HG changeset patch
b64c012
# User Cole Robinson <crobinso@redhat.com>
b64c012
# Date 1236969435 14400
b64c012
# Node ID 6374136c62476678cf965eaac2c2680602641371
b64c012
# Parent  403916479f503f79f23bb682698b38f595eb0626
b64c012
Fix default 'New VM' install options on older xen connections.
b64c012
b64c012
diff -r 403916479f50 -r 6374136c6247 src/virtManager/create.py
b64c012
--- a/src/virtManager/create.py	Fri Mar 13 14:35:55 2009 -0400
b64c012
+++ b/src/virtManager/create.py	Fri Mar 13 14:37:15 2009 -0400
b64c012
@@ -690,6 +690,16 @@
b64c012
         net_list.set_active(default)
b64c012
 
b64c012
     def change_caps(self, gtype=None, dtype=None):
b64c012
+
b64c012
+        if gtype == None:
b64c012
+            # If none specified, prefer HVM. This way, the default install
b64c012
+            # options won't be limited because we default to PV. If hvm not
b64c012
+            # supported, differ to guest_lookup
b64c012
+            for g in self.caps.guests:
b64c012
+                if g.os_type == "hvm":
b64c012
+                    gtype = "hvm"
b64c012
+                    break
b64c012
+
b64c012
         (newg,
b64c012
          newdom) = virtinst.CapabilitiesParser.guest_lookup(conn=self.conn.vmm,
b64c012
                                                             caps=self.caps,