[virt-tools-list] [virt-manager][Patch v2]Add virtio-scsi disk bus option
Chen Hanxiao
chenhanxiao at cn.fujitsu.com
Fri Nov 16 09:35:08 UTC 2012
From: ChenHanxiao <chenhanxiao at cn.fujitsu.com>
This patch will add virtio-scsi bus option on "Add New Virtual
Hardware" GUI page. It will support users to add a virtual disk
using SCSI bus with a controller model virtio-scsi.
If there is no SCSI controller existed, a new SCSI controller by
model 'virtio-scsi' will be added automatically.
Signed-off-by: ChenHanxiao <chenhanxiao at cn.fujitsu.com>
---
src/virtManager/addhardware.py | 38 ++++++++++++++++++++++++++++++++++++++
src/virtManager/details.py | 6 +++++-
2 files changed, 43 insertions(+), 1 deletions(-)
diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py
index 4d894eb..76797c9 100644
--- a/src/virtManager/addhardware.py
+++ b/src/virtManager/addhardware.py
@@ -34,6 +34,7 @@ import virtManager.uihelpers as uihelpers
from virtManager.asyncjob import vmmAsyncJob
from virtManager.storagebrowse import vmmStorageBrowser
from virtManager.baseclass import vmmGObjectUI
+from virtinst.VirtualController import VirtualControllerSCSI
PAGE_ERROR = 0
PAGE_DISK = 1
@@ -539,6 +540,8 @@ class vmmAddHardware(vmmGObjectUI):
if self.vm.get_hv_type() == "kvm":
add_dev("sata", virtinst.VirtualDisk.DEVICE_DISK, "SATA disk")
add_dev("virtio", virtinst.VirtualDisk.DEVICE_DISK, "Virtio disk")
+ add_dev("virtio-scsi", virtinst.VirtualDisk.DEVICE_DISK,
+ "Virtio-SCSI disk")
if self.conn.is_xen():
add_dev("xen", virtinst.VirtualDisk.DEVICE_DISK, "Virtual disk")
@@ -1151,10 +1154,16 @@ class vmmAddHardware(vmmGObjectUI):
self._dev.get_xml_config()
logging.debug("Adding device:\n" + self._dev.get_xml_config())
+ if self.has_controller():
+ if self._controller is not None:
+ logging.debug("Adding controller:\n"
+ + self._controller.get_xml_config())
# Hotplug device
attach_err = False
try:
+ if self.has_controller() and self._controller is not None:
+ self.vm.attach_device(self._controller)
self.vm.attach_device(self._dev)
except Exception, e:
logging.debug("Device could not be hotplugged: %s", str(e))
@@ -1176,6 +1185,13 @@ class vmmAddHardware(vmmGObjectUI):
return (False, None)
# Alter persistent config
+ if self.has_controller() and self._controller is not None:
+ try:
+ self.vm.add_device(self._controller)
+ except Excpetion, e:
+ self.err.show_err(_("Error adding device: %s" % str(e)))
+ return (True, None)
+
try:
self.vm.add_device(self._dev)
except Exception, e:
@@ -1184,6 +1200,14 @@ class vmmAddHardware(vmmGObjectUI):
return (False, None)
+ #check whether device has attribute '_controller'
+ def has_controller(self):
+ try:
+ self._controller
+ except AttributeError:
+ return False
+ else:
+ return True
###########################
# Page validation methods #
@@ -1222,6 +1246,10 @@ class vmmAddHardware(vmmGObjectUI):
bus, device = self.get_config_disk_target()
cache = self.get_config_disk_cache()
fmt = self.get_config_disk_format()
+ model = None
+ if bus == "virtio-scsi":
+ bus = "scsi"
+ model = "virtio-scsi"
# Make sure default pool is running
if self.is_default_storage():
@@ -1271,6 +1299,7 @@ class vmmAddHardware(vmmGObjectUI):
device=device,
bus=bus,
driverCache=cache,
+ model=model,
format=fmt)
if not fmt:
@@ -1316,6 +1345,15 @@ class vmmAddHardware(vmmGObjectUI):
uihelpers.check_path_search_for_qemu(self.topwin,
self.conn, disk.path)
+ if disk.model == "virtio-scsi":
+ controllers = self.vm.get_controller_devices()
+ controller = VirtualControllerSCSI(conn = self.conn.vmm)
+ controller.set_model(disk.model)
+ self._controller = controller
+ for d in controllers:
+ if disk.model == d.model:
+ self._controller = None
+
self._dev = disk
return True
diff --git a/src/virtManager/details.py b/src/virtManager/details.py
index d20e748..0e86648 100644
--- a/src/virtManager/details.py
+++ b/src/virtManager/details.py
@@ -2219,7 +2219,11 @@ class vmmDetails(vmmGObjectUI):
if bus == "spapr-vscsi":
bus = "scsi"
addr = "spapr-vio"
- add_define(self.vm.define_disk_bus, dev_id_info, bus, addr)
+ if bus == "virtio-scsi":
+ bus = "scsi"
+ model = "virtio-scsi"
+ add_define(self.vm.define_disk_bus, dev_id_info, bus,
+ addr, model)
return self._change_config_helper(df, da, hf, ha)
--
1.7.1
More information about the virt-tools-list
mailing list