addhardware: move _change_config_helper from details

rename it as change_config_helper.
It will be used in the later patch.

Signed-off-by: Chen Hanxiao <chenhanxiao@cn.fujitsu.com>
This commit is contained in:
Chen Hanxiao 2014-06-16 11:47:19 +08:00
parent b4a43fb6b7
commit 7beb7db31d
2 changed files with 88 additions and 72 deletions

View File

@ -1343,6 +1343,61 @@ class vmmAddHardware(vmmGObjectUI):
# Add device methods #
######################
@staticmethod
def change_config_helper(define_func, define_args, vm, err,
devobj=None,
hotplug_args=None):
hotplug_args = hotplug_args or {}
# Persistent config change
try:
if devobj:
define_func(devobj, False, **define_args)
else:
define_func(**define_args)
vm.redefine_cached()
except Exception, e:
err.show_err((_("Error changing VM configuration: %s") %
str(e)))
# If we fail, make sure we flush the cache
vm.refresh_xml()
return False
# Hotplug change
hotplug_err = None
if vm.is_active():
try:
if devobj:
hotplug_args["device"] = define_func(
devobj, True, **define_args)
if hotplug_args:
vm.hotplug(**hotplug_args)
except Exception, e:
logging.debug("Hotplug failed: %s", str(e))
hotplug_err = ((str(e), "".join(traceback.format_exc())))
if (hotplug_err or (vm.is_active() and not hotplug_args)):
if len(define_args) > 1:
msg = _("Some changes may require a guest shutdown "
"to take effect.")
else:
msg = _("These changes will take effect after "
"the next guest shutdown.")
dtype = (hotplug_err and
Gtk.MessageType.WARNING or Gtk.MessageType.INFO)
hotplug_msg = ""
if hotplug_err:
hotplug_msg += (hotplug_err[0] + "\n\n" +
hotplug_err[1] + "\n")
err.show_err(msg,
details=hotplug_msg,
buttons=Gtk.ButtonsType.OK,
dialog_type=dtype)
return True
def setup_device(self, asyncjob):
logging.debug("Running setup for device=%s", self._dev)
self._dev.setup(meter=asyncjob.get_meter())

View File

@ -2041,7 +2041,8 @@ class vmmDetails(vmmGObjectUI):
idmap_list = None
kwargs["idmap_list"] = idmap_list
return self._change_config_helper(self.vm.define_overview, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_overview,
kwargs, self.vm, self.err,
hotplug_args=hotplug_args)
def config_vcpus_apply(self):
@ -2069,7 +2070,8 @@ class vmmDetails(vmmGObjectUI):
kwargs["cores"] = None
kwargs["threads"] = None
return self._change_config_helper(self.vm.define_cpu, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_cpu,
kwargs, self.vm, self.err,
hotplug_args=hotplug_args)
def config_memory_apply(self):
@ -2092,7 +2094,8 @@ class vmmDetails(vmmGObjectUI):
hotplug_args["memory"] = kwargs["memory"]
hotplug_args["maxmem"] = kwargs["maxmem"]
return self._change_config_helper(self.vm.define_memory, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_memory,
kwargs, self.vm, self.err,
hotplug_args=hotplug_args)
def config_boot_options_apply(self):
@ -2133,14 +2136,16 @@ class vmmDetails(vmmGObjectUI):
if not kwargs["init"]:
return self.err.val_err(_("An init path must be specified"))
return self._change_config_helper(self.vm.define_boot, kwargs)
return vmmAddHardware.change_config_helper(self.vm.define_boot,
kwargs, self.vm, self.err)
# <device> defining
def change_storage_media(self, devobj, newpath):
kwargs = {"path": newpath}
hotplug_args = {"storage_path": True}
return self._change_config_helper(self.vm.define_disk, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_disk,
kwargs, self.vm, self.err,
devobj=devobj,
hotplug_args=hotplug_args)
@ -2194,7 +2199,8 @@ class vmmDetails(vmmGObjectUI):
kwargs["bus"] = bus
kwargs["addrstr"] = addr
return self._change_config_helper(self.vm.define_disk, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_disk,
kwargs, self.vm, self.err,
devobj=devobj)
def config_sound_apply(self, devobj):
@ -2205,7 +2211,8 @@ class vmmDetails(vmmGObjectUI):
if model:
kwargs["model"] = model
return self._change_config_helper(self.vm.define_sound, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_sound,
kwargs, self.vm, self.err,
devobj=devobj)
def config_smartcard_apply(self, devobj):
@ -2216,7 +2223,8 @@ class vmmDetails(vmmGObjectUI):
if model:
kwargs["model"] = model
return self._change_config_helper(self.vm.define_smartcard, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_smartcard,
kwargs, self.vm, self.err,
devobj=devobj)
def config_network_apply(self, devobj):
@ -2240,8 +2248,9 @@ class vmmDetails(vmmGObjectUI):
kwargs["typeid"], kwargs["typeidversion"],
kwargs["instanceid"]) = self.netlist.get_vport()
return self._change_config_helper(self.vm.define_network, kwargs,
devobj)
return vmmAddHardware.change_config_helper(self.vm.define_network,
kwargs, self.vm, self.err,
devobj=devobj)
def config_graphics_apply(self, devobj):
(gtype, port,
@ -2262,7 +2271,8 @@ class vmmDetails(vmmGObjectUI):
if self.edited(EDIT_GFX_TYPE):
kwargs["gtype"] = gtype
return self._change_config_helper(self.vm.define_graphics, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_graphics,
kwargs, self.vm, self.err,
devobj=devobj)
def config_video_apply(self, devobj):
@ -2273,7 +2283,8 @@ class vmmDetails(vmmGObjectUI):
if model:
kwargs["model"] = model
return self._change_config_helper(self.vm.define_video, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_video,
kwargs, self.vm, self.err,
devobj=devobj)
def config_controller_apply(self, devobj):
@ -2284,8 +2295,9 @@ class vmmDetails(vmmGObjectUI):
if model:
kwargs["model"] = model
return self._change_config_helper(self.vm.define_controller,
kwargs, devobj=devobj)
return vmmAddHardware.change_config_helper(self.vm.define_controller,
kwargs, self.vm, self.err,
devobj=devobj)
def config_watchdog_apply(self, devobj):
kwargs = {}
@ -2298,7 +2310,8 @@ class vmmDetails(vmmGObjectUI):
kwargs["action"] = uiutil.get_combo_entry(
self.widget("watchdog-action"))
return self._change_config_helper(self.vm.define_watchdog, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_watchdog,
kwargs, self.vm, self.err,
devobj=devobj)
def config_filesystem_apply(self, devobj):
@ -2309,8 +2322,9 @@ class vmmDetails(vmmGObjectUI):
return False
kwargs["newdev"] = self.fsDetails.get_dev()
return self._change_config_helper(self.vm.define_filesystem,
kwargs, devobj=devobj)
return vmmAddHardware.change_config_helper(self.vm.define_filesystem,
kwargs, self.vm, self.err,
devobj=devobj)
def config_hostdev_apply(self, devobj):
kwargs = {}
@ -2318,7 +2332,8 @@ class vmmDetails(vmmGObjectUI):
if self.edited(EDIT_HOSTDEV_ROMBAR):
kwargs["rom_bar"] = self.widget("hostdev-rombar").get_active()
return self._change_config_helper(self.vm.define_hostdev, kwargs,
return vmmAddHardware.change_config_helper(self.vm.define_hostdev,
kwargs, self.vm, self.err,
devobj=devobj)
@ -2359,60 +2374,6 @@ class vmmDetails(vmmGObjectUI):
buttons=Gtk.ButtonsType.OK,
dialog_type=Gtk.MessageType.INFO)
def _change_config_helper(self, define_func, define_args,
devobj=None,
hotplug_args=None):
hotplug_args = hotplug_args or {}
# Persistent config change
try:
if devobj:
define_func(devobj, False, **define_args)
else:
define_func(**define_args)
self.vm.redefine_cached()
except Exception, e:
self.err.show_err((_("Error changing VM configuration: %s") %
str(e)))
# If we fail, make sure we flush the cache
self.vm.refresh_xml()
return False
# Hotplug change
hotplug_err = None
if self.vm.is_active():
try:
if devobj:
hotplug_args["device"] = define_func(
devobj, True, **define_args)
if hotplug_args:
self.vm.hotplug(**hotplug_args)
except Exception, e:
logging.debug("Hotplug failed: %s", str(e))
hotplug_err = ((str(e), "".join(traceback.format_exc())))
if (hotplug_err or (self.vm.is_active() and not hotplug_args)):
if len(define_args) > 1:
msg = _("Some changes may require a guest shutdown "
"to take effect.")
else:
msg = _("These changes will take effect after "
"the next guest shutdown.")
dtype = (hotplug_err and
Gtk.MessageType.WARNING or Gtk.MessageType.INFO)
hotplug_msg = ""
if hotplug_err:
hotplug_msg += (hotplug_err[0] + "\n\n" +
hotplug_err[1] + "\n")
self.err.show_err(msg,
details=hotplug_msg,
buttons=Gtk.ButtonsType.OK,
dialog_type=dtype)
return True
########################
# Details page refresh #