diff --git a/karborclient/tests/unit/v1/test_checkpoints.py b/karborclient/tests/unit/v1/test_checkpoints.py index 75e0b46..ef50bae 100644 --- a/karborclient/tests/unit/v1/test_checkpoints.py +++ b/karborclient/tests/unit/v1/test_checkpoints.py @@ -88,5 +88,5 @@ class CheckpointsTest(base.TestCaseShell): 'checkpoints'.format( provider_id=FAKE_PROVIDER_ID), data={ - 'checkpoint': {'plan_id': FAKE_PLAN_ID}}, + 'checkpoint': {'plan_id': FAKE_PLAN_ID, 'extra-info': None}}, headers={}) diff --git a/karborclient/v1/checkpoints.py b/karborclient/v1/checkpoints.py index fba8290..02f9aab 100644 --- a/karborclient/v1/checkpoints.py +++ b/karborclient/v1/checkpoints.py @@ -26,8 +26,9 @@ class Checkpoint(base.Resource): class CheckpointManager(base.ManagerWithFind): resource_class = Checkpoint - def create(self, provider_id, plan_id): - body = {'checkpoint': {'plan_id': plan_id}} + def create(self, provider_id, plan_id, checkpoint_extra_info=None): + body = {'checkpoint': {'plan_id': plan_id, + 'extra-info': checkpoint_extra_info}} url = "/providers/{provider_id}/" \ "checkpoints" .format(provider_id=provider_id) return self._create(url, body, 'checkpoint') diff --git a/karborclient/v1/shell.py b/karborclient/v1/shell.py index 0278b64..9942871 100644 --- a/karborclient/v1/shell.py +++ b/karborclient/v1/shell.py @@ -509,12 +509,37 @@ def do_provider_list(cs, args): @utils.arg('plan_id', metavar='', help='ID of plan.') +@utils.arg('--extra_info', + type=str, + nargs='*', + metavar='', + default=None, + help='The extra info of a checkpoint.') def do_checkpoint_create(cs, args): """Create a checkpoint.""" - checkpoint = cs.checkpoints.create(args.provider_id, args.plan_id) + + checkpoint_extra_info = None + if args.extra_info is not None: + checkpoint_extra_info = _extract_extra_info(args) + checkpoint = cs.checkpoints.create(args.provider_id, args.plan_id, + checkpoint_extra_info) utils.print_dict(checkpoint.to_dict()) +def _extract_extra_info(args): + checkpoint_extra_info = {} + for data in args.extra_info: + # unset doesn't require a val, so we have the if/else + if '=' in data: + (key, value) = data.split('=', 1) + else: + key = data + value = None + + checkpoint_extra_info[key] = value + return checkpoint_extra_info + + @utils.arg('provider_id', metavar='', help='ID of provider.') @@ -569,7 +594,7 @@ def do_checkpoint_list(cs, args): marker=args.marker, limit=args.limit, sort_key=args.sort_key, sort_dir=args.sort_dir, sort=args.sort) - key_list = ['Id', 'Project id', 'Status', 'Protection plan'] + key_list = ['Id', 'Project id', 'Status', 'Protection plan', 'Metadata'] if args.sort_key or args.sort_dir or args.sort: sortby_index = None