From d247c89b0504ab07136a7ef6fefb7df7eaa2ad0f Mon Sep 17 00:00:00 2001 From: Eric Fried Date: Tue, 24 Apr 2018 10:55:46 -0500 Subject: [PATCH] Proxy is_volume through DriverBlockDevice To resolve this TODO in the ironic virt driver [1], and because the PowerVM driver is facing similar difficulties [2], this change proxies the is_volume @property from BlockDeviceMapping through DriverBlockDevice and thus its inheritors, including DriverVolumeBlockDevice, which is what a bdm actually seems to be by the time it gets to a virt driver. [1] https://github.com/openstack/nova/blob/1605391084d6a1f57384ef48bad8ca2185cf6fa7/nova/virt/ironic/driver.py#L392-L397 [2] https://review.openstack.org/#/c/526094/45/nova/virt/powervm/driver.py@559 Change-Id: I3976a9305e0583ee77295df3636926688a1ca4ce --- nova/tests/unit/virt/test_block_device.py | 14 +++++++++----- nova/virt/block_device.py | 2 +- nova/virt/ironic/driver.py | 6 +----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/nova/tests/unit/virt/test_block_device.py b/nova/tests/unit/virt/test_block_device.py index 59ac6e44f8cd..00a35f417cef 100644 --- a/nova/tests/unit/virt/test_block_device.py +++ b/nova/tests/unit/virt/test_block_device.py @@ -1239,11 +1239,15 @@ class TestDriverBlockDevice(test.NoDBTestCase): _proxy_as_attr_inherited = set('E') bdm = objects.BlockDeviceMapping(self.context, no_device=False) - self.assertEqual(set(['uuid']), A(bdm)._proxy_as_attr) - self.assertEqual(set(['uuid', 'B']), B(bdm)._proxy_as_attr) - self.assertEqual(set(['uuid', 'C']), C(bdm)._proxy_as_attr) - self.assertEqual(set(['uuid', 'B', 'D']), D(bdm)._proxy_as_attr) - self.assertEqual(set(['uuid', 'B', 'C', 'E']), E(bdm)._proxy_as_attr) + self.assertEqual(set(['uuid', 'is_volume']), A(bdm)._proxy_as_attr) + self.assertEqual(set(['uuid', 'is_volume', 'B']), + B(bdm)._proxy_as_attr) + self.assertEqual(set(['uuid', 'is_volume', 'C']), + C(bdm)._proxy_as_attr) + self.assertEqual(set(['uuid', 'is_volume', 'B', 'D']), + D(bdm)._proxy_as_attr) + self.assertEqual(set(['uuid', 'is_volume', 'B', 'C', 'E']), + E(bdm)._proxy_as_attr) class TestDriverBlockDeviceNewFlow(TestDriverBlockDevice): diff --git a/nova/virt/block_device.py b/nova/virt/block_device.py index 44e8b5f20b9f..2408a9ad482b 100644 --- a/nova/virt/block_device.py +++ b/nova/virt/block_device.py @@ -105,7 +105,7 @@ class DriverBlockDevice(dict): _fields = set() _legacy_fields = set() - _proxy_as_attr_inherited = set(['uuid']) + _proxy_as_attr_inherited = set(['uuid', 'is_volume']) _update_on_save = {'disk_bus': None, 'device_name': None, 'device_type': None} diff --git a/nova/virt/ironic/driver.py b/nova/virt/ironic/driver.py index 88e17268cb33..eb5a3cf2a151 100644 --- a/nova/virt/ironic/driver.py +++ b/nova/virt/ironic/driver.py @@ -389,11 +389,7 @@ class IronicDriver(virt_driver.ComputeDriver): bdms = virt_driver.block_device_info_get_mapping(block_device_info) for bdm in bdms: - # TODO(TheJulia): In Queens, we should refactor the check below - # to something more elegent, as is_volume is not proxied through - # to the DriverVolumeBlockDevice object. Until then, we are - # checking the underlying object's status. - if not bdm._bdm_obj.is_volume: + if not bdm.is_volume: continue connection_info = jsonutils.loads(bdm._bdm_obj.connection_info)