mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
details: Allow changing APIC and ACPI settings.
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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 #
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user