From c5f2c220cd3b1e7be927d5e400d4462e2495ee65 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 16 Jan 2013 12:38:23 +0000 Subject: [PATCH] Allow disk driver to be chosen per image This allows for an image in glance to be annotated with a property describing the required disk / cdrom bus type. eg # glance image-update \ --property disk_bus=ide \ --property cdrom_bus=ide \ f16-x86_64-openstack-sda Valid bus values vary per the libvirt_type setting: qemu/kvm: 'virtio', 'scsi', 'ide', 'usb' xen: 'xen', 'ide' uml: 'uml' Requesting an unsupported disk bus will cause the guest instance to fail to launch. DocImpact Blueprint: libvirt-custom-hardware Change-Id: Ibc20b843ceccf374eae246384a3f246cc1c52a28 Signed-off-by: Daniel P. Berrange --- nova/tests/test_libvirt_blockinfo.py | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/nova/tests/test_libvirt_blockinfo.py b/nova/tests/test_libvirt_blockinfo.py index 23f84632..e8d54839 100644 --- a/nova/tests/test_libvirt_blockinfo.py +++ b/nova/tests/test_libvirt_blockinfo.py @@ -18,6 +18,7 @@ from nova import block_device from nova import context from nova import db +from nova import exception from nova import test import nova.tests.image.fake from nova.virt.libvirt import blockinfo @@ -394,3 +395,33 @@ class LibvirtBlockInfoTest(test.TestCase): 'root': {'bus': 'virtio', 'dev': 'vdf', 'type': 'disk'} } self.assertEqual(mapping, expect) + + def test_get_disk_bus(self): + bus = blockinfo.get_disk_bus_for_device_type('kvm') + self.assertEqual(bus, 'virtio') + + bus = blockinfo.get_disk_bus_for_device_type('kvm', + device_type='cdrom') + self.assertEqual(bus, 'ide') + + image_meta = {'properties': {'disk_bus': 'scsi'}} + bus = blockinfo.get_disk_bus_for_device_type('kvm', + image_meta) + self.assertEqual(bus, 'scsi') + + image_meta = {'properties': {'disk_bus': 'usb', + 'cdrom_bus': 'scsi'}} + bus = blockinfo.get_disk_bus_for_device_type('kvm', + image_meta, + device_type='cdrom') + self.assertEqual(bus, 'scsi') + + bus = blockinfo.get_disk_bus_for_device_type('kvm', + image_meta) + self.assertEqual(bus, 'usb') + + image_meta = {'properties': {'disk_bus': 'xen'}} + self.assertRaises(exception.NovaException, + blockinfo.get_disk_bus_for_device_type, + 'kvm', + image_meta)