[virt-tools-list] [virt-manager PATCH v3] add support for showing and modifying scsi controller model

Chen Hanxiao chenhanxiao at cn.fujitsu.com
Tue Jan 21 09:19:20 UTC 2014


From: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>

We could specify 'model' for scsi controllers,
that means we could see more than one controllers
with same icon and blank details.
That will confuse users.

This patch will show details of scsi controller device.
And also we could modify scsi controller model
between 'default' and 'virtio-scsi'.

Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
---
v2: fix an issue if no scsi controller existed
v3: code refactor according to cole's comments

 virtManager/details.py |  6 ++++--
 virtManager/domain.py  | 21 +++++++++++++++------
 2 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/virtManager/details.py b/virtManager/details.py
index 32d51d7..aa48868 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -3299,13 +3299,12 @@ class vmmDetails(vmmGObjectUI):
 
         type_label = virtinst.VirtualController.pretty_type(dev.type)
         model_label = dev.model
-        is_usb = dev.type == virtinst.VirtualController.TYPE_USB
         if not model_label:
             model_label = _("Default")
 
         self.widget("controller-type").set_text(type_label)
         combo = self.widget("controller-model")
-        uihelpers.set_grid_row_visible(combo, is_usb)
+        uihelpers.set_grid_row_visible(combo, True)
 
         model = combo.get_model()
         model.clear()
@@ -3314,6 +3313,9 @@ class vmmDetails(vmmGObjectUI):
             model.append(["ich9-ehci1", "USB 2"])
             model.append(["nec-xhci", "USB 3"])
             self.widget("config-remove").set_sensitive(False)
+        elif dev.type == virtinst.VirtualController.TYPE_SCSI:
+            model.append(["default", "Default"])
+            model.append(["virtio-scsi", "Virtio SCSI"])
         else:
             self.widget("config-remove").set_sensitive(True)
 
diff --git a/virtManager/domain.py b/virtManager/domain.py
index ada404b..6cfec3a 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -822,16 +822,15 @@ class vmmDomain(vmmLibvirtObject):
 
     # Controller define methods
     def define_controller_model(self, devobj, newmodel):
-        def change(editdev):
+        def _change_usb(editdev):
             ignore = editdev
 
             guest = self._get_xmlobj_to_define()
             ctrls = guest.get_devices("controller")
-            ctrls = [x for x in ctrls if (x.type ==
-                     VirtualController.TYPE_USB)]
-            for dev in ctrls:
+            ctrls_usb = [x for x in ctrls if
+                    (x.type == VirtualController.TYPE_USB)]
+            for dev in ctrls_usb:
                 guest.remove_device(dev)
-
             if newmodel == "ich9-ehci1":
                 for dev in VirtualController.get_usb2_controllers(
                         guest.conn):
@@ -843,9 +842,19 @@ class vmmDomain(vmmLibvirtObject):
                     dev.model = newmodel
                 guest.add_device(dev)
 
-        return self._redefine_device(change, devobj)
+        def _change_scsi(editdev):
+            ignore = editdev
 
+            if newmodel != "default":
+                editdev.model = newmodel
+            else:
+                editdev.model = None
+            self.update_device(editdev)
 
+        if devobj.type == "usb":
+            return self._redefine_device(_change_usb, devobj)
+        elif devobj.type == "scsi":
+            return self._redefine_device(_change_scsi, devobj)
 
     ####################
     # Hotplug routines #
-- 
1.8.2.1




More information about the virt-tools-list mailing list