diff --git a/doc/source/cli/v2/plans.rst b/doc/source/cli/v2/plans.rst index 3a4432f..9756821 100644 --- a/doc/source/cli/v2/plans.rst +++ b/doc/source/cli/v2/plans.rst @@ -31,7 +31,7 @@ Field 'roles' contains list of names of Roles assigned to the Plan. Retrieve a Single Plan ---------------------- -*tuskar plan-show [-h] [--verbose] * +*tuskar plan-show [-h] [--verbose] [--only-empty-parameters] * Usage example: @@ -67,6 +67,8 @@ Example: Adding the --verbose flag will display all parameters, instead of just role counts. +Adding the --only-empty-parameters flag will display only parameters, which have empty or None value. When all parameters have some value, no parameters will be displayed. + Note: Parameters are displayed similarly as Roles, ie. set of properties with values. Each Parameter/Role separated by empty line from previous. Create a New Plan diff --git a/tuskarclient/tests/v2/test_plans_shell.py b/tuskarclient/tests/v2/test_plans_shell.py index 50a69ab..acd7210 100644 --- a/tuskarclient/tests/v2/test_plans_shell.py +++ b/tuskarclient/tests/v2/test_plans_shell.py @@ -19,7 +19,8 @@ from tuskarclient.v2 import plans_shell def empty_args(): args = mock.Mock(spec=[]) - for attr in ['uuid', 'name', 'description', 'parameters']: + for attr in ['uuid', 'name', 'description', 'parameters', + 'only_empty_parameters']: setattr(args, attr, None) return args @@ -74,6 +75,17 @@ class PlansShellTest(BasePlansShellTest): mock_print_summary.assert_called_with(mock_find_resource.return_value, outfile=self.outfile) + def test_filter_empty_parameters(self): + parameters = [{'name': 'setup param', 'value': '1'}, + {'name': 'empty-parameter', 'value': ''}, + {'name': 'empty-parameter', 'value': None}] + + filtered_parameters = self.shell.filter_empty_parameters(parameters) + + self.assertEqual([{'name': 'empty-parameter', 'value': ''}, + {'name': 'empty-parameter', 'value': None}], + filtered_parameters) + @mock.patch('tuskarclient.common.utils.find_resource') @mock.patch('tuskarclient.common.formatting.print_dict') def test_plan_show_scale(self, mock_print_dict, mock_find_resource): diff --git a/tuskarclient/v2/plans_shell.py b/tuskarclient/v2/plans_shell.py index 119b781..2bcc02f 100644 --- a/tuskarclient/v2/plans_shell.py +++ b/tuskarclient/v2/plans_shell.py @@ -35,9 +35,14 @@ def do_plan_list(tuskar, args, outfile=sys.stdout): help="UUID of the Plan to show.") @utils.arg('--verbose', default=False, action="store_true", help="Display full plan details") +@utils.arg('--only-empty-parameters', default=False, action="store_true", + help="Display only parameters with empty or None value") def do_plan_show(tuskar, args, outfile=sys.stdout): """Show an individual Plan by its UUID.""" plan = utils.find_resource(tuskar.plans, args.plan) + if args.only_empty_parameters: + plan._info['parameters'] = ( + filter_empty_parameters(plan._info['parameters'])) if args.verbose: print_plan_detail(plan, outfile=outfile) else: @@ -86,6 +91,13 @@ def filter_parameters_to_dict(parameters, param_name): return filtered_params +def filter_empty_parameters(parameters): + """Filters parameters with empty or None value.""" + filtered_parameters = [param for param in parameters + if param['value'] == '' or param['value'] is None] + return filtered_parameters + + def print_plan_detail(plan, outfile=sys.stdout): """Print detailed Plan information (for plan-show --verbose etc.)."""