Override the 'get' method in DriverBlockDevice class
The following methods are overridden in DriverBlockDevice class. * __getattr__ * __getitem__ The 'get' method is not overridden. The value cannot be got by the 'get' method though the value can be got by '__getattr__' (e.g. bdm.volumd_id) or '__getitem__' (e.g. bdm['volume_id']) method. So override the 'get' method to fix the issue. Conflicts: nova/tests/unit/virt/test_block_device.py The conflict is due to not including Icc301230fe7c8e3ebbbcc7f4a807e562db7f93e3 in rocky. Change-Id: Ic665fc1956831110937d98553e526cb909e49997 Closes-Bug: #1816938 (cherry picked from commit3c66b40dbd
) (cherry picked from commitae40ceba84
)
This commit is contained in:
parent
9bb78d5765
commit
8d757888a8
@ -186,7 +186,6 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
||||
'destination_type': 'volume',
|
||||
'connection_info': '{"fake": "connection_info"}',
|
||||
'snapshot_id': 'fake-snapshot-id-1',
|
||||
'volume_id': 'fake-volume-id-2',
|
||||
'boot_index': -1})
|
||||
|
||||
volblank_driver_bdm = {
|
||||
@ -372,6 +371,7 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
||||
self.assertEqual(test_bdm._bdm_obj.id, 3)
|
||||
self.assertEqual(test_bdm.volume_id, 'fake-volume-id-1')
|
||||
self.assertEqual(test_bdm.volume_size, 8)
|
||||
self.assertEqual('fake-volume-id-1', test_bdm.get('volume_id'))
|
||||
|
||||
def test_driver_snapshot_block_device(self):
|
||||
self._test_driver_device("volsnapshot")
|
||||
@ -382,6 +382,7 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
||||
self.assertEqual(test_bdm.snapshot_id, 'fake-snapshot-id-1')
|
||||
self.assertEqual(test_bdm.volume_id, 'fake-volume-id-2')
|
||||
self.assertEqual(test_bdm.volume_size, 3)
|
||||
self.assertEqual('fake-snapshot-id-1', test_bdm.get('snapshot_id'))
|
||||
|
||||
def test_driver_image_block_device(self):
|
||||
self._test_driver_device('volimage')
|
||||
@ -391,6 +392,7 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
||||
self.assertEqual(test_bdm._bdm_obj.id, 5)
|
||||
self.assertEqual(test_bdm.image_id, 'fake-image-id-1')
|
||||
self.assertEqual(test_bdm.volume_size, 1)
|
||||
self.assertEqual('fake-image-id-1', test_bdm.get('image_id'))
|
||||
|
||||
def test_driver_image_block_device_destination_local(self):
|
||||
self._test_driver_device('volimage')
|
||||
@ -406,8 +408,9 @@ class TestDriverBlockDevice(test.NoDBTestCase):
|
||||
test_bdm = self.driver_classes['volblank'](
|
||||
self.volblank_bdm)
|
||||
self.assertEqual(6, test_bdm._bdm_obj.id)
|
||||
self.assertEqual('fake-volume-id-2', test_bdm.volume_id)
|
||||
self.assertIsNone(test_bdm.volume_id)
|
||||
self.assertEqual(3, test_bdm.volume_size)
|
||||
self.assertIsNone(test_bdm.get('volume_id'))
|
||||
|
||||
def _test_call_wait_func(self, delete_on_termination, delete_fail=False):
|
||||
test_bdm = self.driver_classes['volume'](self.volume_bdm)
|
||||
|
@ -171,6 +171,14 @@ class DriverBlockDevice(dict):
|
||||
"""Transform bdm to the format that is passed to drivers."""
|
||||
raise NotImplementedError()
|
||||
|
||||
def get(self, name, default=None):
|
||||
if name in self._proxy_as_attr:
|
||||
return getattr(self._bdm_obj, name)
|
||||
elif name in self._fields:
|
||||
return self[name]
|
||||
else:
|
||||
return super(DriverBlockDevice, self).get(name, default)
|
||||
|
||||
def legacy(self):
|
||||
"""Basic legacy transformation.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user