From 033511c291c811f9368aaccdc81de3c9c93c9ae2 Mon Sep 17 00:00:00 2001 From: Pavlo Shchelokovskyy Date: Fri, 25 Jan 2019 11:47:31 +0200 Subject: Allow to set poll interval to OSC stack create In certain scenarios the default poll interval of 5s used by `openstack stack create --wait` command is too short. Setting the poll interval was supported in heat CLI with `heat stack-create --poll N` but is missing in OSC plugin. This patch adds an optional argument `--poll N` (N defaults to 5) to the `openstack stack create` command. Change-Id: Id279d92ea890032f280e453b795ede2818ffbb8c Story: 2004863 Task: 29106 --- heatclient/osc/v1/stack.py | 11 ++++++++++- heatclient/tests/unit/osc/v1/test_stack.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) (limited to 'heatclient') diff --git a/heatclient/osc/v1/stack.py b/heatclient/osc/v1/stack.py index bdf7f5f..761b323 100644 --- a/heatclient/osc/v1/stack.py +++ b/heatclient/osc/v1/stack.py @@ -90,6 +90,14 @@ class CreateStack(command.ShowOne): action='store_true', help=_('Wait until stack goes to CREATE_COMPLETE or CREATE_FAILED') ) + parser.add_argument( + '--poll', + metavar='SECONDS', + type=int, + default=5, + help=_('Poll interval in seconds for use with --wait, ' + 'defaults to 5.') + ) parser.add_argument( '--tags', metavar='', @@ -184,7 +192,8 @@ class CreateStack(command.ShowOne): stack = client.stacks.create(**fields)['stack'] if parsed_args.wait: stack_status, msg = event_utils.poll_for_events( - client, parsed_args.name, action='CREATE') + client, parsed_args.name, action='CREATE', + poll_period=parsed_args.poll) if stack_status == 'CREATE_FAILED': raise exc.CommandError(msg) diff --git a/heatclient/tests/unit/osc/v1/test_stack.py b/heatclient/tests/unit/osc/v1/test_stack.py index 146c1bc..d6a51b0 100644 --- a/heatclient/tests/unit/osc/v1/test_stack.py +++ b/heatclient/tests/unit/osc/v1/test_stack.py @@ -148,6 +148,24 @@ class TestStackCreate(TestStack): self.cmd.take_action(parsed_args) + mock_poll.assert_called_once_with(mock.ANY, 'my_stack', + action='CREATE', poll_period=5) + self.stack_client.create.assert_called_with(**self.defaults) + self.stack_client.get.assert_called_with(**{'stack_id': '1234', + 'resolve_outputs': False}) + + @mock.patch('heatclient.common.event_utils.poll_for_events', + return_value=('CREATE_COMPLETE', + 'Stack my_stack CREATE_COMPLETE')) + def test_stack_create_wait_with_poll(self, mock_poll): + arglist = ['my_stack', '-t', self.template_path, '--wait', + '--poll', '10'] + parsed_args = self.check_parser(self.cmd, arglist, []) + + self.cmd.take_action(parsed_args) + + mock_poll.assert_called_once_with(mock.ANY, 'my_stack', + action='CREATE', poll_period=10) self.stack_client.create.assert_called_with(**self.defaults) self.stack_client.get.assert_called_with(**{'stack_id': '1234', 'resolve_outputs': False}) -- cgit v1.2.1