diff --git a/heat/engine/resources/stack_resource.py b/heat/engine/resources/stack_resource.py index c98c6f972b..f7e3b7f1aa 100644 --- a/heat/engine/resources/stack_resource.py +++ b/heat/engine/resources/stack_resource.py @@ -398,10 +398,15 @@ class StackResource(resource.Resource): ''' Delete the nested stack. ''' - stack_identity = identifier.HeatIdentifier( - self.context.tenant_id, - self.physical_resource_name(), - self.resource_id) + try: + stack = self.nested() + except exception.NotFound: + return + + if stack is None: + return + + stack_identity = stack.identifier() try: self.rpc_client().delete_stack(self.context, stack_identity) diff --git a/heat/tests/test_nested_stack.py b/heat/tests/test_nested_stack.py index f8bf4638be..bd5c6f9442 100644 --- a/heat/tests/test_nested_stack.py +++ b/heat/tests/test_nested_stack.py @@ -355,11 +355,12 @@ Outputs: def test_handle_delete(self): self.res.rpc_client = mock.MagicMock() self.res.action = self.res.CREATE + self.res.nested = mock.MagicMock() stack_identity = identifier.HeatIdentifier( self.ctx.tenant_id, self.res.physical_resource_name(), self.res.resource_id) - + self.res.nested().identifier.return_value = stack_identity self.res.handle_delete() self.res.rpc_client.return_value.delete_stack.assert_called_once_with( - self.ctx, stack_identity) + self.ctx, self.res.nested().identifier()) diff --git a/heat/tests/test_provider_template.py b/heat/tests/test_provider_template.py index 108bc37f0e..5f19239d15 100644 --- a/heat/tests/test_provider_template.py +++ b/heat/tests/test_provider_template.py @@ -924,9 +924,13 @@ class TemplateResourceCrudTest(common.HeatTestCase): self.res.uuid = six.text_type(uuid.uuid4()) self.res.resource_id = six.text_type(uuid.uuid4()) self.res.action = self.res.CREATE + self.res.nested = mock.MagicMock() ident = identifier.HeatIdentifier(self.ctx.tenant_id, self.res.physical_resource_name(), self.res.resource_id) + self.res.nested().identifier.return_value = ident self.res.handle_delete() rpcc = self.res.rpc_client.return_value - rpcc.delete_stack.assert_called_once_with(self.ctx, ident) + rpcc.delete_stack.assert_called_once_with( + self.ctx, + self.res.nested().identifier()) diff --git a/heat/tests/test_stack_resource.py b/heat/tests/test_stack_resource.py index 0b18787933..9a3fe0b164 100644 --- a/heat/tests/test_stack_resource.py +++ b/heat/tests/test_stack_resource.py @@ -496,14 +496,19 @@ class StackResourceTest(common.HeatTestCase): force_reload=True) self.m.VerifyAll() - def test_delete_nested_not_found_nested_stack(self): - + def test_delete_nested_none_nested_stack(self): self.parent_resource._nested = None + self.assertIsNone(self.parent_resource.delete_nested()) + + def test_delete_nested_not_found_nested_stack(self): + self.parent_resource._nested = mock.MagicMock() rpcc = mock.Mock() self.parent_resource.rpc_client = rpcc rpcc.return_value.delete_stack = mock.Mock( side_effect=exception.NotFound()) self.assertIsNone(self.parent_resource.delete_nested()) + rpcc.return_value.delete_stack.assert_called_once_with( + self.parent_resource.context, mock.ANY) def test_need_update_in_failed_state_for_nested_resource(self): """