]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Explicitly pass old json snippet to update
authorZane Bitter <zbitter@redhat.com>
Thu, 13 Jun 2013 18:03:28 +0000 (20:03 +0200)
committerSteven Hardy <shardy@redhat.com>
Mon, 1 Jul 2013 10:59:46 +0000 (11:59 +0100)
Don't use state cached in the resource.

Change-Id: Ib6c7830ce40b72c9cd388c054fcb41ff93963b4d

heat/engine/parser.py
heat/engine/resource.py
heat/engine/update.py

index 3c7ee950462383da18a2efbedae148c70a977b49..874a704c308a4ace6251abd949398e1ba781f12a 100644 (file)
@@ -370,10 +370,6 @@ class Stack(object):
         self.state_set(self.UPDATE, self.IN_PROGRESS,
                        'Stack %s started' % action)
 
-        # cache all the resources runtime data.
-        for r in self:
-            r.cache_template()
-
         try:
             update_task = update.StackUpdate(self, newstack)
             updater = scheduler.TaskRunner(update_task)
index 8a6435c1297bb32a1a562650efd111360e3b8063..d504c71dd69ad47a812333cea2f6a00ca69aa22a 100644 (file)
@@ -396,12 +396,13 @@ class Resource(object):
                                      self.name)
         return self._do_action(self.CREATE, self.properties.validate)
 
-    def update(self, json_snippet=None):
+    def update(self, after, before=None):
         '''
         update the resource. Subclasses should provide a handle_update() method
         to customise update, the base-class handle_update will fail by default.
         '''
-        assert json_snippet is not None, 'Must specify update json snippet'
+        if before is None:
+            before = self.parsed_template()
 
         if (self.action, self.status) in ((self.CREATE, self.IN_PROGRESS),
                                          (self.UPDATE, self.IN_PROGRESS)):
@@ -413,17 +414,14 @@ class Resource(object):
         try:
             self.state_set(self.UPDATE, self.IN_PROGRESS)
             properties = Properties(self.properties_schema,
-                                    json_snippet.get('Properties', {}),
+                                    after.get('Properties', {}),
                                     self.stack.resolve_runtime_data,
                                     self.name)
             properties.validate()
-            old_json_snippet = self.parsed_template(cached=True)
-            tmpl_diff = self.update_template_diff(json_snippet,
-                                                  old_json_snippet)
-            prop_diff = self.update_template_diff_properties(json_snippet,
-                                                             old_json_snippet)
+            tmpl_diff = self.update_template_diff(after, before)
+            prop_diff = self.update_template_diff_properties(after, before)
             if callable(getattr(self, 'handle_update', None)):
-                result = self.handle_update(json_snippet, tmpl_diff, prop_diff)
+                result = self.handle_update(after, tmpl_diff, prop_diff)
         except UpdateReplace:
             logger.debug("Resource %s update requires replacement" % self.name)
             raise
@@ -433,7 +431,7 @@ class Resource(object):
             self.state_set(self.UPDATE, self.FAILED, str(failure))
             raise failure
         else:
-            self.t = self.stack.resolve_static_data(json_snippet)
+            self.t = self.stack.resolve_static_data(after)
             self.state_set(self.UPDATE, self.COMPLETE)
 
     def suspend(self):
index daa3e134d0127171b6aa08dfe39b230859277709..5f0d2e0d34ffe8949ce2f3565e3d0751f033aedf 100644 (file)
@@ -98,7 +98,8 @@ class StackUpdate(object):
 
         if new_snippet != existing_snippet:
             try:
-                yield self.existing_stack[res_name].update(new_snippet)
+                yield self.existing_stack[res_name].update(new_snippet,
+                                                           existing_snippet)
             except resource.UpdateReplace:
                 yield self._replace_resource(new_res)
             else: