diff options
-rw-r--r-- | nova/tests/test_libvirt.py | 33 | ||||
-rw-r--r-- | nova/virt/libvirt/blockinfo.py | 6 |
2 files changed, 30 insertions, 9 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index 86f2fe914..fa691c2e1 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -980,6 +980,10 @@ class LibvirtConnTestCase(test.TestCase): instance_data = dict(self.test_instance) self._check_xml_and_disk_prefix(instance_data) + def test_xml_user_specified_disk_prefix(self): + instance_data = dict(self.test_instance) + self._check_xml_and_disk_prefix(instance_data, 'sd') + def test_xml_disk_driver(self): instance_data = dict(self.test_instance) self._check_xml_and_disk_driver(instance_data) @@ -1711,28 +1715,39 @@ class LibvirtConnTestCase(test.TestCase): target = tree.find('./devices/filesystem/source').get('dir') self.assertTrue(len(target) > 0) - def _check_xml_and_disk_prefix(self, instance): + def _check_xml_and_disk_prefix(self, instance, prefix=None): user_context = context.RequestContext(self.user_id, self.project_id) instance_ref = db.instance_create(user_context, instance) + def _get_prefix(p, default): + if p: + return p + 'a' + return default + type_disk_map = { 'qemu': [ - (lambda t: t.find('.').get('type'), 'qemu'), - (lambda t: t.find('./devices/disk/target').get('dev'), 'vda')], + (lambda t: t.find('.').get('type'), 'qemu'), + (lambda t: t.find('./devices/disk/target').get('dev'), + _get_prefix(prefix, 'vda'))], 'xen': [ - (lambda t: t.find('.').get('type'), 'xen'), - (lambda t: t.find('./devices/disk/target').get('dev'), 'sda')], + (lambda t: t.find('.').get('type'), 'xen'), + (lambda t: t.find('./devices/disk/target').get('dev'), + _get_prefix(prefix, 'sda'))], 'kvm': [ - (lambda t: t.find('.').get('type'), 'kvm'), - (lambda t: t.find('./devices/disk/target').get('dev'), 'vda')], + (lambda t: t.find('.').get('type'), 'kvm'), + (lambda t: t.find('./devices/disk/target').get('dev'), + _get_prefix(prefix, 'vda'))], 'uml': [ - (lambda t: t.find('.').get('type'), 'uml'), - (lambda t: t.find('./devices/disk/target').get('dev'), 'ubda')] + (lambda t: t.find('.').get('type'), 'uml'), + (lambda t: t.find('./devices/disk/target').get('dev'), + _get_prefix(prefix, 'ubda'))] } for (libvirt_type, checks) in type_disk_map.iteritems(): self.flags(libvirt_type=libvirt_type) + if prefix: + self.flags(libvirt_disk_prefix=prefix) conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) network_info = _fake_network_info(self.stubs, 1) diff --git a/nova/virt/libvirt/blockinfo.py b/nova/virt/libvirt/blockinfo.py index 88f97a271..fc39fc99d 100644 --- a/nova/virt/libvirt/blockinfo.py +++ b/nova/virt/libvirt/blockinfo.py @@ -65,6 +65,8 @@ variables / types used """ +from oslo.config import cfg + from nova import block_device from nova.compute import instance_types from nova import exception @@ -75,6 +77,8 @@ from nova.virt import driver LOG = logging.getLogger(__name__) +CONF = cfg.CONF + def has_disk_dev(mapping, disk_dev): """Determine if a disk device name has already been used. @@ -103,6 +107,8 @@ def get_dev_prefix_for_disk_bus(disk_bus): Returns the dev prefix or raises an exception if the disk bus is unknown.""" + if CONF.libvirt_disk_prefix: + return CONF.libvirt_disk_prefix if disk_bus == "ide": return "hd" elif disk_bus == "virtio": |