diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 9af633e695..4643e91aef 100755 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -1175,8 +1175,12 @@ class Stack(collections.Mapping): e.args[0] if e.args else 'Failed stack pre-ops: %s' % six.text_type(e)) return + + def destroy_resource(stack_resource): + return stack_resource.destroy() + action_task = scheduler.DependencyTaskGroup(self.dependencies, - resource.Resource.destroy, + destroy_resource, reverse=True) try: scheduler.TaskRunner(action_task)(timeout=self.timeout_secs()) diff --git a/heat/tests/test_stack_delete.py b/heat/tests/test_stack_delete.py index a8ecae3399..294bcdd543 100644 --- a/heat/tests/test_stack_delete.py +++ b/heat/tests/test_stack_delete.py @@ -12,6 +12,8 @@ # under the License. import copy +import fixtures +import logging import time from keystoneclient import exceptions as kc_exceptions @@ -421,6 +423,23 @@ class StackTest(common.HeatTestCase): self.assertEqual('Resource DELETE failed: Exception: foo', self.stack.status_reason) + def test_delete_stack_with_resource_log_is_clear(self): + debug_logger = self.useFixture( + fixtures.FakeLogger(level=logging.DEBUG, + format="%(levelname)8s [%(name)s] %(" + "message)s")) + tmpl = {'HeatTemplateFormatVersion': '2012-12-12', + 'Resources': {'AResource': {'Type': 'GenericResourceType'}}} + self.stack = stack.Stack(self.ctx, 'delete_log_test', + template.Template(tmpl)) + self.stack.store() + self.stack.create() + self.assertEqual((self.stack.CREATE, self.stack.COMPLETE), + self.stack.state) + self.stack.delete() + self.assertNotIn("destroy from None running", + debug_logger.output) + def test_stack_user_project_id_delete_fail(self): class FakeKeystoneClientFail(fakes.FakeKeystoneClient):