[virt-tools-list] [PATCH] virt-manager: allow switching between USB1/piix3 and USB2/ich9 controller

Cole Robinson crobinso at redhat.com
Thu Oct 6 18:07:26 UTC 2011


On 09/23/2011 11:14 AM, Marc-André Lureau wrote:
> ---
>  src/virtManager/details.py |   47 ++++++++++++++++++++++++++++++++++++++++++-
>  src/virtManager/domain.py  |   20 ++++++++++++++++++
>  src/vmm-details.glade      |   26 ++++++++++++++++++++++-
>  3 files changed, 89 insertions(+), 4 deletions(-)
> 

Pushed this now.

Thanks,
Cole

> 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>




More information about the virt-tools-list mailing list