]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Catch NotFound exceptions on Volume handle_delete
authorSteve Baker <sbaker@redhat.com>
Tue, 2 Apr 2013 00:24:09 +0000 (13:24 +1300)
committerSteve Baker <sbaker@redhat.com>
Tue, 2 Apr 2013 00:47:52 +0000 (13:47 +1300)
Currently stack delete fails if the underlying volume is
already deleted.
Fixes: bug #1163067
Change-Id: I9d7c009f70a0bb7274f3e19cbe10e9061c5e2d60

heat/engine/resources/volume.py
heat/tests/test_volume.py

index 2c20f6e50464d54e08f936897bfd74fd46d6464a..f4daa3bce1a31e30a5c6c54927b23d173054efc5 100644 (file)
@@ -17,6 +17,7 @@ import eventlet
 from heat.openstack.common import log as logging
 
 from heat.common import exception
+from heat.engine import clients
 from heat.engine import resource
 
 logger = logging.getLogger(__name__)
@@ -51,13 +52,16 @@ class Volume(resource.Resource):
 
     def handle_delete(self):
         if self.resource_id is not None:
-            vol = self.cinder().volumes.get(self.resource_id)
+            try:
+                vol = self.cinder().volumes.get(self.resource_id)
 
-            if vol.status == 'in-use':
-                logger.warn('cant delete volume when in-use')
-                raise exception.Error("Volume in use")
+                if vol.status == 'in-use':
+                    logger.warn('cant delete volume when in-use')
+                    raise exception.Error("Volume in use")
 
-            self.cinder().volumes.delete(self.resource_id)
+                self.cinder().volumes.delete(self.resource_id)
+            except clients.cinder_exceptions.NotFound:
+                pass
 
 
 class VolumeAttachment(resource.Resource):
index c5f1ea7ae14f02555ba9e1a5eee97b5f0890be12..28c1fef3aa6f089306377a76deff6f189c4ccfa0 100644 (file)
@@ -103,6 +103,8 @@ class VolumeTest(unittest.TestCase):
         self.fc.volumes.get('vol-123').AndReturn(fv)
         self.fc.volumes.delete('vol-123').AndReturn(None)
 
+        self.fc.volumes.get('vol-123').AndRaise(
+            clients.cinder_exceptions.NotFound('Not found'))
         self.m.ReplayAll()
 
         t = self.load_template()
@@ -114,8 +116,13 @@ class VolumeTest(unittest.TestCase):
         self.assertEqual(resource.handle_update({}), vol.Volume.UPDATE_REPLACE)
 
         fv.status = 'in-use'
+        resource.state = 'CREATE_COMPLETE'
         self.assertEqual(resource.delete(), 'Volume in use')
         fv.status = 'available'
+        resource.state = 'CREATE_COMPLETE'
+        self.assertEqual(resource.delete(), None)
+        fv.status = 'available'
+        resource.state = 'CREATE_COMPLETE'
         self.assertEqual(resource.delete(), None)
 
         self.m.VerifyAll()