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

Chen Hanxiao chenhanxiao at cn.fujitsu.com
Wed Jan 22 03:46:06 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
v4: remove some redundant codes

 virtManager/details.py |  6 ++++--
 virtManager/domain.py  | 39 +++++++++++++++++++++++----------------
 2 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/virtManager/details.py b/virtManager/details.py
index 778c63a..4236de2 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -3327,13 +3327,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()
@@ -3342,6 +3341,9 @@ class vmmDetails(vmmGObjectUI):
             model.append(["ich9-ehci1", "USB 2"])
             model.append(["nec-xhci", "USB 3"])
             self.widget("config-remove").set_sensitive(False)
+        if 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 f7ef66f..0793b4b 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -825,23 +825,30 @@ class vmmDomain(vmmLibvirtObject):
         def change(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:
-                guest.remove_device(dev)
-
-            if newmodel == "ich9-ehci1":
-                for dev in VirtualController.get_usb2_controllers(
-                        guest.conn):
+            if editdev.type == "usb":
+                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:
+                    guest.remove_device(dev)
+
+                if newmodel == "ich9-ehci1":
+                    for dev in VirtualController.get_usb2_controllers(
+                            guest.conn):
+                        guest.add_device(dev)
+                else:
+                    dev = VirtualController(guest.conn)
+                    dev.type = "usb"
+                    if newmodel != "default":
+                        dev.model = newmodel
                     guest.add_device(dev)
-            else:
-                dev = VirtualController(guest.conn)
-                dev.type = "usb"
-                if newmodel != "default":
-                    dev.model = newmodel
-                guest.add_device(dev)
+            elif editdev.type == "scsi":
+                if newmodel == "default":
+                    editdev.model = None
+                else:
+                    editdev.model = newmodel
+                self.update_device(editdev)
 
         return self._redefine_device(change, devobj)
 
-- 
1.8.2.1




More information about the virt-tools-list mailing list