From f89cfcc6623466632f8b65d2384f4220a7473735 Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Wed, 13 Apr 2016 19:49:04 -0400 Subject: [PATCH] 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 --- contrib/rackspace/rackspace/resources/auto_scale.py | 4 +++- .../resources/aws/autoscaling/autoscaling_group.py | 2 +- .../engine/resources/aws/autoscaling/launch_config.py | 2 +- heat/engine/resources/aws/ec2/instance.py | 4 ++-- .../engine/resources/openstack/heat/instance_group.py | 2 +- .../engine/resources/openstack/heat/resource_group.py | 2 +- heat/engine/resources/openstack/mistral/workflow.py | 4 +++- heat/engine/resources/openstack/nova/server.py | 11 ++++++----- 8 files changed, 18 insertions(+), 13 deletions(-) diff --git a/contrib/rackspace/rackspace/resources/auto_scale.py b/contrib/rackspace/rackspace/resources/auto_scale.py index 339a79b95a..a25b2bca7c 100644 --- a/contrib/rackspace/rackspace/resources/auto_scale.py +++ b/contrib/rackspace/rackspace/resources/auto_scale.py @@ -650,7 +650,9 @@ class ScalingPolicy(resource.Resource): def handle_update(self, json_snippet, tmpl_diff, prop_diff): 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() asclient.replace_policy(**args) diff --git a/heat/engine/resources/aws/autoscaling/autoscaling_group.py b/heat/engine/resources/aws/autoscaling/autoscaling_group.py index 7ce917d45b..7789d159d5 100644 --- a/heat/engine/resources/aws/autoscaling/autoscaling_group.py +++ b/heat/engine/resources/aws/autoscaling/autoscaling_group.py @@ -259,7 +259,7 @@ class AutoScalingGroup(instgrp.InstanceGroup, cooldown.CooldownMixin): """ if tmpl_diff: # parse update policy - if 'UpdatePolicy' in tmpl_diff: + if tmpl_diff.update_policy_changed(): up = json_snippet.update_policy(self.update_policy_schema, self.context) self.update_policy = up diff --git a/heat/engine/resources/aws/autoscaling/launch_config.py b/heat/engine/resources/aws/autoscaling/launch_config.py index 13b9bb2236..c28d9f859b 100644 --- a/heat/engine/resources/aws/autoscaling/launch_config.py +++ b/heat/engine/resources/aws/autoscaling/launch_config.py @@ -217,7 +217,7 @@ class LaunchConfiguration(resource.Resource): self._update_stored_properties() def needs_replace_with_tmpl_diff(self, tmpl_diff): - return 'Metadata' in tmpl_diff + return tmpl_diff.metadata_changed() def get_reference_id(self): return self.physical_resource_name_or_FnGetRefId() diff --git a/heat/engine/resources/aws/ec2/instance.py b/heat/engine/resources/aws/ec2/instance.py index 3025019e1a..89cf160612 100644 --- a/heat/engine/resources/aws/ec2/instance.py +++ b/heat/engine/resources/aws/ec2/instance.py @@ -730,8 +730,8 @@ class Instance(resource.Resource, sh.SchedulerHintsMixin): return updaters def handle_update(self, json_snippet, tmpl_diff, prop_diff): - if 'Metadata' in tmpl_diff: - self.metadata_set(tmpl_diff['Metadata']) + if tmpl_diff.metadata_changed(): + self.metadata_set(json_snippet.metadata()) updaters = [] server = None if self.TAGS in prop_diff: diff --git a/heat/engine/resources/openstack/heat/instance_group.py b/heat/engine/resources/openstack/heat/instance_group.py index b4837b74f4..7738083689 100644 --- a/heat/engine/resources/openstack/heat/instance_group.py +++ b/heat/engine/resources/openstack/heat/instance_group.py @@ -190,7 +190,7 @@ class InstanceGroup(stack_resource.StackResource): """ if tmpl_diff: # 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, self.context) self.update_policy = up diff --git a/heat/engine/resources/openstack/heat/resource_group.py b/heat/engine/resources/openstack/heat/resource_group.py index 15a508a2fd..2a2f1163f2 100644 --- a/heat/engine/resources/openstack/heat/resource_group.py +++ b/heat/engine/resources/openstack/heat/resource_group.py @@ -388,7 +388,7 @@ class ResourceGroup(stack_resource.StackResource): def handle_update(self, json_snippet, tmpl_diff, prop_diff): if tmpl_diff: # 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, self.context) self.update_policy = up diff --git a/heat/engine/resources/openstack/mistral/workflow.py b/heat/engine/resources/openstack/mistral/workflow.py index 74099d25c5..8c22699c43 100644 --- a/heat/engine/resources/openstack/mistral/workflow.py +++ b/heat/engine/resources/openstack/mistral/workflow.py @@ -549,7 +549,9 @@ class Workflow(signal_responder.SignalResponder, if prop in prop_diff: del prop_diff[prop] 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: workflow = self.client().workflows.update(new_props) except Exception as ex: diff --git a/heat/engine/resources/openstack/nova/server.py b/heat/engine/resources/openstack/nova/server.py index c41247b562..2992627d2d 100644 --- a/heat/engine/resources/openstack/nova/server.py +++ b/heat/engine/resources/openstack/nova/server.py @@ -1178,20 +1178,21 @@ class Server(stack_user.StackUser, sh.SchedulerHintsMixin, return ud_update_policy == 'REPLACE' 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 # the "deployments" and "os-collect-config" keys for Deployment # polling. We can attempt to merge the occ data, but any # metadata update containing deployments will be discarded. + new_md = json_snippet.metadata() if self.user_data_software_config(): 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.update(new_occ_md) - tmpl_diff['Metadata']['os-collect-config'] = occ_md + new_md['os-collect-config'] = occ_md deployment_md = metadata.get('deployments', []) - tmpl_diff['Metadata']['deployments'] = deployment_md - self.metadata_set(tmpl_diff['Metadata']) + new_md['deployments'] = deployment_md + self.metadata_set(new_md) updaters = [] server = None