[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