]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Handle failures when deleting stacks
authorZane Bitter <zbitter@redhat.com>
Mon, 21 May 2012 12:53:42 +0000 (14:53 +0200)
committerZane Bitter <zbitter@redhat.com>
Mon, 21 May 2012 18:28:51 +0000 (20:28 +0200)
Signed-off-by: Zane Bitter <zbitter@redhat.com>
heat/engine/instance.py
heat/engine/parser.py
heat/engine/volume.py

index 7c5b21057339f70ccdfe53eb96a319ffb2a79ce0..cc85b468daa939a8462d7a2403ad7af868ef49e5 100644 (file)
@@ -222,7 +222,11 @@ class Instance(Resource):
             return
         self.state_set(self.DELETE_IN_PROGRESS)
         Resource.delete(self)
-        server = self.nova().servers.get(self.instance_id)
-        server.delete()
+        try:
+            server = self.nova().servers.get(self.instance_id)
+        except NotFound:
+            pass
+        else:
+            server.delete()
         self.instance_id = None
         self.state_set(self.DELETE_COMPLETE)
index 5e0723db160d931ae7b7e9d4389136bd0df8b3b1..afd05673b778fdb205b0702013459fe2408a8616 100644 (file)
@@ -199,14 +199,14 @@ class Stack(object):
         self.status_set(self.IN_PROGRESS)
 
         for r in order:
-            failed_str = self.resources[r].CREATE_FAILED
+            res = self.resources[r]
             if not failed:
                 try:
-                    self.resources[r].create()
+                    res.create()
                 except Exception as ex:
                     logger.exception('create')
                     failed = True
-                    self.resources[r].state_set(failed_str, str(ex))
+                    res.state_set(res.CREATE_FAILED, str(ex))
 
                 try:
                     self.update_parsed_template()
@@ -214,11 +214,9 @@ class Stack(object):
                     logger.exception('update_parsed_template')
 
             else:
-                self.resources[r].state_set(failed_str)
-        if failed:
-            self.status_set(self.CREATE_FAILED)
-        else:
-            self.status_set(self.CREATE_COMPLETE)
+                res.state_set(res.CREATE_FAILED)
+
+        self.status_set(failed and self.CREATE_FAILED or self.CREATE_COMPLETE)
 
     def create(self):
 
@@ -230,19 +228,23 @@ class Stack(object):
         delete all the resources in the reverse order specified by
         get_create_order().
         '''
+        order = self.get_create_order()
+        failed = False
         self.status_set(self.DELETE_IN_PROGRESS)
 
-        order = self.get_create_order()
-        order.reverse()
-        for r in order:
+        for r in reversed(order):
+            res = self.resources[r]
             try:
-                self.resources[r].delete()
+                res.delete()
                 db_api.resource_get(None, self.resources[r].id).delete()
             except Exception as ex:
+                failed = True
+                res.state_set(res.DELETE_FAILED)
                 logger.error('delete: %s' % str(ex))
 
-        db_api.stack_delete(None, self.name)
-        self.status_set(self.DELETE_COMPLETE)
+        self.status_set(failed and self.DELETE_FAILED or self.DELETE_COMPLETE)
+        if not failed:
+            db_api.stack_delete(None, self.name)
 
     def delete(self):
         pool = eventlet.GreenPool()
index af3610eaddf7f6e57dbf7eb8ebbb5dafb9330346..f3651d3713fbf0b6a7d9d42bb6c5fdc5354fe48f 100644 (file)
@@ -62,7 +62,7 @@ class Volume(Resource):
             vol = self.nova('volume').volumes.get(self.instance_id)
             if vol.status == 'in-use':
                 logger.warn('cant delete volume when in-use')
-                return
+                raise exception.Error("Volume in use")
 
         self.state_set(self.DELETE_IN_PROGRESS)
         Resource.delete(self)