details: Allow changing APIC and ACPI settings.

This commit is contained in:
Cole Robinson
2009-11-04 11:09:41 -05:00
parent 90d0a55b7f
commit 90a35cab48
3 changed files with 65 additions and 13 deletions

View File

@@ -173,6 +173,8 @@ class vmmDetails(gobject.GObject):
"on_details_pages_switch_page": self.switch_page,
"on_overview_acpi_changed": self.config_enable_apply,
"on_overview_apic_changed": self.config_enable_apply,
"on_config_vcpus_changed": self.config_vcpus_changed,
"on_config_memory_changed": self.config_memory_changed,
"on_config_maxmem_changed": self.config_maxmem_changed,
@@ -343,8 +345,6 @@ class vmmDetails(gobject.GObject):
def init_details(self):
# Disable all 'machine details' options since we don't yet allow edit
self.window.get_widget("overview-clock-combo").set_sensitive(False)
self.window.get_widget("overview-acpi").set_sensitive(False)
self.window.get_widget("overview-apic").set_sensitive(False)
# Hardware list
# [ label, icon name, icon size, hw type, hw data ]
@@ -805,6 +805,9 @@ class vmmDetails(gobject.GObject):
# Details/Hardware listeners #
##############################
def config_enable_apply(self, ignore):
self.window.get_widget("config-apply").set_sensitive(True)
# Overview -> Security
def security_model_changed(self, combo):
model = combo.get_model()
@@ -901,7 +904,7 @@ class vmmDetails(gobject.GObject):
ret = False
if pagetype is HW_LIST_TYPE_GENERAL:
ret = self.config_security_apply()
ret = self.config_overview_apply()
elif pagetype is HW_LIST_TYPE_CPU:
ret = self.config_vcpus_apply()
elif pagetype is HW_LIST_TYPE_MEMORY:
@@ -914,8 +917,13 @@ class vmmDetails(gobject.GObject):
if ret is not False:
self.window.get_widget("config-apply").set_sensitive(False)
# Overview -> Security
def config_security_apply(self):
# Overview section
def config_overview_apply(self):
# Machine details
enable_acpi = self.window.get_widget("overview-acpi").get_active()
enable_apic = self.window.get_widget("overview-apic").get_active()
# Security
combo = self.window.get_widget("security-model")
model = combo.get_model()
semodel = model[combo.get_active()][0]
@@ -930,9 +938,12 @@ class vmmDetails(gobject.GObject):
selabel = self.window.get_widget("security-label").get_text()
return self._change_config_helper(self.vm.define_seclabel,
(semodel, setype, selabel))
return self._change_config_helper([self.vm.define_acpi,
self.vm.define_apic,
self.vm.define_seclabel],
[(enable_acpi,),
(enable_apic,),
(semodel, setype, selabel)])
# CPUs
def config_vcpus_apply(self):

View File

@@ -304,9 +304,9 @@ class vmmDomain(gobject.GObject):
# End XML fetching routines #
#############################
####################
# XML Altering API #
####################
###########################
# XML/Config Altering API #
###########################
def check_device_is_present(self, dev_type, dev_id_info):
"""
@@ -478,6 +478,7 @@ class vmmDomain(gobject.GObject):
self.redefine(change_vcpu_xml, vcpus, cpuset)
# Memory routines
def hotplug_both_mem(self, memory, maxmem):
logging.info("Hotplugging curmem=%s maxmem=%s for VM '%s'" %
(memory, maxmem, self.get_name()))
@@ -515,6 +516,7 @@ class vmmDomain(gobject.GObject):
self.redefine(change_mem_xml, memory, maxmem)
# Boot device
def set_boot_device(self, boot_type):
logging.debug("Setting boot device to type: %s" % boot_type)
@@ -529,6 +531,7 @@ class vmmDomain(gobject.GObject):
self.redefine(util.xml_parse_wrapper, set_boot_xml)
# Security label
def define_seclabel(self, model, t, label):
logging.debug("Changing seclabel with model=%s t=%s label=%s" %
(model, t, label))
@@ -561,8 +564,44 @@ class vmmDomain(gobject.GObject):
return doc.serialize()
self.redefine(util.xml_parse_wrapper,
change_label)
self.redefine(util.xml_parse_wrapper, change_label)
# Helper function for changing ACPI/APIC
def _change_features_helper(self, xml, feature_name, do_enable):
def change_feature(doc, ctx):
feature_node = ctx.xpathEval("/domain/features")
feature_node = (feature_node and feature_node[0] or None)
if not feature_node:
if do_enable:
domain_node = ctx.xpathEval("/domain")[0]
feature_node = domain_node.newChild(None, "features", None)
if feature_node:
node = ctx.xpathEval("/domain/features/%s" % feature_name)
node = (node and node[0] or None)
if node:
if not do_enable:
node.unlinkNode()
node.freeNode()
else:
if do_enable:
feature_node.newChild(None, feature_name, None)
return doc.serialize()
return util.xml_parse_wrapper(xml, change_feature)
def define_acpi(self, do_enable):
if do_enable == self.get_acpi():
return
self.redefine(self._change_features_helper, "acpi", do_enable)
def define_apic(self, do_enable):
if do_enable == self.get_apic():
return
self.redefine(self._change_features_helper, "apic", do_enable)
########################
# End XML Altering API #

View File

@@ -1228,6 +1228,7 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_overview_acpi_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -1241,6 +1242,7 @@
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_overview_apic_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>