summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-11-12 22:44:56 +0000
committerGerrit Code Review <review@openstack.org>2015-11-12 22:44:57 +0000
commit7ba15ec0deb1cf9db30c3a71a7f320aa6367b489 (patch)
tree3299303e5c936e8e22092d6fef7f228433e977c3
parent79e2641b34db354f4eddbcabe5d20d720dd36c92 (diff)
parent4b439b955890efa819434c23b3ffdaf64a27ac1f (diff)
downloadnova-7ba15ec0deb1cf9db30c3a71a7f320aa6367b489.tar.gz
Merge "libvirt: fix failure when attaching volume to iso instance" into stable/juno
-rw-r--r--nova/block_device.py4
-rw-r--r--nova/tests/compute/test_compute.py26
-rw-r--r--nova/tests/test_block_device.py2
3 files changed, 30 insertions, 2 deletions
diff --git a/nova/block_device.py b/nova/block_device.py
index d6999b3b19..882e60f4c4 100644
--- a/nova/block_device.py
+++ b/nova/block_device.py
@@ -459,11 +459,11 @@ def prepend_dev(device_name):
return device_name and '/dev/' + strip_dev(device_name)
-_pref = re.compile('^((x?v|s)d)')
+_pref = re.compile('^((x?v|s|h)d)')
def strip_prefix(device_name):
- """remove both leading /dev/ and xvd or sd or vd."""
+ """remove both leading /dev/ and xvd or sd or vd or hd."""
device_name = strip_dev(device_name)
return _pref.sub('', device_name)
diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py
index 8237718bda..37afb5ccce 100644
--- a/nova/tests/compute/test_compute.py
+++ b/nova/tests/compute/test_compute.py
@@ -7261,6 +7261,32 @@ class ComputeTestCase(BaseTestCase):
self.assertEqual(vol_bdm.disk_bus, 'virtio')
self.assertEqual(vol_bdm.device_type, 'disk')
+ def test_reserve_block_device_name_with_iso_instance(self):
+ instance = self._create_fake_instance_obj(
+ params={'root_device_name': '/dev/hda'})
+ bdm = objects.BlockDeviceMapping(
+ **{'source_type': 'image', 'destination_type': 'local',
+ 'image_id': 'fake-image-id', 'device_name': '/dev/hda',
+ 'instance_uuid': instance.uuid})
+ bdm.create(self.context)
+
+ self.compute.reserve_block_device_name(self.context, instance,
+ '/dev/vdb', 'fake-volume-id',
+ 'ide', 'disk')
+
+ bdms = objects.BlockDeviceMappingList.get_by_instance_uuid(
+ self.context, instance.uuid)
+ bdms = list(bdms)
+ self.assertEqual(2, len(bdms))
+ bdms.sort(key=operator.attrgetter('device_name'))
+ vol_bdm = bdms[1]
+ self.assertEqual('volume', vol_bdm.source_type)
+ self.assertEqual('volume', vol_bdm.destination_type)
+ self.assertEqual('/dev/hdb', vol_bdm.device_name)
+ self.assertEqual('fake-volume-id', vol_bdm.volume_id)
+ self.assertEqual('ide', vol_bdm.disk_bus)
+ self.assertEqual('disk', vol_bdm.device_type)
+
class ComputeAPITestCase(BaseTestCase):
def setUp(self):
diff --git a/nova/tests/test_block_device.py b/nova/tests/test_block_device.py
index 3b817ac338..2410039ac5 100644
--- a/nova/tests/test_block_device.py
+++ b/nova/tests/test_block_device.py
@@ -133,6 +133,7 @@ class BlockDeviceTestCase(test.NoDBTestCase):
self.assertEqual(block_device.strip_prefix('a'), 'a')
self.assertEqual(block_device.strip_prefix('xvda'), 'a')
self.assertEqual(block_device.strip_prefix('vda'), 'a')
+ self.assertEqual(block_device.strip_prefix('hda'), 'a')
def test_get_device_letter(self):
self.assertEqual(block_device.get_device_letter(''), '')
@@ -142,6 +143,7 @@ class BlockDeviceTestCase(test.NoDBTestCase):
self.assertEqual(block_device.get_device_letter('a'), 'a')
self.assertEqual(block_device.get_device_letter('sdb2'), 'b')
self.assertEqual(block_device.get_device_letter('vdc'), 'c')
+ self.assertEqual(block_device.get_device_letter('hdc'), 'c')
def test_volume_in_mapping(self):
swap = {'device_name': '/dev/sdb',