diff --git a/karborclient/osc/v1/restores.py b/karborclient/osc/v1/restores.py index b99912e..265e18c 100644 --- a/karborclient/osc/v1/restores.py +++ b/karborclient/osc/v1/restores.py @@ -12,6 +12,9 @@ """Data protection V1 restore action implementations""" +import functools +import json + from oslo_utils import uuidutils from osc_lib.command import command @@ -23,6 +26,16 @@ from karborclient.i18n import _ from karborclient import utils +def format_restore(restore_info): + for key in ('parameters', 'resources_status', + 'resources_reason'): + if key not in restore_info: + continue + restore_info[key] = json.dumps(restore_info[key], + indent=2, sort_keys=True) + restore_info.pop("links", None) + + class ListRestores(command.Lister): _description = _("List restores.") @@ -85,9 +98,13 @@ class ListRestores(command.Lister): column_headers = ['Id', 'Project id', 'Provider id', 'Checkpoint id', 'Restore target', 'Parameters', 'Status'] + json_dumps = functools.partial(json.dumps, indent=2, sort_keys=True) + formatters = { + "Parameters": json_dumps, + } return (column_headers, (osc_utils.get_item_properties( - s, column_headers + s, column_headers, formatters=formatters, ) for s in data)) @@ -107,7 +124,7 @@ class ShowRestore(command.ShowOne): client = self.app.client_manager.data_protection restore = osc_utils.find_resource(client.restores, parsed_args.restore) - restore._info.pop("links", None) + format_restore(restore._info) return zip(*sorted(restore._info.items())) @@ -191,5 +208,5 @@ class CreateRestore(command.ShowOne): parsed_args.checkpoint_id, parsed_args.restore_target, restore_parameters, restore_auth) - restore._info.pop("links", None) + format_restore(restore._info) return zip(*sorted(restore._info.items())) diff --git a/karborclient/tests/unit/osc/v1/test_restores.py b/karborclient/tests/unit/osc/v1/test_restores.py index d5c0e8c..0c6d92e 100644 --- a/karborclient/tests/unit/osc/v1/test_restores.py +++ b/karborclient/tests/unit/osc/v1/test_restores.py @@ -12,6 +12,7 @@ # limitations under the License. import copy +import json from karborclient.osc.v1 import restores as osc_restores from karborclient.tests.unit.osc.v1 import fakes @@ -68,7 +69,7 @@ class TestListRestores(TestRestores): "cf56bd3e-97a7-4078-b6d5-f36246333fd9", "dcb20606-ad71-40a3-80e4-ef0fafdad0c3", "", - {}, + json.dumps({}), "success")] self.assertEqual(expected_data, list(data))