diff options
author | rabi <ramishra@redhat.com> | 2017-08-08 13:25:20 +0530 |
---|---|---|
committer | rabi <ramishra@redhat.com> | 2017-11-08 07:35:56 +0530 |
commit | 187fc54249982d2f7213c750d98c6602a08b758b (patch) | |
tree | 3f9019accdcec98531961b4e4ccf6ff05ca419ff | |
parent | f73c2a4177377b710a02577feea38560b00a24bf (diff) | |
download | python-heatclient-187fc54249982d2f7213c750d98c6602a08b758b.tar.gz |
Add --no-rollback option for stack cancel
This adds a new --no-rollback option for stack cancel.
Usage: openstack stack cancel --no-rollback <stack_name>
Change-Id: I46252823701779e3a3c6867bc470d5532cf9d7a7
Related-Bug: #1709041
-rw-r--r-- | heatclient/osc/v1/stack.py | 18 | ||||
-rw-r--r-- | heatclient/tests/unit/osc/v1/test_stack.py | 12 | ||||
-rw-r--r-- | heatclient/tests/unit/test_actions.py | 9 | ||||
-rw-r--r-- | heatclient/v1/actions.py | 5 |
4 files changed, 40 insertions, 4 deletions
diff --git a/heatclient/osc/v1/stack.py b/heatclient/osc/v1/stack.py index d0b97e0..e4148d1 100644 --- a/heatclient/osc/v1/stack.py +++ b/heatclient/osc/v1/stack.py @@ -1220,11 +1220,17 @@ class CancelStack(StackActionBase): log = logging.getLogger(__name__ + '.CancelStack') def get_parser(self, prog_name): - return self._get_parser( + parser = self._get_parser( prog_name, _('Stack(s) to cancel (name or ID)'), - _('Wait for check to complete') + _('Wait for cancel to complete') + ) + parser.add_argument( + '--no-rollback', + action='store_true', + help=_('Cancel without rollback') ) + return parser def take_action(self, parsed_args): self.log.debug("take_action(%s)", parsed_args) @@ -1237,7 +1243,10 @@ class CancelStack(StackActionBase): 'Updated Time' ] heat_client = self.app.client_manager.orchestration - + if parsed_args.no_rollback: + action = heat_client.actions.cancel_without_rollback + else: + action = heat_client.actions.cancel_update for stack in parsed_args.stack: try: data = heat_client.stacks.get(stack_id=stack) @@ -1246,11 +1255,12 @@ class CancelStack(StackActionBase): status = getattr(data, 'stack_status').lower() if status == 'update_in_progress': + data = _stack_action( stack, parsed_args, heat_client, - heat_client.actions.cancel_update + action ) rows += [utils.get_dict_properties(data.to_dict(), columns)] else: diff --git a/heatclient/tests/unit/osc/v1/test_stack.py b/heatclient/tests/unit/osc/v1/test_stack.py index 159056a..ebe5329 100644 --- a/heatclient/tests/unit/osc/v1/test_stack.py +++ b/heatclient/tests/unit/osc/v1/test_stack.py @@ -1221,6 +1221,18 @@ class TestStackCancel(_TestStackCheckBase, TestStack): def test_stack_cancel(self): self._test_stack_action(2) + def test_stack_cancel_no_rollback(self): + self.action = self.mock_client.actions.cancel_without_rollback + arglist = ['my_stack', '--no-rollback'] + parsed_args = self.check_parser(self.cmd, arglist, []) + columns, rows = self.cmd.take_action(parsed_args) + self.action.assert_called_once_with('my_stack') + self.mock_client.stacks.get.assert_called_with('my_stack') + self.assertEqual(2, + self.mock_client.stacks.get.call_count) + self.assertEqual(self.columns, columns) + self.assertEqual(1, len(rows)) + def test_stack_cancel_multi(self): self._test_stack_action_multi(4) diff --git a/heatclient/tests/unit/test_actions.py b/heatclient/tests/unit/test_actions.py index 93b6e49..512d566 100644 --- a/heatclient/tests/unit/test_actions.py +++ b/heatclient/tests/unit/test_actions.py @@ -98,6 +98,15 @@ class ActionManagerTest(testtools.TestCase): manager = self._base_test(expect_args, expect_kwargs) manager.cancel_update(**fields) + def test_cancel_without_rollback(self): + fields = {'stack_id': 'teststack%2Fabcd1234'} + expect_args = ('POST', + '/stacks/teststack%2Fabcd1234/actions') + expect_kwargs = {'data': {'cancel_without_rollback': None}} + + manager = self._base_test(expect_args, expect_kwargs) + manager.cancel_without_rollback(**fields) + def test_check(self): fields = {'stack_id': 'teststack%2Fabcd1234'} expect_args = ('POST', diff --git a/heatclient/v1/actions.py b/heatclient/v1/actions.py index 0331866..81857e2 100644 --- a/heatclient/v1/actions.py +++ b/heatclient/v1/actions.py @@ -48,6 +48,11 @@ class ActionManager(stacks.StackChildManager): body = {'cancel_update': None} self.client.post('/stacks/%s/actions' % stack_id, data=body) + def cancel_without_rollback(self, stack_id): + """Cancel running update of a stack.""" + body = {'cancel_without_rollback': None} + self.client.post('/stacks/%s/actions' % stack_id, data=body) + def check(self, stack_id): """Check a stack.""" body = {'check': None} |