Cast string boolean from CLI
Convert quoted boolean strings to real booleans when handling the ``--public`` option in runbook create and set commands. Change-Id: I44ee670b4e8d3b9fa0a5c7275efb050883b2c925
This commit is contained in:
@@ -55,6 +55,9 @@ class CreateBaremetalRunbook(command.ShowOne):
|
||||
help=_('UUID of the runbook.'))
|
||||
parser.add_argument(
|
||||
'--public',
|
||||
dest='public',
|
||||
nargs='?',
|
||||
const='true',
|
||||
metavar='<public>',
|
||||
help=_('Whether the runbook will be private or public.')
|
||||
)
|
||||
@@ -86,6 +89,9 @@ class CreateBaremetalRunbook(command.ShowOne):
|
||||
field_list = ['name', 'uuid', 'owner', 'public', 'extra']
|
||||
fields = dict((k, v) for (k, v) in vars(parsed_args).items()
|
||||
if k in field_list and v is not None)
|
||||
if parsed_args.public is not None:
|
||||
fields['public'] = utils.bool_argument_value(
|
||||
'--public', parsed_args.public, strict=True)
|
||||
fields = utils.args_array_to_dict(fields, 'extra')
|
||||
runbook = baremetal_client.runbook.create(steps=steps,
|
||||
**fields)
|
||||
@@ -156,6 +162,9 @@ class SetBaremetalRunbook(command.Command):
|
||||
)
|
||||
parser.add_argument(
|
||||
'--public',
|
||||
dest='public',
|
||||
nargs='?',
|
||||
const='true',
|
||||
metavar='<public>',
|
||||
help=_('Make a private runbook public.')
|
||||
)
|
||||
@@ -190,8 +199,10 @@ class SetBaremetalRunbook(command.Command):
|
||||
if parsed_args.owner:
|
||||
owner = ["owner=%s" % parsed_args.owner]
|
||||
properties.extend(utils.args_array_to_patch('add', owner))
|
||||
if parsed_args.public:
|
||||
public = ["public=%s" % parsed_args.public]
|
||||
if parsed_args.public is not None:
|
||||
to_bool = utils.bool_argument_value(
|
||||
'--public', parsed_args.public, strict=True)
|
||||
public = ["public=%s" % to_bool]
|
||||
properties.extend(utils.args_array_to_patch('add', public))
|
||||
if parsed_args.steps:
|
||||
steps = utils.handle_json_arg(parsed_args.steps, 'runbook steps')
|
||||
|
@@ -127,6 +127,28 @@ class TestCreateBaremetalRunbook(TestBaremetalRunbook):
|
||||
self.cmd, arglist, verifylist)
|
||||
self.assertFalse(self.baremetal_mock.runbook.create.called)
|
||||
|
||||
def test_baremetal_runbook_create_public_false(self):
|
||||
arglist = [
|
||||
'--name', baremetal_fakes.baremetal_runbook_name,
|
||||
'--steps', baremetal_fakes.baremetal_runbook_steps,
|
||||
'--public', 'false',
|
||||
]
|
||||
verifylist = [
|
||||
('name', baremetal_fakes.baremetal_runbook_name),
|
||||
('steps', baremetal_fakes.baremetal_runbook_steps),
|
||||
('public', 'false'),
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
self.cmd.take_action(parsed_args)
|
||||
|
||||
expected = {
|
||||
'name': baremetal_fakes.baremetal_runbook_name,
|
||||
'steps': json.loads(baremetal_fakes.baremetal_runbook_steps),
|
||||
'public': False,
|
||||
}
|
||||
self.baremetal_mock.runbook.create.assert_called_once_with(**expected)
|
||||
|
||||
|
||||
class TestShowBaremetalRunbook(TestBaremetalRunbook):
|
||||
def setUp(self):
|
||||
|
Reference in New Issue
Block a user