Merge "Add --dry-run option to openstack stack create"

This commit is contained in:
Jenkins
2016-01-21 00:14:31 +00:00
committed by Gerrit Code Review
2 changed files with 41 additions and 0 deletions

View File

@@ -106,6 +106,12 @@ class CreateStack(show.ShowOne):
metavar='<TAG1,TAG2...>',
help=_('A list of tags to associate with the stack')
)
parser.add_argument(
'--dry-run',
action='store_true',
help=_('Do not actually perform the stack create, but show what '
'would be created')
)
parser.add_argument(
'name',
metavar='<STACK_NAME>',
@@ -150,6 +156,30 @@ class CreateStack(show.ShowOne):
if parsed_args.timeout:
fields['timeout_mins'] = parsed_args.timeout
if parsed_args.dry_run:
stack = client.stacks.preview(**fields)
formatters = {
'description': heat_utils.text_wrap_formatter,
'template_description': heat_utils.text_wrap_formatter,
'stack_status_reason': heat_utils.text_wrap_formatter,
'parameters': heat_utils.json_formatter,
'outputs': heat_utils.json_formatter,
'resources': heat_utils.json_formatter,
'links': heat_utils.link_formatter,
}
columns = []
for key in stack.to_dict():
columns.append(key)
columns.sort()
return (
columns,
utils.get_item_properties(stack, columns,
formatters=formatters)
)
stack = client.stacks.create(**fields)['stack']
if parsed_args.wait:
if not utils.wait_for_status(client.stacks.get, parsed_args.name,

View File

@@ -53,6 +53,8 @@ class TestStackCreate(TestStack):
return_value={'stack': {'id': '1234'}})
self.stack_client.get = mock.MagicMock(
return_value={'stack_status': 'create_complete'})
self.stack_client.preview = mock.MagicMock(
return_value=stacks.Stack(None, {'stack': {'id', '1234'}}))
stack._authenticated_fetcher = mock.MagicMock()
def test_stack_create_defaults(self):
@@ -137,6 +139,15 @@ class TestStackCreate(TestStack):
self.assertRaises(exc.CommandError, self.cmd.take_action, parsed_args)
def test_stack_create_dry_run(self):
arglist = ['my_stack', '-t', self.template_path, '--dry-run']
parsed_args = self.check_parser(self.cmd, arglist, [])
self.cmd.take_action(parsed_args)
self.stack_client.preview.assert_called_with(**self.defaults)
self.stack_client.create.assert_not_called()
class TestStackUpdate(TestStack):