diff --git a/src/virtManager/connection.py b/src/virtManager/connection.py index 50b2ec67b..3eba8fd57 100644 --- a/src/virtManager/connection.py +++ b/src/virtManager/connection.py @@ -254,6 +254,9 @@ class vmmConnection(gobject.GObject): self.emit("net-started", self.uri, uuid) return self.nets[uuid] + def define_domain(self, xml): + self.vmm.defineXML(xml) + def restore(self, frm): status = self.vmm.restore(frm) if(status == 0): diff --git a/src/virtManager/details.py b/src/virtManager/details.py index 482a701cb..ebb50731e 100644 --- a/src/virtManager/details.py +++ b/src/virtManager/details.py @@ -60,6 +60,12 @@ class vmmDetails(gobject.GObject): topwin.hide() topwin.set_title(self.vm.get_name() + " " + topwin.get_title()) + # Don't allowing changing network/disks for Dom0 + if self.vm.is_management_domain(): + self.window.get_widget("add-hardware-button").set_sensitive(False) + else: + self.window.get_widget("add-hardware-button").set_sensitive(True) + self.window.get_widget("overview-name").set_text(self.vm.get_name()) self.window.get_widget("overview-uuid").set_text(self.vm.get_uuid()) @@ -316,12 +322,6 @@ class vmmDetails(gobject.GObject): if details.get_current_page() == 0: self.refresh_summary() else: - #XXX for this week this only works for active domains, and it's temporary. - if self.vm.is_active(): - self.window.get_widget("add-hardware-button").set_sensitive(True) - else: - self.window.get_widget("add-hardware-button").set_sensitive(False) - # reload the hw model, go to the correct page, and refresh that page hw_list = self.window.get_widget("hw-list") hw_panel = self.window.get_widget("hw-panel") @@ -412,7 +412,10 @@ class vmmDetails(gobject.GObject): if active[1] != None: netinfo = active[0].get_value(active[1], 3) self.window.get_widget("network-source-type").set_text(netinfo[0]) - self.window.get_widget("network-source-device").set_text(netinfo[1]) + if netinfo[1] is not None: + self.window.get_widget("network-source-device").set_text(netinfo[1]) + else: + self.window.get_widget("network-source-device").set_text("-") self.window.get_widget("network-target-device").set_text(netinfo[2]) self.window.get_widget("network-mac-address").set_text(netinfo[3]) diff --git a/src/virtManager/domain.py b/src/virtManager/domain.py index f5a264c9a..750822536 100644 --- a/src/virtManager/domain.py +++ b/src/virtManager/domain.py @@ -91,7 +91,9 @@ class vmmDomain(gobject.GObject): return False def is_hvm(self): - os_type = self.vm.OSType() + os_type = self.get_xml_string("/domain/os/type") + # XXX libvirt bug - doesn't work for inactive guests + #os_type = self.vm.OSType() logging.debug("OS Type: %s" % os_type) if os_type == "hvm": return True @@ -526,10 +528,23 @@ class vmmDomain(gobject.GObject): return nics def add_device(self, xml): - self.vm.attachDevice(xml) + if self.is_active(): + self.vm.attachDevice(xml) + + vmxml = self.vm.XMLDesc(0) + + index = vmxml.find("") + newxml = vmxml[0:index] + xml + vmxml[index:] + + logging.debug("Redefine with " + newxml) + + self.get_connection().define_domain(newxml) def remove_device(self, xml): - self.vm.detachDevice(xml) + if self.is_active(): + self.vm.detachDevice(xml) + + # XXX remove from defined XML. Eek ! def set_vcpu_count(self, vcpus): vcpus = int(vcpus)