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.
Change-Id: Ic665fc1956831110937d98553e526cb909e49997
Closes-Bug: #1816938
(cherry picked from commit 3c66b40dbd
)
This commit is contained in:
parent
a40f0c5a00
commit
ae40ceba84
|
@ -191,7 +191,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,
|
||||
'volume_type': None})
|
||||
|
||||
|
@ -379,6 +378,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")
|
||||
|
@ -389,6 +389,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')
|
||||
|
@ -398,6 +399,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')
|
||||
|
@ -413,8 +415,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