1515
1616"""Image V1 Action Implementations"""
1717
18+ import argparse
1819import io
1920import logging
2021import os
3132from cliff import show
3233
3334from glanceclient .common import utils as gc_utils
35+ from openstackclient .api import utils as api_utils
3436from openstackclient .common import exceptions
3537from openstackclient .common import parseractions
3638from openstackclient .common import utils
4042DEFAULT_DISK_FORMAT = 'raw'
4143
4244
45+ def _format_visibility (data ):
46+ """Return a formatted visibility string
47+
48+ :param data:
49+ The server's visibility (is_public) status value: True, False
50+ :rtype:
51+ A string formatted to public/private
52+ """
53+
54+ if data :
55+ return 'public'
56+ else :
57+ return 'private'
58+
59+
4360class CreateImage (show .ShowOne ):
4461 """Create/upload an image"""
4562
@@ -295,11 +312,6 @@ class ListImage(lister.Lister):
295312
296313 def get_parser (self , prog_name ):
297314 parser = super (ListImage , self ).get_parser (prog_name )
298- parser .add_argument (
299- "--page-size" ,
300- metavar = "<size>" ,
301- help = "Number of images to request in each paginated request" ,
302- )
303315 public_group = parser .add_mutually_exclusive_group ()
304316 public_group .add_argument (
305317 "--public" ,
@@ -315,12 +327,34 @@ def get_parser(self, prog_name):
315327 default = False ,
316328 help = "List only private images" ,
317329 )
330+ # Included for silent CLI compatibility with v2
331+ public_group .add_argument (
332+ "--shared" ,
333+ dest = "shared" ,
334+ action = "store_true" ,
335+ default = False ,
336+ help = argparse .SUPPRESS ,
337+ )
338+ parser .add_argument (
339+ '--property' ,
340+ metavar = '<key=value>' ,
341+ action = parseractions .KeyValueAction ,
342+ help = 'Filter output based on property' ,
343+ )
318344 parser .add_argument (
319345 '--long' ,
320346 action = 'store_true' ,
321347 default = False ,
322348 help = 'List additional fields in output' ,
323349 )
350+
351+ # --page-size has never worked, leave here for silent compatability
352+ # We'll implement limit/marker differently later
353+ parser .add_argument (
354+ "--page-size" ,
355+ metavar = "<size>" ,
356+ help = argparse .SUPPRESS ,
357+ )
324358 return parser
325359
326360 def take_action (self , parsed_args ):
@@ -329,23 +363,63 @@ def take_action(self, parsed_args):
329363 image_client = self .app .client_manager .image
330364
331365 kwargs = {}
332- if parsed_args .page_size is not None :
333- kwargs ["page_size" ] = parsed_args .page_size
334366 if parsed_args .public :
335367 kwargs ['public' ] = True
336368 if parsed_args .private :
337369 kwargs ['private' ] = True
338- kwargs ['detailed' ] = parsed_args .long
370+ kwargs ['detailed' ] = bool ( parsed_args .property or parsed_args . long )
339371
340372 if parsed_args .long :
341- columns = ('ID' , 'Name' , 'Disk Format' , 'Container Format' ,
342- 'Size' , 'Status' )
373+ columns = (
374+ 'ID' ,
375+ 'Name' ,
376+ 'Disk Format' ,
377+ 'Container Format' ,
378+ 'Size' ,
379+ 'Status' ,
380+ 'is_public' ,
381+ 'protected' ,
382+ 'owner' ,
383+ 'properties' ,
384+ )
385+ column_headers = (
386+ 'ID' ,
387+ 'Name' ,
388+ 'Disk Format' ,
389+ 'Container Format' ,
390+ 'Size' ,
391+ 'Status' ,
392+ 'Visibility' ,
393+ 'Protected' ,
394+ 'Owner' ,
395+ 'Properties' ,
396+ )
343397 else :
344398 columns = ("ID" , "Name" )
399+ column_headers = columns
345400
346401 data = image_client .api .image_list (** kwargs )
347402
348- return (columns , (utils .get_dict_properties (s , columns ) for s in data ))
403+ if parsed_args .property :
404+ # NOTE(dtroyer): coerce to a list to subscript it in py3
405+ attr , value = list (parsed_args .property .items ())[0 ]
406+ api_utils .simple_filter (
407+ data ,
408+ attr = attr ,
409+ value = value ,
410+ property_field = 'properties' ,
411+ )
412+ return (
413+ column_headers ,
414+ (utils .get_dict_properties (
415+ s ,
416+ columns ,
417+ formatters = {
418+ 'is_public' : _format_visibility ,
419+ 'properties' : utils .format_dict ,
420+ },
421+ ) for s in data )
422+ )
349423
350424
351425class SaveImage (command .Command ):
0 commit comments