diff options
author | Balazs Gibizer <balazs.gibizer@ericsson.com> | 2014-10-06 15:38:46 +0200 |
---|---|---|
committer | Balazs Gibizer <balazs.gibizer@ericsson.com> | 2014-12-08 14:11:17 +0100 |
commit | 67bcff461497e674ccdf5d335d983fe9a16639fa (patch) | |
tree | d6237a8d4fb277573f7ac948a361a344cb524811 | |
parent | 95f365ba49ec580dc1e43aecb94280bf65466da3 (diff) | |
download | nova-67bcff461497e674ccdf5d335d983fe9a16639fa.tar.gz |
Reject unsupported image to local BDM
Specifying image to local BDM at nova boot is not supported.
This patch adds a validation to the API to reject this not supported
mapping.
Closes-bug: #1377958
Change-Id: I0c38134e2aacca83d98ed0b341f15c480afe14f1
-rw-r--r-- | nova/block_device.py | 4 | ||||
-rw-r--r-- | nova/tests/unit/test_block_device.py | 8 |
2 files changed, 12 insertions, 0 deletions
diff --git a/nova/block_device.py b/nova/block_device.py index 8800e1a4e4..82ab750ad3 100644 --- a/nova/block_device.py +++ b/nova/block_device.py @@ -182,6 +182,7 @@ class BlockDeviceDict(dict): source_type = api_dict.get('source_type') device_uuid = api_dict.get('uuid') + destination_type = api_dict.get('destination_type') if source_type not in ('volume', 'image', 'snapshot', 'blank'): raise exception.InvalidBDMFormat( @@ -194,6 +195,9 @@ class BlockDeviceDict(dict): raise exception.InvalidBDMFormat( details=_("Missing device UUID.")) api_dict[source_type + '_id'] = device_uuid + if source_type == 'image' and destination_type == 'local': + raise exception.InvalidBDMFormat( + details=_("Mapping image to local is not supported.")) api_dict.pop('uuid', None) return cls(api_dict) diff --git a/nova/tests/unit/test_block_device.py b/nova/tests/unit/test_block_device.py index 2dff327e88..74e9c21e0e 100644 --- a/nova/tests/unit/test_block_device.py +++ b/nova/tests/unit/test_block_device.py @@ -534,6 +534,14 @@ class TestBlockDeviceDict(test.NoDBTestCase): self.assertRaises(exception.InvalidBDMFormat, block_device.BlockDeviceDict.from_api, api_dict) + def test_from_api_invalid_source_to_local_mapping(self): + api_dict = {'id': 1, + 'source_type': 'image', + 'destination_type': 'local', + 'uuid': 'fake-volume-id-1'} + self.assertRaises(exception.InvalidBDMFormat, + block_device.BlockDeviceDict.from_api, api_dict) + def test_legacy(self): for legacy, new in zip(self.legacy_mapping, self.new_mapping): self.assertThat( |