Persist changes to device config when adding devices. Disable hotplug for dom0

This commit is contained in:
Daniel P. Berrange 2007-04-12 17:50:22 -04:00
parent d263695fa4
commit f1e8204440
3 changed files with 31 additions and 10 deletions

View File

@ -254,6 +254,9 @@ class vmmConnection(gobject.GObject):
self.emit("net-started", self.uri, uuid) self.emit("net-started", self.uri, uuid)
return self.nets[uuid] return self.nets[uuid]
def define_domain(self, xml):
self.vmm.defineXML(xml)
def restore(self, frm): def restore(self, frm):
status = self.vmm.restore(frm) status = self.vmm.restore(frm)
if(status == 0): if(status == 0):

View File

@ -60,6 +60,12 @@ class vmmDetails(gobject.GObject):
topwin.hide() topwin.hide()
topwin.set_title(self.vm.get_name() + " " + topwin.get_title()) 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-name").set_text(self.vm.get_name())
self.window.get_widget("overview-uuid").set_text(self.vm.get_uuid()) 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: if details.get_current_page() == 0:
self.refresh_summary() self.refresh_summary()
else: 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 # reload the hw model, go to the correct page, and refresh that page
hw_list = self.window.get_widget("hw-list") hw_list = self.window.get_widget("hw-list")
hw_panel = self.window.get_widget("hw-panel") hw_panel = self.window.get_widget("hw-panel")
@ -412,7 +412,10 @@ class vmmDetails(gobject.GObject):
if active[1] != None: if active[1] != None:
netinfo = active[0].get_value(active[1], 3) 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-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-target-device").set_text(netinfo[2])
self.window.get_widget("network-mac-address").set_text(netinfo[3]) self.window.get_widget("network-mac-address").set_text(netinfo[3])

View File

@ -91,7 +91,9 @@ class vmmDomain(gobject.GObject):
return False return False
def is_hvm(self): 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) logging.debug("OS Type: %s" % os_type)
if os_type == "hvm": if os_type == "hvm":
return True return True
@ -526,10 +528,23 @@ class vmmDomain(gobject.GObject):
return nics return nics
def add_device(self, xml): 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("</devices>")
newxml = vmxml[0:index] + xml + vmxml[index:]
logging.debug("Redefine with " + newxml)
self.get_connection().define_domain(newxml)
def remove_device(self, xml): 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): def set_vcpu_count(self, vcpus):
vcpus = int(vcpus) vcpus = int(vcpus)