From: Chen Hanxiao <chenhanxiao@xxxxxxxxxxxxxx> We could modify scsi controller model between 'default' and 'virtio-scsi'. Signed-off-by: Chen Hanxiao <chenhanxiao@xxxxxxxxxxxxxx> --- v2: fix an issue if no scsi controller existed virtManager/domain.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/virtManager/domain.py b/virtManager/domain.py index ada404b..f590c5e 100644 --- a/virtManager/domain.py +++ b/virtManager/domain.py @@ -822,27 +822,54 @@ class vmmDomain(vmmLibvirtObject): # Controller define methods def define_controller_model(self, devobj, newmodel): + #model list from libvirt + usb_controller_model = ["default", "piix3-uhci", "piix4-uhci", + "ehci", "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", + "ich9-uhci3", "vt82c686b-uhci", "pci-ohci", "nec-xhci"] + scsi_controller_model = ["default_virtio_scsi", "auto", "buslogic", + "lsilogic", "lsisas1068", "vmpvscsi", "ibmvscsi", "virtio-scsi", + "lsisas1078"] + 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) - + ctrls_usb = [x for x in ctrls if + (x.type == VirtualController.TYPE_USB)] + ctrls_scsi = [x for x in ctrls if + (x.type == VirtualController.TYPE_SCSI)] + + for dev in ctrls_usb: + if newmodel in usb_controller_model: + guest.remove_device(dev) if newmodel == "ich9-ehci1": for dev in VirtualController.get_usb2_controllers( guest.conn): guest.add_device(dev) - else: + elif newmodel in usb_controller_model: dev = VirtualController(guest.conn) dev.type = "usb" if newmodel != "default": dev.model = newmodel guest.add_device(dev) + if len(ctrls_scsi) > 0: + index_new = max([x.index for x in ctrls_scsi]) + 1 + + for dev in ctrls_scsi: + if newmodel in scsi_controller_model: + guest.remove_device(dev) + for dev in ctrls_scsi: + if newmodel == "virtio-scsi": + dev = VirtualController(guest.conn) + dev.type = "scsi" + dev.index = index_new + if newmodel != "default": + dev.model = newmodel + guest.add_device(dev) + break + return self._redefine_device(change, devobj) -- 1.8.2.1 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list