From 8ce7f968418e8cdbd7d80f08dcae140c7f65fb46 Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Mon, 26 Aug 2013 21:11:59 +0200 Subject: [PATCH] Remove backup resources on stack delete If any resources are cached as backups after a failed stack update + rollback, ensure they are deleted when the stack itself is deleted. Change-Id: I1e271cec146681759cc657ba82c205a648339ec1 --- heat/engine/parser.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/heat/engine/parser.py b/heat/engine/parser.py index 99e984ea..10eb47f0 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -359,7 +359,7 @@ class Stack(object): if callable(post_func): post_func() - def _backup_stack(self): + def _backup_stack(self, create_if_missing=True): ''' Get a Stack containing any in-progress resources from the previous stack state prior to an update. @@ -369,12 +369,14 @@ class Stack(object): if s is not None: logger.debug('Loaded existing backup stack') return self.load(self.context, stack=s) - else: + elif create_if_missing: prev = type(self)(self.context, self.name, self.t, self.env, owner_id=self.id) prev.store(backup=True) logger.debug('Created new backup stack') return prev + else: + return None def update(self, newstack, action=UPDATE): ''' @@ -474,6 +476,14 @@ class Stack(object): self.state_set(action, self.IN_PROGRESS, 'Stack %s started' % action) failures = [] + + backup_stack = self._backup_stack(False) + if backup_stack is not None: + backup_stack.delete() + if backup_stack.status != backup_stack.COMPLETE: + errs = backup_stack.status_reason + failures.append('Error deleting backup resources: %s' % errs) + for res in reversed(self): try: res.destroy() -- 2.45.2