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
|
return
|
||||||
self.state_set(self.DELETE_IN_PROGRESS)
|
self.state_set(self.DELETE_IN_PROGRESS)
|
||||||
Resource.delete(self)
|
Resource.delete(self)
|
||||||
|
try:
|
||||||
server = self.nova().servers.get(self.instance_id)
|
server = self.nova().servers.get(self.instance_id)
|
||||||
|
except NotFound:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
server.delete()
|
server.delete()
|
||||||
self.instance_id = None
|
self.instance_id = None
|
||||||
self.state_set(self.DELETE_COMPLETE)
|
self.state_set(self.DELETE_COMPLETE)
|
||||||
|
@ -199,14 +199,14 @@ class Stack(object):
|
|||||||
self.status_set(self.IN_PROGRESS)
|
self.status_set(self.IN_PROGRESS)
|
||||||
|
|
||||||
for r in order:
|
for r in order:
|
||||||
failed_str = self.resources[r].CREATE_FAILED
|
res = self.resources[r]
|
||||||
if not failed:
|
if not failed:
|
||||||
try:
|
try:
|
||||||
self.resources[r].create()
|
res.create()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logger.exception('create')
|
logger.exception('create')
|
||||||
failed = True
|
failed = True
|
||||||
self.resources[r].state_set(failed_str, str(ex))
|
res.state_set(res.CREATE_FAILED, str(ex))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.update_parsed_template()
|
self.update_parsed_template()
|
||||||
@ -214,11 +214,9 @@ class Stack(object):
|
|||||||
logger.exception('update_parsed_template')
|
logger.exception('update_parsed_template')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.resources[r].state_set(failed_str)
|
res.state_set(res.CREATE_FAILED)
|
||||||
if failed:
|
|
||||||
self.status_set(self.CREATE_FAILED)
|
self.status_set(failed and self.CREATE_FAILED or self.CREATE_COMPLETE)
|
||||||
else:
|
|
||||||
self.status_set(self.CREATE_COMPLETE)
|
|
||||||
|
|
||||||
def create(self):
|
def create(self):
|
||||||
|
|
||||||
@ -230,19 +228,23 @@ class Stack(object):
|
|||||||
delete all the resources in the reverse order specified by
|
delete all the resources in the reverse order specified by
|
||||||
get_create_order().
|
get_create_order().
|
||||||
'''
|
'''
|
||||||
|
order = self.get_create_order()
|
||||||
|
failed = False
|
||||||
self.status_set(self.DELETE_IN_PROGRESS)
|
self.status_set(self.DELETE_IN_PROGRESS)
|
||||||
|
|
||||||
order = self.get_create_order()
|
for r in reversed(order):
|
||||||
order.reverse()
|
res = self.resources[r]
|
||||||
for r in order:
|
|
||||||
try:
|
try:
|
||||||
self.resources[r].delete()
|
res.delete()
|
||||||
db_api.resource_get(None, self.resources[r].id).delete()
|
db_api.resource_get(None, self.resources[r].id).delete()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
failed = True
|
||||||
|
res.state_set(res.DELETE_FAILED)
|
||||||
logger.error('delete: %s' % str(ex))
|
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)
|
db_api.stack_delete(None, self.name)
|
||||||
self.status_set(self.DELETE_COMPLETE)
|
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
pool = eventlet.GreenPool()
|
pool = eventlet.GreenPool()
|
||||||
|
@ -62,7 +62,7 @@ class Volume(Resource):
|
|||||||
vol = self.nova('volume').volumes.get(self.instance_id)
|
vol = self.nova('volume').volumes.get(self.instance_id)
|
||||||
if vol.status == 'in-use':
|
if vol.status == 'in-use':
|
||||||
logger.warn('cant delete volume when in-use')
|
logger.warn('cant delete volume when in-use')
|
||||||
return
|
raise exception.Error("Volume in use")
|
||||||
|
|
||||||
self.state_set(self.DELETE_IN_PROGRESS)
|
self.state_set(self.DELETE_IN_PROGRESS)
|
||||||
Resource.delete(self)
|
Resource.delete(self)
|
||||||
|
Loading…
Reference in New Issue
Block a user