summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Fehlig <jfehlig@suse.com>2013-03-15 15:13:31 -0600
committerJim Fehlig <jfehlig@suse.com>2013-03-15 15:13:31 -0600
commit3e6eaa1f1960522c8a89403719c842c2cc23074b (patch)
tree4648a8c00563f5e34ee521956aaa52dbcacf6f7a
parent66a8721c4319d971ea9ca1dc0de285c195f244df (diff)
downloadnova-3e6eaa1f1960522c8a89403719c842c2cc23074b.tar.gz
nova-3e6eaa1f1960522c8a89403719c842c2cc23074b.tar.xz
nova-3e6eaa1f1960522c8a89403719c842c2cc23074b.zip
Fix use of libvirt_disk_prefix
The code supporting libvirt_disk_prefix was dropped during the refactoring work in commit 7be531fe. This patch re-enables support for this option, along with a test case to verify it. Change-Id: I84f059e2b35d9237b799236032de5c272a03a451
-rw-r--r--nova/tests/test_libvirt.py33
-rw-r--r--nova/virt/libvirt/blockinfo.py6
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":