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 <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange
2013-01-16 12:38:23 +00:00
parent 3f3731c6a6
commit c5f2c220cd

View File

@@ -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)