From: Steven Hardy Date: Fri, 7 Jun 2013 13:19:28 +0000 (+0100) Subject: engine : suspend support for nested stacks X-Git-Tag: 2014.1~424^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=b0227869544ad63c22972cbfb3fd2b9255126bb2;p=openstack-build%2Fheat-build.git engine : suspend support for nested stacks blueprint: stack-suspend-resume Change-Id: I5d1909065c94d85fb28e4c50475c6ea74baff27c --- diff --git a/heat/engine/stack_resource.py b/heat/engine/stack_resource.py index 3bc6664e..aef449d6 100644 --- a/heat/engine/stack_resource.py +++ b/heat/engine/stack_resource.py @@ -103,6 +103,25 @@ class StackResource(resource.Resource): if stack is not None: stack.delete() + def handle_suspend(self): + stack = self.nested() + if stack is None: + raise exception.Error(_('Cannot suspend %s, stack not created') + % self.name) + + suspend_task = scheduler.TaskRunner(self._nested.suspend_task) + suspend_task.start(timeout=self._nested.timeout_secs()) + return suspend_task + + def check_suspend_complete(self, suspend_task): + done = suspend_task.step() + if done: + if self._nested.state != (self._nested.SUSPEND, + self._nested.COMPLETE): + raise exception.Error(self._nested.status_reason) + + return done + def get_output(self, op): ''' Return the specified Output value from the nested stack. diff --git a/heat/tests/test_nested_stack.py b/heat/tests/test_nested_stack.py index 5945b2ff..83174292 100644 --- a/heat/tests/test_nested_stack.py +++ b/heat/tests/test_nested_stack.py @@ -18,6 +18,7 @@ from heat.common import exception from heat.common import template_format from heat.engine import parser from heat.engine import resource +from heat.engine import scheduler from heat.common import urlfetch from heat.tests.common import HeatTestCase from heat.tests import utils @@ -95,3 +96,17 @@ Outputs: self.assertTrue(rsrc.FnGetRefId().startswith(arn_prefix)) self.m.VerifyAll() + + def test_nested_stack_suspend(self): + urlfetch.get('https://localhost/the.template').AndReturn( + self.nested_template) + self.m.ReplayAll() + + stack = self.create_stack(self.test_template) + rsrc = stack['the_nested'] + + scheduler.TaskRunner(rsrc.suspend)() + self.assertEqual(rsrc.state, (rsrc.SUSPEND, rsrc.COMPLETE)) + + rsrc.delete() + self.m.VerifyAll()