Handle failures when deleting stacks
Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
parent
53eda6d78a
commit
a72267cb0c
@ -222,7 +222,11 @@ class Instance(Resource):
|
||||
return
|
||||
self.state_set(self.DELETE_IN_PROGRESS)
|
||||
Resource.delete(self)
|
||||
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)
|
||||
|
@ -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))
|
||||
|
||||
self.status_set(failed and self.DELETE_FAILED or self.DELETE_COMPLETE)
|
||||
if not failed:
|
||||
db_api.stack_delete(None, self.name)
|
||||
self.status_set(self.DELETE_COMPLETE)
|
||||
|
||||
def delete(self):
|
||||
pool = eventlet.GreenPool()
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user