libvirt: add virtio-scsi disk interface support
A new virtio-scsi cotroller will be presented to the guests,
when hw_disk_bus_model will be set to virtio-scsi in Glance
image metadata:
glance image-update \
--property hw_scsi_model=virtio-scsi \
[image]
DocImpact
Partially implements blueprint libvirt-virtio-scsi-driver
Change-Id: I2723494130055687a9dfc58b1a27e586116fdff3
This commit is contained in:
@@ -992,6 +992,51 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertEqual(cfg.devices[2].target_dev, 'hdd')
|
||||
|
||||
def test_get_guest_config_with_virtio_scsi_bus(self):
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
|
||||
image_meta = {"properties": {"hw_scsi_model": "virtio-scsi"}}
|
||||
instance_ref = db.instance_create(self.context, self.test_instance)
|
||||
|
||||
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
|
||||
instance_ref, [], image_meta)
|
||||
cfg = conn.get_guest_config(instance_ref, [], image_meta, disk_info)
|
||||
self.assertIsInstance(cfg.devices[0],
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertIsInstance(cfg.devices[1],
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertIsInstance(cfg.devices[2],
|
||||
vconfig.LibvirtConfigGuestController)
|
||||
self.assertEqual(cfg.devices[2].model, 'virtio-scsi')
|
||||
|
||||
def test_get_guest_config_with_virtio_scsi_bus_bdm(self):
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
|
||||
image_meta = {"properties": {"hw_scsi_model": "virtio-scsi"}}
|
||||
instance_ref = db.instance_create(self.context, self.test_instance)
|
||||
conn_info = {'driver_volume_type': 'fake'}
|
||||
bd_info = {'block_device_mapping': [
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/sdc',
|
||||
'disk_bus': 'scsi'},
|
||||
{'connection_info': conn_info, 'mount_device': '/dev/sdd',
|
||||
'disk_bus': 'scsi'}]}
|
||||
|
||||
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
|
||||
instance_ref, bd_info, image_meta)
|
||||
cfg = conn.get_guest_config(instance_ref, [], image_meta, disk_info,
|
||||
[], bd_info)
|
||||
self.assertIsInstance(cfg.devices[2],
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertEqual(cfg.devices[2].target_dev, 'sdc')
|
||||
self.assertEqual(cfg.devices[2].target_bus, 'scsi')
|
||||
self.assertIsInstance(cfg.devices[3],
|
||||
vconfig.LibvirtConfigGuestDisk)
|
||||
self.assertEqual(cfg.devices[3].target_dev, 'sdd')
|
||||
self.assertEqual(cfg.devices[3].target_bus, 'scsi')
|
||||
self.assertIsInstance(cfg.devices[4],
|
||||
vconfig.LibvirtConfigGuestController)
|
||||
self.assertEqual(cfg.devices[4].model, 'virtio-scsi')
|
||||
|
||||
def test_get_guest_config_with_vnc(self):
|
||||
self.flags(vnc_enabled=True)
|
||||
self.flags(virt_type='kvm',
|
||||
|
||||
@@ -2977,6 +2977,14 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
for d in devices:
|
||||
self.set_cache_mode(d)
|
||||
|
||||
if (image_meta and
|
||||
image_meta.get('properties', {}).get('hw_scsi_model')):
|
||||
hw_scsi_model = image_meta['properties']['hw_scsi_model']
|
||||
scsi_controller = vconfig.LibvirtConfigGuestController()
|
||||
scsi_controller.type = 'scsi'
|
||||
scsi_controller.model = hw_scsi_model
|
||||
devices.append(scsi_controller)
|
||||
|
||||
return devices
|
||||
|
||||
def get_guest_config_sysinfo(self, instance):
|
||||
|
||||
Reference in New Issue
Block a user