Make RPC call to abandon nested stack
Due to stacks being processable by multiple engines, resources in a nested stack cannot be marked for retainment from the parent resource of the nested stack. This patch makes the parent resource of the nested stack call stack abandon instead of stack delete through the RPC client so that nested stacks are deleted while nested stack resources are retained. Change-Id: I7103f46d86db35e08b014d9790215740fcae441d Closes-bug: #1509912
This commit is contained in:
parent
633e745aad
commit
d19c624e48
|
@ -54,6 +54,7 @@ class StackResource(resource.Resource):
|
|||
|
||||
def __init__(self, name, json_snippet, stack):
|
||||
super(StackResource, self).__init__(name, json_snippet, stack)
|
||||
self.nested_abandon_in_progress = False
|
||||
self._nested = None
|
||||
self.resource_info = None
|
||||
|
||||
|
@ -455,7 +456,10 @@ class StackResource(resource.Resource):
|
|||
stack_identity = dict(stack.identifier())
|
||||
|
||||
try:
|
||||
self.rpc_client().delete_stack(self.context, stack_identity)
|
||||
if self.nested_abandon_in_progress:
|
||||
self.rpc_client().abandon_stack(self.context, stack_identity)
|
||||
else:
|
||||
self.rpc_client().delete_stack(self.context, stack_identity)
|
||||
except Exception as ex:
|
||||
self.rpc_client().ignore_error_named(ex, 'NotFound')
|
||||
|
||||
|
@ -509,6 +513,7 @@ class StackResource(resource.Resource):
|
|||
return self._check_status_complete(self.CHECK)
|
||||
|
||||
def prepare_abandon(self):
|
||||
self.nested_abandon_in_progress = True
|
||||
nested_stack = self.nested()
|
||||
if nested_stack:
|
||||
return self.nested().prepare_abandon()
|
||||
|
|
|
@ -200,6 +200,18 @@ class StackResourceTest(StackResourceBaseTest):
|
|||
ret = self.parent_resource.prepare_abandon()
|
||||
self.assertEqual({}, ret)
|
||||
|
||||
def test_abandon_nested_sends_rpc_abandon(self):
|
||||
rpcc = mock.Mock()
|
||||
self.parent_resource.rpc_client = rpcc
|
||||
self.parent_resource.nested = mock.MagicMock()
|
||||
|
||||
self.parent_resource.prepare_abandon()
|
||||
self.parent_resource.delete_nested()
|
||||
|
||||
rpcc.return_value.abandon_stack.assert_called_once_with(
|
||||
self.parent_resource.context, mock.ANY)
|
||||
rpcc.return_value.delete_stack.assert_not_called()
|
||||
|
||||
def test_propagated_files(self):
|
||||
"""Test passing of the files map in the top level to the child.
|
||||
|
||||
|
|
Loading…
Reference in New Issue