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 block_device
from nova import context from nova import context
from nova import db from nova import db
from nova import exception
from nova import test from nova import test
import nova.tests.image.fake import nova.tests.image.fake
from nova.virt.libvirt import blockinfo from nova.virt.libvirt import blockinfo
@@ -394,3 +395,33 @@ class LibvirtBlockInfoTest(test.TestCase):
'root': {'bus': 'virtio', 'dev': 'vdf', 'type': 'disk'} 'root': {'bus': 'virtio', 'dev': 'vdf', 'type': 'disk'}
} }
self.assertEqual(mapping, expect) 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)