diff options
author | Rabi Mishra <ramishra@redhat.com> | 2015-06-10 08:24:58 +0530 |
---|---|---|
committer | Rabi Mishra <ramishra@redhat.com> | 2015-06-10 09:06:40 +0530 |
commit | 4d2b275358cd010c0ba19697d5e623a1edef3daf (patch) | |
tree | 477ca83be633d837a06ab21d0df35cad3a520071 | |
parent | 90191ae1855e4a63373dba041141639fa3779f7e (diff) | |
download | heat-4d2b275358cd010c0ba19697d5e623a1edef3daf.tar.gz |
Fix block_device_mapping property validation when using get_attr
Change-Id: I6501395ab458b75ba7d27c8ce9643bd6d18cb203
Closes-Bug: #1463531
-rw-r--r-- | heat/engine/resources/openstack/nova/server.py | 4 | ||||
-rw-r--r-- | heat/tests/test_server.py | 19 |
2 files changed, 21 insertions, 2 deletions
diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py index 0abf120c7..d84724a0f 100644 --- a/heat/engine/resources/openstack/nova/server.py +++ b/heat/engine/resources/openstack/nova/server.py @@ -1183,11 +1183,11 @@ class Server(stack_user.StackUser): volume_id = mapping.get(self.BLOCK_DEVICE_MAPPING_VOLUME_ID) snapshot_id = mapping.get(self.BLOCK_DEVICE_MAPPING_SNAPSHOT_ID) - if volume_id and snapshot_id: + if volume_id is not None and snapshot_id is not None: raise exception.ResourcePropertyConflict( self.BLOCK_DEVICE_MAPPING_VOLUME_ID, self.BLOCK_DEVICE_MAPPING_SNAPSHOT_ID) - if not volume_id and not snapshot_id: + if volume_id is None and snapshot_id is None: msg = _('Either volume_id or snapshot_id must be specified for' ' device mapping %s') % device_name raise exception.StackValidationFailed(message=msg) diff --git a/heat/tests/test_server.py b/heat/tests/test_server.py index df975ee69..624a3c1b7 100644 --- a/heat/tests/test_server.py +++ b/heat/tests/test_server.py @@ -2128,6 +2128,25 @@ class ServersTest(common.HeatTestCase): self.m.VerifyAll() + def test_validate_block_device_mapping_with_empty_ref(self): + stack_name = 'val_blkdev2' + (tmpl, stack) = self._setup_test_stack(stack_name) + bdm = [{'device_name': 'vda', 'volume_id': '', + 'volume_size': '10'}] + wsp = tmpl.t['Resources']['WebServer']['Properties'] + wsp['block_device_mapping'] = bdm + resource_defns = tmpl.resource_definitions(stack) + server = servers.Server('server_create_image_err', + resource_defns['WebServer'], stack) + self.m.StubOutWithMock(nova.NovaClientPlugin, '_create') + self.stub_VolumeConstraint_validate() + nova.NovaClientPlugin._create().AndReturn(self.fc) + self._mock_get_image_id_success('F17-x86_64-gold', 'image_id') + self.m.ReplayAll() + + self.assertIsNone(server.validate()) + self.m.VerifyAll() + def test_validate_without_image_or_bootable_volume(self): stack_name = 'val_imgvol' (tmpl, stack) = self._setup_test_stack(stack_name) |