diff options
| author | Jenkins <jenkins@review.openstack.org> | 2014-10-16 03:37:48 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2014-10-16 03:37:48 +0000 |
| commit | cfe06235207d50d6d36b3d8b3e87608412038c80 (patch) | |
| tree | ae2fbeb2f5353d595360a3996637f3bf12de7574 /glanceclient/v2/shell.py | |
| parent | 1781c5d9ae1f4a0c60f70a72f5139eb2eebbce0d (diff) | |
| parent | 7ef1b7c9b1c087c9786b5b37aa386098e81f048d (diff) | |
| download | python-glanceclient-cfe06235207d50d6d36b3d8b3e87608412038c80.tar.gz | |
Merge "Adds support for Glance Tasks calls"
Diffstat (limited to 'glanceclient/v2/shell.py')
| -rw-r--r-- | glanceclient/v2/shell.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/glanceclient/v2/shell.py b/glanceclient/v2/shell.py index bc862c2..7f56609 100644 --- a/glanceclient/v2/shell.py +++ b/glanceclient/v2/shell.py @@ -16,6 +16,7 @@ from glanceclient.common import progressbar from glanceclient.common import utils from glanceclient import exc +from glanceclient.v2 import tasks import json import os from os.path import expanduser @@ -689,3 +690,67 @@ def do_md_object_list(gc, args): } } utils.print_list(objects, columns, field_settings=column_settings) + + +@utils.arg('--sort-key', default='status', + choices=tasks.SORT_KEY_VALUES, + help='Sort task list by specified field.') +@utils.arg('--sort-dir', default='desc', + choices=tasks.SORT_DIR_VALUES, + help='Sort task list in specified direction.') +@utils.arg('--page-size', metavar='<SIZE>', default=None, type=int, + help='Number of tasks to request in each paginated request.') +@utils.arg('--type', metavar='<TYPE>', + help='Filter tasks to those that have this type.') +@utils.arg('--status', metavar='<STATUS>', + help='Filter tasks to those that have this status.') +def do_task_list(gc, args): + """List tasks you can access.""" + filter_keys = ['type', 'status'] + filter_items = [(key, getattr(args, key)) for key in filter_keys] + filters = dict([item for item in filter_items if item[1] is not None]) + + kwargs = {'filters': filters} + if args.page_size is not None: + kwargs['page_size'] = args.page_size + + kwargs['sort_key'] = args.sort_key + kwargs['sort_dir'] = args.sort_dir + + tasks = gc.tasks.list(**kwargs) + + columns = ['ID', 'Type', 'Status', 'Owner'] + utils.print_list(tasks, columns) + + +@utils.arg('id', metavar='<TASK_ID>', help='ID of task to describe.') +def do_task_show(gc, args): + """Describe a specific task.""" + task = gc.tasks.get(args.id) + ignore = ['self', 'schema'] + task = dict([item for item in task.iteritems() if item[0] not in ignore]) + utils.print_dict(task) + + +@utils.arg('--type', metavar='<TYPE>', + help='Type of Task. Please refer to Glance schema or documentation' + ' to see which tasks are supported.') +@utils.arg('--input', metavar='<STRING>', default='{}', + help='Parameters of the task to be launched') +def do_task_create(gc, args): + """Create a new task.""" + if not (args.type and args.input): + utils.exit('Unable to create task. Specify task type and input.') + else: + try: + input = json.loads(args.input) + except ValueError: + utils.exit('Failed to parse the "input" parameter. Must be a ' + 'valid JSON object.') + + task_values = {'type': args.type, 'input': input} + task = gc.tasks.create(**task_values) + ignore = ['self', 'schema'] + task = dict([item for item in task.iteritems() + if item[0] not in ignore]) + utils.print_dict(task) |
