diff options
| author | Jenkins <jenkins@review.openstack.org> | 2015-01-28 05:43:09 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2015-01-28 05:43:09 +0000 |
| commit | a4394ebb7ad42832d5c2e53c96b616c5fc357378 (patch) | |
| tree | 5c368bb985ef6d94044d49803fe5b3689be4e07e /openstackclient/image/v2/image.py | |
| parent | c3aad41341ac2d5f22fa85655c42ea3a4adedd06 (diff) | |
| parent | 61a40343fdbb89a1c6404ab03fcfd84daee31c9e (diff) | |
| download | python-openstackclient-a4394ebb7ad42832d5c2e53c96b616c5fc357378.tar.gz | |
Merge "Add filter to image list"
Diffstat (limited to 'openstackclient/image/v2/image.py')
| -rw-r--r-- | openstackclient/image/v2/image.py | 81 |
1 files changed, 70 insertions, 11 deletions
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py index 2e0fd393..4eda506c 100644 --- a/openstackclient/image/v2/image.py +++ b/openstackclient/image/v2/image.py @@ -15,6 +15,7 @@ """Image V2 Action Implementations""" +import argparse import logging import six @@ -23,6 +24,8 @@ from cliff import lister from cliff import show from glanceclient.common import utils as gc_utils +from openstackclient.api import utils as api_utils +from openstackclient.common import parseractions from openstackclient.common import utils @@ -60,11 +63,6 @@ class ListImage(lister.Lister): def get_parser(self, prog_name): parser = super(ListImage, self).get_parser(prog_name) - parser.add_argument( - "--page-size", - metavar="<size>", - help="Number of images to request in each paginated request", - ) public_group = parser.add_mutually_exclusive_group() public_group.add_argument( "--public", @@ -80,12 +78,33 @@ class ListImage(lister.Lister): default=False, help="List only private images", ) + public_group.add_argument( + "--shared", + dest="shared", + action="store_true", + default=False, + help="List only shared images", + ) + parser.add_argument( + '--property', + metavar='<key=value>', + action=parseractions.KeyValueAction, + help='Filter output based on property', + ) parser.add_argument( '--long', action='store_true', default=False, help='List additional fields in output', ) + + # --page-size has never worked, leave here for silent compatability + # We'll implement limit/marker differently later + parser.add_argument( + "--page-size", + metavar="<size>", + help=argparse.SUPPRESS, + ) return parser def take_action(self, parsed_args): @@ -94,23 +113,63 @@ class ListImage(lister.Lister): image_client = self.app.client_manager.image kwargs = {} - if parsed_args.page_size is not None: - kwargs["page_size"] = parsed_args.page_size if parsed_args.public: kwargs['public'] = True if parsed_args.private: kwargs['private'] = True - kwargs['detailed'] = parsed_args.long + if parsed_args.shared: + kwargs['shared'] = True if parsed_args.long: - columns = ('ID', 'Name', 'Disk Format', 'Container Format', - 'Size', 'Status') + columns = ( + 'ID', + 'Name', + 'Disk Format', + 'Container Format', + 'Size', + 'Status', + 'visibility', + 'protected', + 'owner', + 'tags', + ) + column_headers = ( + 'ID', + 'Name', + 'Disk Format', + 'Container Format', + 'Size', + 'Status', + 'Visibility', + 'Protected', + 'Owner', + 'Tags', + ) else: columns = ("ID", "Name") + column_headers = columns data = image_client.api.image_list(**kwargs) - return (columns, (utils.get_dict_properties(s, columns) for s in data)) + if parsed_args.property: + # NOTE(dtroyer): coerce to a list to subscript it in py3 + attr, value = list(parsed_args.property.items())[0] + api_utils.simple_filter( + data, + attr=attr, + value=value, + property_field='properties', + ) + return ( + column_headers, + (utils.get_dict_properties( + s, + columns, + formatters={ + 'tags': utils.format_dict, + }, + ) for s in data) + ) class SaveImage(command.Command): |
