Handle failures when deleting stacks

Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
Zane Bitter 2012-05-21 14:53:42 +02:00
parent 53eda6d78a
commit a72267cb0c
3 changed files with 23 additions and 17 deletions

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

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

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