diff --git a/karborclient/osc/v1/scheduled_operations.py b/karborclient/osc/v1/scheduled_operations.py index cde4c80..6b24060 100644 --- a/karborclient/osc/v1/scheduled_operations.py +++ b/karborclient/osc/v1/scheduled_operations.py @@ -12,6 +12,8 @@ """Data protection V1 scheduled_operations action implementations""" +import functools +import json import six from oslo_utils import uuidutils @@ -24,6 +26,15 @@ from karborclient.common.apiclient import exceptions from karborclient.i18n import _ +def format_scheduledoperation(scheduledoperation_info): + for key in ('operation_definition', ): + if key not in scheduledoperation_info: + continue + scheduledoperation_info[key] = json.dumps(scheduledoperation_info[key], + indent=2, sort_keys=True) + scheduledoperation_info.pop("links", None) + + class ListScheduledOperations(command.Lister): _description = _("List scheduled_operations.") @@ -104,16 +115,17 @@ class ListScheduledOperations(command.Lister): search_opts=search_opts, marker=parsed_args.marker, limit=parsed_args.limit, sort=parsed_args.sort) - column_headers = ['Id', 'Name', 'OperationType', 'TriggerId', - 'OperationDefinition'] + column_headers = ['Id', 'Name', 'Operation Type', 'Trigger Id', + 'Operation Definition'] - scheduled_operations = [] - for s in data: - scheduled_operation = (s.id, s.name, s.operation_type, - s.trigger_id, s.operation_definition) - scheduled_operations.append(scheduled_operation) - - return (column_headers, scheduled_operations) + json_dumps = functools.partial(json.dumps, indent=2, sort_keys=True) + formatters = { + "Operation Definition": json_dumps, + } + return (column_headers, + list(osc_utils.get_item_properties( + s, column_headers, formatters=formatters, + ) for s in data)) class ShowScheduledOperation(command.ShowOne): @@ -133,7 +145,7 @@ class ShowScheduledOperation(command.ShowOne): so = osc_utils.find_resource(client.scheduled_operations, parsed_args.scheduledoperation) - so._info.pop("links", None) + format_scheduledoperation(so._info) return zip(*sorted(six.iteritems(so._info))) @@ -173,7 +185,7 @@ class CreateScheduledOperation(command.ShowOne): parsed_args.name, parsed_args.operation_type, parsed_args.trigger_id, parsed_args.operation_definition) - so._info.pop("links", None) + format_scheduledoperation(so._info) return zip(*sorted(six.iteritems(so._info))) diff --git a/karborclient/tests/unit/osc/v1/test_scheduledoperations.py b/karborclient/tests/unit/osc/v1/test_scheduledoperations.py index 46be062..61836d4 100644 --- a/karborclient/tests/unit/osc/v1/test_scheduledoperations.py +++ b/karborclient/tests/unit/osc/v1/test_scheduledoperations.py @@ -12,6 +12,7 @@ # limitations under the License. import copy +import json from karborclient.osc.v1 import scheduled_operations as osc_so from karborclient.tests.unit.osc.v1 import fakes @@ -61,21 +62,23 @@ class TestListScheduledOperations(TestScheduledOperations): # Check that columns are correct expected_columns = ( - ['Id', 'Name', 'OperationType', 'TriggerId', - 'OperationDefinition']) + ['Id', 'Name', 'Operation Type', 'Trigger Id', + 'Operation Definition']) self.assertEqual(expected_columns, columns) + operation_definition = { + "provider_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa399", + "plan_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398" + } + # Check that data is correct expected_data = [("1a2c0c3d-f402-4cd8-b5db-82e85cb51fad", "My scheduled operation", "protect", "23902b02-5666-4ee6-8dfe-962ac09c3995", - { - "provider_id": - "2a9ce1f3-cc1a-4516-9435-0ebb13caa399", # noqa - "plan_id": - "2a9ce1f3-cc1a-4516-9435-0ebb13caa398" - })] + json.dumps(operation_definition, + indent=2, sort_keys=True) + )] self.assertEqual(expected_data, data)