Catch NotFound exceptions on Volume handle_delete

Currently stack delete fails if the underlying volume is
already deleted.
Fixes: bug #1163067

Change-Id: I9d7c009f70a0bb7274f3e19cbe10e9061c5e2d60
This commit is contained in:
Steve Baker 2013-04-02 13:24:09 +13:00
parent d388e48fa3
commit 3fb34493bf
2 changed files with 16 additions and 5 deletions

View 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):

View 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()