From d624bb8fcdbf0352e842a7e2df7f9923f02d138b Mon Sep 17 00:00:00 2001 From: rajat29 Date: Mon, 9 Apr 2018 01:33:35 +0530 Subject: [PATCH] Introduce filters on listing containers This PS add supports the following filters which are supported by server side: ['name', 'image', 'project_id', 'user_id', 'memory', 'host', 'task_state', 'status', 'auto_remove'] Closes-Bug:#1757152 Change-Id: I7983954c1bec56275f55e44e62930b79e8b695a1 --- zunclient/osc/v1/containers.py | 45 ++++++++++++++++++++++++++++++++ zunclient/v1/containers.py | 5 ++-- zunclient/v1/containers_shell.py | 37 ++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/zunclient/osc/v1/containers.py b/zunclient/osc/v1/containers.py index c4937320..dfad89a2 100644 --- a/zunclient/osc/v1/containers.py +++ b/zunclient/osc/v1/containers.py @@ -264,6 +264,42 @@ class ListContainer(command.Lister): metavar='', choices=['desc', 'asc'], help='Direction to sort. "asc" or "desc".') + parser.add_argument( + '--name', + metavar='', + help='List containers according to their name.') + parser.add_argument( + '--image', + metavar='', + help='List containers according to their image.') + parser.add_argument( + '--project-id', + metavar='', + help='List containers according to their project_id') + parser.add_argument( + '--user-id', + metavar='', + help='List containers according to their user_id') + parser.add_argument( + '--task-state', + metavar='', + help='List containers according to their task-state') + parser.add_argument( + '--status', + metavar='', + help='List containers according to their Status') + parser.add_argument( + '--memory', + metavar='', + help='List containers according to their memory size in MiB') + parser.add_argument( + '--host', + metavar='', + help='List containers according to their hostname') + parser.add_argument( + '--auto-remove', + metavar='', + help='List conatiner whether they are auto-removed on existing') return parser def take_action(self, parsed_args): @@ -274,6 +310,15 @@ class ListContainer(command.Lister): opts['limit'] = parsed_args.limit opts['sort_key'] = parsed_args.sort_key opts['sort_dir'] = parsed_args.sort_dir + opts['image'] = parsed_args.image + opts['name'] = parsed_args.name + opts['project_id'] = parsed_args.project_id + opts['user_id'] = parsed_args.user_id + opts['host'] = parsed_args.host + opts['task_state'] = parsed_args.task_state + opts['memory'] = parsed_args.memory + opts['auto_remove'] = parsed_args.auto_remove + opts['status'] = parsed_args.status opts = zun_utils.remove_null_parms(**opts) containers = client.containers.list(**opts) for c in containers: diff --git a/zunclient/v1/containers.py b/zunclient/v1/containers.py index 21d67053..a1856913 100644 --- a/zunclient/v1/containers.py +++ b/zunclient/v1/containers.py @@ -43,7 +43,7 @@ class ContainerManager(base.Manager): return '/v1/containers' def list(self, marker=None, limit=None, sort_key=None, - sort_dir=None, detail=False, all_projects=False): + sort_dir=None, detail=False, all_projects=False, **kwargs): """Retrieve a list of containers. :param all_projects: Optional, list containers in all projects @@ -76,7 +76,6 @@ class ContainerManager(base.Manager): filters = utils.common_filters(marker, limit, sort_key, sort_dir, all_projects) - path = '' if detail: path += 'detail' @@ -85,7 +84,7 @@ class ContainerManager(base.Manager): if limit is None: return self._list(self._path(path), - "containers") + "containers", qparams=kwargs) else: return self._list_pagination(self._path(path), "containers", diff --git a/zunclient/v1/containers_shell.py b/zunclient/v1/containers_shell.py index afe399ad..c3b3330c 100644 --- a/zunclient/v1/containers_shell.py +++ b/zunclient/v1/containers_shell.py @@ -183,6 +183,34 @@ def do_create(cs, args): metavar='', choices=['desc', 'asc'], help='Direction to sort. "asc" or "desc".') +@utils.arg('--name', + metavar='', + help='List containers according to their name.') +@utils.arg('--image', + metavar='', + help='List containers according to their image.') +@utils.arg('--project-id', + metavar='', + help='List containers according to their Project_id') +@utils.arg('--user-id', + metavar='', + help='List containers according to their user_id') +@utils.arg('--task-state', + metavar='', + help='List containers according to their task-state') +@utils.arg('--status', + metavar='', + help='List containers according to their status') +@utils.arg('--memory', + metavar='', + help='List containers according to their memory size in MiB') +@utils.arg('--host', + metavar='', + help='List containers according to their hostname') +@utils.arg('--auto-remove', + metavar='', + help='List container according to whether they are' + 'auto-removed on existing') def do_list(cs, args): """Print a list of available containers.""" opts = {} @@ -191,6 +219,15 @@ def do_list(cs, args): opts['limit'] = args.limit opts['sort_key'] = args.sort_key opts['sort_dir'] = args.sort_dir + opts['image'] = args.image + opts['name'] = args.name + opts['project_id'] = args.project_id + opts['user_id'] = args.user_id + opts['host'] = args.host + opts['task_state'] = args.task_state + opts['memory'] = args.memory + opts['auto_remove'] = args.auto_remove + opts['status'] = args.status opts = zun_utils.remove_null_parms(**opts) containers = cs.containers.list(**opts) zun_utils.list_containers(containers)