]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat engine : don't replace resource template before update
authorSteven Hardy <shardy@redhat.com>
Mon, 28 Jan 2013 14:38:20 +0000 (14:38 +0000)
committerSteven Hardy <shardy@redhat.com>
Thu, 31 Jan 2013 09:56:28 +0000 (09:56 +0000)
We want to validate the pre-update properties without touching
the existing template, because the resource implementation will
need to compare old/new json snippets to decide if a and update
can be performed or not.

ref blueprint instance-update-stack

Change-Id: I37ce6e799242819de6104a53f8458d8bbc3abf1c
Signed-off-by: Steven Hardy <shardy@redhat.com>
heat/engine/resource.py

index 52f1c34aa7a9af9a3434588ee235d03323501381..b3de66adbd0687f54a315671c06796c10398f01e 100644 (file)
@@ -252,8 +252,11 @@ class Resource(object):
         result = self.UPDATE_NOT_IMPLEMENTED
         try:
             self.state_set(self.UPDATE_IN_PROGRESS)
-            self.t = self.stack.resolve_static_data(json_snippet)
-            err = self.properties.validate()
+            properties = Properties(self.properties_schema,
+                                    json_snippet.get('Properties', {}),
+                                    self.stack.resolve_runtime_data,
+                                    self.name)
+            err = properties.validate()
             if err:
                 raise ValueError(err)
             if callable(getattr(self, 'handle_update', None)):
@@ -266,6 +269,7 @@ class Resource(object):
             # If resource was updated (with or without interruption),
             # then we set the resource to UPDATE_COMPLETE
             if not result == self.UPDATE_REPLACE:
+                self.t = self.stack.resolve_static_data(json_snippet)
                 self.state_set(self.UPDATE_COMPLETE)
             return result