Merge "Fix deepcopy usage for BlockDeviceMapping in get_root_info" into unmaintained/2023.1
This commit is contained in:
@@ -1289,6 +1289,7 @@ class LibvirtBlockInfoTest(test.NoDBTestCase):
|
|||||||
|
|
||||||
@mock.patch('nova.virt.libvirt.blockinfo.get_info_from_bdm')
|
@mock.patch('nova.virt.libvirt.blockinfo.get_info_from_bdm')
|
||||||
def test_get_root_info_bdm(self, mock_get_info):
|
def test_get_root_info_bdm(self, mock_get_info):
|
||||||
|
# call get_root_info() with DriverBlockDevice
|
||||||
instance = objects.Instance(**self.test_instance)
|
instance = objects.Instance(**self.test_instance)
|
||||||
image_meta = objects.ImageMeta.from_dict(self.test_image_meta)
|
image_meta = objects.ImageMeta.from_dict(self.test_image_meta)
|
||||||
root_bdm = {'mount_device': '/dev/vda',
|
root_bdm = {'mount_device': '/dev/vda',
|
||||||
@@ -1318,6 +1319,49 @@ class LibvirtBlockInfoTest(test.NoDBTestCase):
|
|||||||
{}, 'virtio')
|
{}, 'virtio')
|
||||||
mock_get_info.reset_mock()
|
mock_get_info.reset_mock()
|
||||||
|
|
||||||
|
@mock.patch('nova.virt.libvirt.blockinfo.get_info_from_bdm')
|
||||||
|
def test_get_root_info_bdm_with_deepcopy(self, mock_get_info):
|
||||||
|
# call get_root_info() with BlockDeviceMapping
|
||||||
|
instance = objects.Instance(**self.test_instance)
|
||||||
|
image_meta = objects.ImageMeta.from_dict(self.test_image_meta)
|
||||||
|
root_bdm = objects.BlockDeviceMapping(self.context,
|
||||||
|
**fake_block_device.FakeDbBlockDeviceDict(
|
||||||
|
{'id': 3, 'instance_uuid': uuids.instance,
|
||||||
|
'device_name': '/dev/sda',
|
||||||
|
'source_type': 'blank',
|
||||||
|
'destination_type': 'local',
|
||||||
|
'device_type': 'cdrom',
|
||||||
|
'disk_bus': 'virtio',
|
||||||
|
'volume_id': 'fake-volume-id-1',
|
||||||
|
'boot_index': 0}))
|
||||||
|
# No root_device_name
|
||||||
|
blockinfo.get_root_info(
|
||||||
|
instance, 'kvm', image_meta, root_bdm, 'virtio', 'ide')
|
||||||
|
mock_get_info.assert_called_once_with(
|
||||||
|
instance, 'kvm', image_meta, root_bdm, {}, 'virtio')
|
||||||
|
mock_get_info.reset_mock()
|
||||||
|
# Both device names
|
||||||
|
blockinfo.get_root_info(
|
||||||
|
instance, 'kvm', image_meta, root_bdm, 'virtio', 'scsi',
|
||||||
|
root_device_name='/dev/sda')
|
||||||
|
mock_get_info.assert_called_once_with(
|
||||||
|
instance, 'kvm', image_meta, root_bdm, {}, 'virtio')
|
||||||
|
mock_get_info.reset_mock()
|
||||||
|
# Missing device names
|
||||||
|
original_bdm = copy.deepcopy(root_bdm)
|
||||||
|
root_bdm.device_name = ''
|
||||||
|
blockinfo.get_root_info(
|
||||||
|
instance, 'kvm', image_meta, root_bdm, 'virtio', 'scsi',
|
||||||
|
root_device_name='/dev/sda')
|
||||||
|
mock_get_info.assert_called_with(
|
||||||
|
instance, 'kvm', image_meta, mock.ANY, {}, 'virtio')
|
||||||
|
actual_call = mock_get_info.call_args
|
||||||
|
_, _, _, actual_bdm, _, _ = actual_call[0]
|
||||||
|
self.assertEqual(
|
||||||
|
original_bdm.obj_to_primitive(),
|
||||||
|
actual_bdm.obj_to_primitive()
|
||||||
|
)
|
||||||
|
|
||||||
def test_get_boot_order_simple(self):
|
def test_get_boot_order_simple(self):
|
||||||
disk_info = {
|
disk_info = {
|
||||||
'disk_bus': 'virtio',
|
'disk_bus': 'virtio',
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ variables / types used
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import copy
|
||||||
import itertools
|
import itertools
|
||||||
import operator
|
import operator
|
||||||
|
|
||||||
@@ -444,12 +445,13 @@ def get_root_info(instance, virt_type, image_meta, root_bdm,
|
|||||||
'dev': block_device.strip_dev(root_device_name),
|
'dev': block_device.strip_dev(root_device_name),
|
||||||
'boot_index': '1'}
|
'boot_index': '1'}
|
||||||
|
|
||||||
|
root_bdm_copy = root_bdm
|
||||||
if not get_device_name(root_bdm) and root_device_name:
|
if not get_device_name(root_bdm) and root_device_name:
|
||||||
root_bdm = root_bdm.copy()
|
root_bdm_copy = copy.deepcopy(root_bdm)
|
||||||
root_bdm['device_name'] = root_device_name
|
root_bdm_copy['device_name'] = root_device_name
|
||||||
|
|
||||||
return get_info_from_bdm(
|
return get_info_from_bdm(
|
||||||
instance, virt_type, image_meta, root_bdm, {}, disk_bus,
|
instance, virt_type, image_meta, root_bdm_copy, {}, disk_bus,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user