Make sure template resource's metadata is refreshed

This copies the code snippet from instance.py, which refreshes
the metadata when we get a signal on a referenced resource.

Note: a functional test is coming in a later commit.

Closes-bug: 1418942
Change-Id: I5980c9cf4dc355b9bfa93273bc26a768ab9abdb8
This commit is contained in:
Angus Salkeld 2015-02-06 22:31:44 +10:00
parent 92669014ea
commit e5ffaff0b3
2 changed files with 41 additions and 0 deletions

View File

@ -250,6 +250,13 @@ class TemplateResource(stack_resource.StackResource):
return self.create_with_template(self.child_template(),
self.child_params())
def metadata_update(self, new_metadata=None):
'''
Refresh the metadata if new_metadata is None
'''
if new_metadata is None:
self.metadata_set(self.t.metadata())
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
self._generate_schema(json_snippet)
return self.update_with_template(self.child_template(),

View File

@ -525,6 +525,40 @@ class ProviderTemplateTest(common.HeatTestCase):
self.assertIn('Could not fetch remote template "some_magic.yaml"',
six.text_type(ex))
def test_metadata_update_called(self):
provider = {
'HeatTemplateFormatVersion': '2012-12-12',
'Parameters': {
'Foo': {'Type': 'Boolean'},
},
}
files = {'test_resource.template': json.dumps(provider)}
class DummyResource(object):
support_status = support.SupportStatus()
properties_schema = {"Foo":
properties.Schema(properties.Schema.BOOLEAN)}
attributes_schema = {}
env = environment.Environment()
resource._register_class('DummyResource', DummyResource)
env.load({'resource_registry':
{'DummyResource': 'test_resource.template'}})
stack = parser.Stack(utils.dummy_context(), 'test_stack',
parser.Template(
{'HeatTemplateFormatVersion': '2012-12-12'},
files=files), env=env,
stack_id=str(uuid.uuid4()))
definition = rsrc_defn.ResourceDefinition('test_t_res',
"DummyResource",
{"Foo": "False"})
temp_res = template_resource.TemplateResource('test_t_res',
definition, stack)
temp_res.metadata_set = mock.Mock()
temp_res.metadata_update()
temp_res.metadata_set.assert_called_once_with({})
def test_get_template_resource_class(self):
test_templ_name = 'file:///etc/heatr/frodo.yaml'
minimal_temp = json.dumps({'HeatTemplateFormatVersion': '2012-12-12',