[virt-tools-list] [PATCH] virt-manager: allow switching between USB1/piix3 and USB2/ich9 controller
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Oct 4 12:05:23 UTC 2011
ping review (this patch and the 2 others required in python-virtinst)
On Fri, Sep 23, 2011 at 5:14 PM, Marc-André Lureau
<marcandre.lureau at gmail.com> wrote:
> ---
> src/virtManager/details.py | 47 ++++++++++++++++++++++++++++++++++++++++++-
> src/virtManager/domain.py | 20 ++++++++++++++++++
> src/vmm-details.glade | 26 ++++++++++++++++++++++-
> 3 files changed, 89 insertions(+), 4 deletions(-)
>
> diff --git a/src/virtManager/details.py b/src/virtManager/details.py
> index 9b53901..a7d5941 100644
> --- a/src/virtManager/details.py
> +++ b/src/virtManager/details.py
> @@ -38,7 +38,7 @@ from virtManager import util as util
> import virtinst
>
> # Parameters that can be editted in the details window
> -EDIT_TOTAL = 34
> +EDIT_TOTAL = 35
> (EDIT_NAME,
> EDIT_ACPI,
> EDIT_APIC,
> @@ -83,6 +83,8 @@ EDIT_VIDEO_MODEL,
>
> EDIT_WATCHDOG_MODEL,
> EDIT_WATCHDOG_ACTION,
> +
> +EDIT_CONTROLLER_MODEL
> ) = range(EDIT_TOTAL)
>
>
> @@ -474,6 +476,8 @@ class vmmDetails(vmmGObjectUI):
> "on_console_pages_switch_page": self.console.page_changed,
> "on_console_auth_password_activate": self.console.auth_login,
> "on_console_auth_login_clicked": self.console.auth_login,
> + "on_controller_model_combo_changed": (self.enable_apply,
> + EDIT_CONTROLLER_MODEL),
> })
>
> # Deliberately keep all this after signal connection
> @@ -937,6 +941,16 @@ class vmmDetails(vmmGObjectUI):
> combo = self.widget("redir-type-combo")
> uihelpers.build_redir_type_combo(self.vm, combo)
>
> + # Controller model
> + combo = self.widget("controller-model-combo")
> + model = gtk.ListStore(str, str)
> + combo.set_model(model)
> + text = gtk.CellRendererText()
> + combo.pack_start(text, True)
> + combo.add_attribute(text, 'text', 1)
> + combo.set_active(-1)
> +
> +
> # Helper function to handle the combo/label pattern used for
> # video model, sound model, network model, etc.
> def set_combo_label(self, prefix, value, model_idx=0, label="",
> @@ -1871,6 +1885,8 @@ class vmmDetails(vmmGObjectUI):
> ret = self.config_watchdog_apply(key)
> elif pagetype is HW_LIST_TYPE_SMARTCARD:
> ret = self.config_smartcard_apply(key)
> + elif pagetype is HW_LIST_TYPE_CONTROLLER:
> + ret = self.config_controller_apply(key)
> else:
> ret = False
> except Exception, e:
> @@ -2258,6 +2274,18 @@ class vmmDetails(vmmGObjectUI):
>
> return self._change_config_helper(df, da, hf, ha)
>
> + # Controller options
> + def config_controller_apply(self, dev_id_info):
> + df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
> + ignore = add_hotplug
> +
> + if self.editted(EDIT_CONTROLLER_MODEL):
> + model = self.get_combo_label_value("controller-model")
> + if model:
> + add_define(self.vm.define_controller_model, dev_id_info, model)
> +
> + return self._change_config_helper(df, da, hf, ha)
> +
> # Watchdog options
> def config_watchdog_apply(self, dev_id_info):
> df, da, add_define, hf, ha, add_hotplug = self.make_apply_data()
> @@ -3079,7 +3107,18 @@ class vmmDetails(vmmGObjectUI):
> model_label = _("Default")
>
> self.widget("controller-type").set_text(type_label)
> - self.widget("controller-model").set_text(model_label)
> +
> + combo = self.widget("controller-model-combo")
> + model = combo.get_model()
> + model.clear()
> + if dev.type == virtinst.VirtualController.CONTROLLER_TYPE_USB:
> + model.append(["Default", "Default"])
> + model.append(["ich9-ehci1", "USB 2"])
> + self.widget("config-remove").set_sensitive(False)
> + else:
> + self.widget("config-remove").set_sensitive(True)
> +
> + self.set_combo_label("controller-model", model_label)
>
> def refresh_filesystem_page(self):
> dev = self.get_hw_selection(HW_LIST_COL_DEVICE)
> @@ -3324,6 +3363,10 @@ class vmmDetails(vmmGObjectUI):
>
> # Populate controller devices
> for cont in self.vm.get_controller_devices():
> + # skip USB2 ICH9 companion controllers
> + if cont.model in [ "ich9-uhci1", "ich9-uhci2", "ich9-uhci3" ]:
> + continue
> +
> pretty_type = virtinst.VirtualController.pretty_type(cont.type)
> update_hwlist(HW_LIST_TYPE_CONTROLLER, cont,
> _("Controller %s") % pretty_type,
> diff --git a/src/virtManager/domain.py b/src/virtManager/domain.py
> index 6921dac..8483468 100644
> --- a/src/virtManager/domain.py
> +++ b/src/virtManager/domain.py
> @@ -683,6 +683,26 @@ class vmmDomain(vmmLibvirtObject):
> editdev.mode = newmodel
> return self._redefine_device(change, devobj)
>
> + # Controller define methods
> +
> + def define_controller_model(self, devobj, newmodel):
> + def change(editdev):
> + guest = self._get_guest_to_define()
> + ctrls = guest.get_devices("controller")
> + ctrls = filter(lambda x:
> + (x.type ==
> + virtinst.VirtualController.CONTROLLER_TYPE_USB),
> + ctrls)
> + for dev in ctrls:
> + guest.remove_device(dev)
> +
> + if newmodel == "ich9-ehci1":
> + print guest
> + guest.add_usb_ich9_controllers()
> +
> + return self._redefine_device(change, devobj)
> +
> +
>
> ####################
> # Hotplug routines #
> diff --git a/src/vmm-details.glade b/src/vmm-details.glade
> index de46cc3..852db1f 100644
> --- a/src/vmm-details.glade
> +++ b/src/vmm-details.glade
> @@ -5570,6 +5570,7 @@ I/O:</property>
> <widget class="GtkLabel" id="controller-type">
> <property name="visible">True</property>
> <property name="label">foo</property>
> + <property name="xalign">0</property>
> </widget>
> <packing>
> <property name="left_attach">1</property>
> @@ -5593,9 +5594,30 @@ I/O:</property>
> </packing>
> </child>
> <child>
> - <widget class="GtkLabel" id="controller-model">
> +
> + <widget class="GtkHBox" id="controller-model-box">
> <property name="visible">True</property>
> - <property name="label">foo</property>
> + <child>
> + <widget class="GtkComboBox" id="controller-model-combo">
> + <property name="visible">True</property>
> + <signal name="changed" handler="on_controller_model_combo_changed"/>
> + </widget>
> + <packing>
> + <property name="expand">False</property>
> + <property name="position">0</property>
> + </packing>
> + </child>
> + <child>
> + <widget class="GtkLabel" id="controller-model-label">
> + <property name="visible">True</property>
> + <property name="xalign">0</property>
> + <property name="label">label</property>
> + </widget>
> + <packing>
> + <property name="expand">False</property>
> + <property name="position">1</property>
> + </packing>
> + </child>
> </widget>
> <packing>
> <property name="left_attach">1</property>
> --
> 1.7.6.2
>
>
--
Marc-André Lureau
More information about the virt-tools-list
mailing list