diff --git a/heat/engine/resource.py b/heat/engine/resource.py index 67a75509a9..7313f92ce4 100644 --- a/heat/engine/resource.py +++ b/heat/engine/resource.py @@ -180,8 +180,12 @@ class Resource(object): self.attributes_schema, self._resolve_attribute) - resource = db_api.resource_get_by_name_and_stack(self.context, - name, stack.id) + if stack.id: + resource = db_api.resource_get_by_name_and_stack(self.context, + name, stack.id) + else: + resource = None + if resource: self.resource_id = resource.nova_instance self.action = resource.action diff --git a/heat/tests/test_resource.py b/heat/tests/test_resource.py index b9ff6bf376..82de90557c 100644 --- a/heat/tests/test_resource.py +++ b/heat/tests/test_resource.py @@ -15,6 +15,8 @@ import itertools import uuid +import mock + from heat.common import exception from heat.engine import dependencies from heat.engine import parser @@ -58,6 +60,16 @@ class ResourceTest(HeatTestCase): snippet = {'Type': 'GenericResourceType'} res = resource.Resource('aresource', snippet, self.stack) self.assertIsInstance(res, generic_rsrc.GenericResource) + self.assertEqual("INIT", res.action) + + def test_resource_new_stack_not_stored(self): + snippet = {'Type': 'GenericResourceType'} + self.stack.id = None + db_method = 'resource_get_by_name_and_stack' + with mock.patch.object(db_api, db_method) as resource_get: + res = resource.Resource('aresource', snippet, self.stack) + self.assertEqual("INIT", res.action) + self.assertIs(False, resource_get.called) def test_resource_new_err(self): snippet = {'Type': 'NoExistResourceType'}