From b3b0d58b6a868504a3261c4236594b1b77d91376 Mon Sep 17 00:00:00 2001 From: Angus Salkeld Date: Mon, 24 Aug 2015 14:16:57 +1000 Subject: [PATCH] convergence: populate stack.resources in Resource.load Since in Resource.load we only temporarily change the template, stack.resources never gets called and thus is not populated. Note: this is just in the cleanup case. Thus, just call stack.resources to populate the resources in load. Change-Id: I799b68c7722ac2e53fbb5cc6dd394b9c4ba81e3c Co-Authored-By: rico-lin Closes-Bug: #1483946 --- heat/engine/resource.py | 1 + heat/tests/test_resource.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/heat/engine/resource.py b/heat/engine/resource.py index bbab9a8a0..d3d571d12 100644 --- a/heat/engine/resource.py +++ b/heat/engine/resource.py @@ -295,6 +295,7 @@ class Resource(object): if swap_template: prev_tmpl = stk.t stk.t = tmpl + stk.resources yield stk if swap_template: stk.t = prev_tmpl diff --git a/heat/tests/test_resource.py b/heat/tests/test_resource.py index 1ba93d166..e624eb03d 100644 --- a/heat/tests/test_resource.py +++ b/heat/tests/test_resource.py @@ -124,6 +124,31 @@ class ResourceTest(common.HeatTestCase): self.assertEqual(self.old_stack.t, stack.t) self.assertNotEqual(self.new_stack.t, stack.t) + def test_resource_load_with_no_resources(self): + self.stack = parser.Stack( + utils.dummy_context(), 'test_old_stack', + template.Template({ + 'HeatTemplateFormatVersion': '2012-12-12', + 'Resources': { + 'test_res': {'Type': 'ResourceWithPropsType', + 'Properties': {'Foo': 'abc'}}}})) + self.stack.store() + snippet = rsrc_defn.ResourceDefinition('aresource', + 'GenericResourceType') + # Store Resource + res = resource.Resource('aresource', snippet, self.stack) + res.current_template_id = self.stack.t.id + res.state_set('CREATE', 'IN_PROGRESS') + self.stack.add_resource(res) + origin_resources = self.stack._resources + self.stack._resources = None + + loaded_res, stack = resource.Resource.load(self.stack.context, + res.id, False, {}) + self.assertEqual(origin_resources, stack._resources) + self.assertEqual(loaded_res.id, res.id) + self.assertEqual(self.stack.t, stack.t) + def test_resource_invalid_name(self): snippet = rsrc_defn.ResourceDefinition('wrong/name', 'GenericResourceType')