summaryrefslogtreecommitdiff
path: root/openstackclient/image/v2/image.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-01-28 05:43:09 +0000
committerGerrit Code Review <review@openstack.org>2015-01-28 05:43:09 +0000
commita4394ebb7ad42832d5c2e53c96b616c5fc357378 (patch)
tree5c368bb985ef6d94044d49803fe5b3689be4e07e /openstackclient/image/v2/image.py
parentc3aad41341ac2d5f22fa85655c42ea3a4adedd06 (diff)
parent61a40343fdbb89a1c6404ab03fcfd84daee31c9e (diff)
downloadpython-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.py81
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):