LaunchConfiguration replace on changed Metadata

This makes AWS::AutoScaling::LaunchConfiguration raise
an UpdateReplace if its template Metadata is changed on a
stack update. Any changes to LaunchConfiguration should result
in the resource being replaced, since this is how those changes
propagate to the scaling group.

This fixes a regression which has likely existed since
update_allowed_keys was removed: I78494aba07b6badeca8e95f1875ca8e4b9b0290c

Change-Id: I3a53422ed862777dffb9cac28088fbfe8dd417fa
Closes-Bug: #1287953
This commit is contained in:
Steve Baker 2014-08-05 12:32:47 +12:00
parent 586395b132
commit 404bcbdacc
2 changed files with 38 additions and 0 deletions

View File

@ -824,6 +824,10 @@ class LaunchConfiguration(resource.Resource):
),
}
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
if 'Metadata' in tmpl_diff:
raise resource.UpdateReplace(self.name)
def FnGetRefId(self):
return unicode(self.physical_resource_name())

View File

@ -46,6 +46,7 @@ ig_template = '''
"JobServerConfig" : {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Metadata": {"foo": "bar"},
"Properties": {
"ImageId" : "foo",
"InstanceType" : "m1.large",
@ -327,3 +328,36 @@ class InstanceGroupTest(HeatTestCase):
rsrc.delete()
self.m.VerifyAll()
def test_update_config_metadata(self):
t = template_format.parse(ig_template)
properties = t['Resources']['JobServerGroup']['Properties']
properties['Size'] = '2'
stack = utils.parse_stack(t)
self._stub_create(2)
self.m.ReplayAll()
rsrc = self.create_resource(t, stack, 'JobServerConfig')
self.create_resource(t, stack, 'JobServerGroup')
props = copy.copy(rsrc.properties.data)
metadata = copy.copy(rsrc.metadata_get())
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name,
rsrc.type(),
props,
metadata)
# Change nothing in the first update
scheduler.TaskRunner(rsrc.update, update_snippet)()
self.assertEqual('bar', metadata['foo'])
metadata['foo'] = 'wibble'
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name,
rsrc.type(),
props,
metadata)
# Changing metadata in the second update triggers UpdateReplace
updater = scheduler.TaskRunner(rsrc.update, update_snippet)
self.assertRaises(resource.UpdateReplace, updater)
self.m.VerifyAll()