]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat engine : Update stack dependencies during update
authorSteven Hardy <shardy@redhat.com>
Wed, 20 Feb 2013 15:16:53 +0000 (15:16 +0000)
committerSteven Hardy <shardy@redhat.com>
Wed, 20 Feb 2013 16:25:44 +0000 (16:25 +0000)
We need to update the stack dependencies each time we modify the
resources list, otherwise in the event of a failure, the resources
returned from the iterator methods don't match with those found via
getitem/contains (which is important for rollback)

blueprint update-rollback

Change-Id: Ia47f84291f50c33fc052b7b33fa0c1f9e8430ab4

heat/engine/parser.py

index b2e3af456adfbcd5e0af32c98640d8071b8d15a9..274d9ab520071b9df244fd12dd42549f2e8678d4 100644 (file)
@@ -298,6 +298,8 @@ class Stack(object):
                                 resource_name=res.name)
                         else:
                             del self.resources[res.name]
+                            self.dependencies = self._get_dependencies(
+                                self.resources.itervalues())
 
                 # Then create any which are defined in newstack but not self
                 for res in newstack:
@@ -306,6 +308,8 @@ class Stack(object):
                                      % res.name + " definition, adding")
                         res.stack = self
                         self[res.name] = res
+                        self.dependencies = self._get_dependencies(
+                            self.resources.itervalues())
                         result = self[res.name].create()
                         if result:
                             logger.error("Failed to add %s : %s" %
@@ -356,6 +360,8 @@ class Stack(object):
                             else:
                                 res.stack = self
                                 self[res.name] = res
+                                self.dependencies = self._get_dependencies(
+                                    self.resources.itervalues())
                                 result = self[res.name].create()
                                 if result:
                                     logger.error("Failed to create %s : %s" %
@@ -372,8 +378,6 @@ class Stack(object):
                 self.parameters = newstack.parameters
                 template_outputs = self.t[template.OUTPUTS]
                 self.outputs = self.resolve_static_data(template_outputs)
-                self.dependencies = self._get_dependencies(
-                    self.resources.itervalues())
                 self.store()
 
                 stack_status = self.UPDATE_COMPLETE