Use the ResourceDefinition.Diff API in resources

Now that we have an API for determining the difference between resource
definitions in Heat, use it instead of treating the tmpl_diff argument to
handle_update() like a diff of snippets from a CloudFormation template.

Change-Id: Ib54ff610065ad8d4eabc7d6a45213fde93e425c8
This commit is contained in:
Zane Bitter 2016-04-13 19:49:04 -04:00
parent 75b56789e6
commit f89cfcc662
8 changed files with 18 additions and 13 deletions

View File

@ -650,7 +650,9 @@ class ScalingPolicy(resource.Resource):
def handle_update(self, json_snippet, tmpl_diff, prop_diff): def handle_update(self, json_snippet, tmpl_diff, prop_diff):
asclient = self.auto_scale() asclient = self.auto_scale()
args = self._get_args(tmpl_diff['Properties']) props = json_snippet.properties(self.properties_schema,
self.context)
args = self._get_args(props)
args['policy'] = self._get_policy_id() args['policy'] = self._get_policy_id()
asclient.replace_policy(**args) asclient.replace_policy(**args)

View File

@ -259,7 +259,7 @@ class AutoScalingGroup(instgrp.InstanceGroup, cooldown.CooldownMixin):
""" """
if tmpl_diff: if tmpl_diff:
# parse update policy # parse update policy
if 'UpdatePolicy' in tmpl_diff: if tmpl_diff.update_policy_changed():
up = json_snippet.update_policy(self.update_policy_schema, up = json_snippet.update_policy(self.update_policy_schema,
self.context) self.context)
self.update_policy = up self.update_policy = up

View File

@ -217,7 +217,7 @@ class LaunchConfiguration(resource.Resource):
self._update_stored_properties() self._update_stored_properties()
def needs_replace_with_tmpl_diff(self, tmpl_diff): def needs_replace_with_tmpl_diff(self, tmpl_diff):
return 'Metadata' in tmpl_diff return tmpl_diff.metadata_changed()
def get_reference_id(self): def get_reference_id(self):
return self.physical_resource_name_or_FnGetRefId() return self.physical_resource_name_or_FnGetRefId()

View File

@ -730,8 +730,8 @@ class Instance(resource.Resource, sh.SchedulerHintsMixin):
return updaters return updaters
def handle_update(self, json_snippet, tmpl_diff, prop_diff): def handle_update(self, json_snippet, tmpl_diff, prop_diff):
if 'Metadata' in tmpl_diff: if tmpl_diff.metadata_changed():
self.metadata_set(tmpl_diff['Metadata']) self.metadata_set(json_snippet.metadata())
updaters = [] updaters = []
server = None server = None
if self.TAGS in prop_diff: if self.TAGS in prop_diff:

View File

@ -190,7 +190,7 @@ class InstanceGroup(stack_resource.StackResource):
""" """
if tmpl_diff: if tmpl_diff:
# parse update policy # parse update policy
if rsrc_defn.UPDATE_POLICY in tmpl_diff: if tmpl_diff.update_policy_changed():
up = json_snippet.update_policy(self.update_policy_schema, up = json_snippet.update_policy(self.update_policy_schema,
self.context) self.context)
self.update_policy = up self.update_policy = up

View File

@ -388,7 +388,7 @@ class ResourceGroup(stack_resource.StackResource):
def handle_update(self, json_snippet, tmpl_diff, prop_diff): def handle_update(self, json_snippet, tmpl_diff, prop_diff):
if tmpl_diff: if tmpl_diff:
# parse update policy # parse update policy
if rsrc_defn.UPDATE_POLICY in tmpl_diff: if tmpl_diff.update_policy_changed():
up = json_snippet.update_policy(self.update_policy_schema, up = json_snippet.update_policy(self.update_policy_schema,
self.context) self.context)
self.update_policy = up self.update_policy = up

View File

@ -549,7 +549,9 @@ class Workflow(signal_responder.SignalResponder,
if prop in prop_diff: if prop in prop_diff:
del prop_diff[prop] del prop_diff[prop]
if len(prop_diff) > 0: if len(prop_diff) > 0:
new_props = self.prepare_properties(tmpl_diff['Properties']) props = json_snippet.properties(self.properties_schema,
self.context)
new_props = self.prepare_properties(props)
try: try:
workflow = self.client().workflows.update(new_props) workflow = self.client().workflows.update(new_props)
except Exception as ex: except Exception as ex:

View File

@ -1178,20 +1178,21 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin,
return ud_update_policy == 'REPLACE' return ud_update_policy == 'REPLACE'
def handle_update(self, json_snippet, tmpl_diff, prop_diff): def handle_update(self, json_snippet, tmpl_diff, prop_diff):
if 'Metadata' in tmpl_diff: if tmpl_diff.metadata_changed():
# If SOFTWARE_CONFIG user_data_format is enabled we require # If SOFTWARE_CONFIG user_data_format is enabled we require
# the "deployments" and "os-collect-config" keys for Deployment # the "deployments" and "os-collect-config" keys for Deployment
# polling. We can attempt to merge the occ data, but any # polling. We can attempt to merge the occ data, but any
# metadata update containing deployments will be discarded. # metadata update containing deployments will be discarded.
new_md = json_snippet.metadata()
if self.user_data_software_config(): if self.user_data_software_config():
metadata = self.metadata_get(True) or {} metadata = self.metadata_get(True) or {}
new_occ_md = tmpl_diff['Metadata'].get('os-collect-config', {}) new_occ_md = new_md.get('os-collect-config', {})
occ_md = metadata.get('os-collect-config', {}) occ_md = metadata.get('os-collect-config', {})
occ_md.update(new_occ_md) occ_md.update(new_occ_md)
tmpl_diff['Metadata']['os-collect-config'] = occ_md new_md['os-collect-config'] = occ_md
deployment_md = metadata.get('deployments', []) deployment_md = metadata.get('deployments', [])
tmpl_diff['Metadata']['deployments'] = deployment_md new_md['deployments'] = deployment_md
self.metadata_set(tmpl_diff['Metadata']) self.metadata_set(new_md)
updaters = [] updaters = []
server = None server = None