[virt-tools-list] [PATCH] virt-manager:Add "vSCSI disk" and "vSCSI cdrom" option into Device type in "add hardware" page
Li Zhang
zhlcindy at linux.vnet.ibm.com
Thu Mar 29 07:44:39 UTC 2012
From: Qing Lin <qinglbj at linux.vnet.ibm.com>
1.Add "vSCSI disk" and "vSCSI cdrom" option into device type on
"add storage page".
2.Add sPAPR-vSCSI controller when it's needed.
When vSCSI controller doesn't exist,there are two situations to
add it:one is when adding a vSCSI disk, another is when
an existing disk is changed into sPAPR-vSCSI bus type.
3.Fix Disk Lable text on details page.
Signed-off-by: Qing Lin <qinglbj at linux.vnet.ibm.com>
Signed-off-by: Li Zhang <zhlcindy at linux.vnet.ibm.com>
---
src/virtManager/addhardware.py | 30 ++++++++++++++++++++++++++++++
src/virtManager/details.py | 33 +++++++++++++++++++++++++++------
2 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py
index 50852ed..f7b3b3f 100644
--- a/src/virtManager/addhardware.py
+++ b/src/virtManager/addhardware.py
@@ -535,6 +535,9 @@ class vmmAddHardware(vmmGObjectUI):
add_dev("ide", virtinst.VirtualDisk.DEVICE_CDROM, "IDE cdrom")
add_dev("fdc", virtinst.VirtualDisk.DEVICE_FLOPPY, "Floppy disk")
+ if (self.vm.get_machtype() == "pseries"):
+ add_dev("spapr-vscsi", virtinst.VirtualDisk.DEVICE_DISK, "vSCSI disk")
+ add_dev("spapr-vscsi", virtinst.VirtualDisk.DEVICE_CDROM, "vSCSI cdrom")
if self.vm.rhel6_defaults():
add_dev("scsi", virtinst.VirtualDisk.DEVICE_DISK, "SCSI disk")
add_dev("usb", virtinst.VirtualDisk.DEVICE_DISK, "USB disk")
@@ -1176,6 +1179,25 @@ class vmmAddHardware(vmmGObjectUI):
if not res:
return (False, None)
+ if self.vm._guest:
+ if (self._dev.get_virtual_device_type() == VirtualDevice.VIRTUAL_DEV_DISK and
+ self._dev.address.type == "spapr-vio"):
+ vscsi_need_add = True
+ for dev in self.vm._guest._devices:
+ if (dev.get_virtual_device_type() == VirtualDevice.VIRTUAL_DEV_CONTROLLER and
+ dev.address.type == "spapr-vio"):
+ vscsi_need_add = False
+ break
+ if vscsi_need_add:
+ ctrl = virtinst.VirtualController.get_class_for_type(
+ virtinst.VirtualController.CONTROLLER_TYPE_SCSI)(self.vm._guest.conn)
+ ctrl.set_address("spapr-vio")
+ try:
+ self.vm.add_device(ctrl)
+ except Exception, e:
+ self.err.show_err(_("Error adding device: %s" % str(e)))
+ return (True, None)
+
# Alter persistent config
try:
self.vm.add_device(self._dev)
@@ -1264,6 +1286,11 @@ class vmmAddHardware(vmmGObjectUI):
if do_use:
diskpath = ideal
+ is_vscsi = False
+ if bus == "spapr-vscsi":
+ bus = "scsi"
+ is_vscsi = True
+
disk = virtinst.VirtualDisk(conn=self.conn.vmm,
path=diskpath,
size=disksize,
@@ -1274,6 +1301,9 @@ class vmmAddHardware(vmmGObjectUI):
driverCache=cache,
format=fmt)
+ if is_vscsi:
+ disk.set_address("spapr-vio")
+
if not fmt:
fmt = self.config.get_storage_format()
if (self.is_default_storage() and
diff --git a/src/virtManager/details.py b/src/virtManager/details.py
index 5395087..368b444 100644
--- a/src/virtManager/details.py
+++ b/src/virtManager/details.py
@@ -2217,6 +2217,22 @@ class vmmDetails(vmmGObjectUI):
if bus == "spapr-vscsi":
bus = "scsi"
addr = "spapr-vio"
+ vscsi_need_add = True
+ if self.vm._guest:
+ for dev in self.vm._guest._devices:
+ if (dev.get_virtual_device_type() == virtinst.VirtualDevice.VIRTUAL_DEV_CONTROLLER and
+ dev.address.type == "spapr-vio"):
+ vscsi_need_add = False
+ break
+ if vscsi_need_add:
+ ctrl = virtinst.VirtualController.get_class_for_type(
+ virtinst.VirtualController.CONTROLLER_TYPE_SCSI)(self.vm._guest.conn)
+ ctrl.set_address("spapr-vio")
+ try:
+ self.vm.add_device(ctrl)
+ except Exception, e:
+ self.err.show_err(_("Error adding device: %s" % str(e)))
+ return (True, None)
add_define(self.vm.define_disk_bus, dev_id_info, bus, addr)
return self._change_config_helper(df, da, hf, ha)
@@ -2806,7 +2822,6 @@ class vmmDetails(vmmGObjectUI):
ro = disk.read_only
share = disk.shareable
bus = disk.bus
- addr = disk.address.type
idx = disk.disk_bus_index
cache = disk.driver_cache
io = disk.driver_io
@@ -2830,9 +2845,11 @@ class vmmDetails(vmmGObjectUI):
is_cdrom = (devtype == virtinst.VirtualDisk.DEVICE_CDROM)
is_floppy = (devtype == virtinst.VirtualDisk.DEVICE_FLOPPY)
- if addr == "spapr-vio":
- bus = "spapr-vscsi"
+ if (self.vm.get_hv_type() == "kvm" and
+ self.vm.get_machtype() == "pseries"):
+ if bus == "scsi":
+ bus = "spapr-vscsi"
pretty_name = prettyify_disk(devtype, bus, idx)
self.widget("disk-source-path").set_text(path or "-")
@@ -3289,6 +3306,9 @@ class vmmDetails(vmmGObjectUI):
buses.append(["ide", "IDE"])
if self.vm.rhel6_defaults():
buses.append(["scsi", "SCSI"])
+ if (self.vm.get_hv_type() == "kvm" and
+ self.vm.get_machtype() == "pseries"):
+ buses.append(["spapr-vscsi", "sPAPR-vSCSI"])
else:
if self.vm.is_hvm():
buses.append(["ide", "IDE"])
@@ -3386,9 +3406,10 @@ class vmmDetails(vmmGObjectUI):
elif devtype == "floppy":
icon = "media-floppy"
- if disk.address.type == "spapr-vio":
- bus = "spapr-vscsi"
-
+ if (self.vm.get_hv_type() == "kvm" and
+ self.vm.get_machtype() == "pseries"):
+ if bus == "scsi":
+ bus = "spapr-vscsi"
label = prettyify_disk(devtype, bus, idx)
update_hwlist(HW_LIST_TYPE_DISK, disk, label, icon)
--
1.7.7.6
More information about the virt-tools-list
mailing list