@@ -51,17 +51,17 @@ def _format_network_port_range(rule):
5151 # - Single port: '80:80'
5252 # - No port range: ''
5353 port_range = ''
54- if _is_icmp_protocol (rule . protocol ):
55- if rule . port_range_min :
56- port_range += 'type=' + str (rule . port_range_min )
57- if rule . port_range_max :
58- port_range += ':code=' + str (rule . port_range_max )
59- elif rule . port_range_min or rule . port_range_max :
60- port_range_min = str (rule . port_range_min )
61- port_range_max = str (rule . port_range_max )
62- if rule . port_range_min is None :
54+ if _is_icmp_protocol (rule [ ' protocol' ] ):
55+ if rule [ ' port_range_min' ] :
56+ port_range += 'type=' + str (rule [ ' port_range_min' ] )
57+ if rule [ ' port_range_max' ] :
58+ port_range += ':code=' + str (rule [ ' port_range_max' ] )
59+ elif rule [ ' port_range_min' ] or rule [ ' port_range_max' ] :
60+ port_range_min = str (rule [ ' port_range_min' ] )
61+ port_range_max = str (rule [ ' port_range_max' ] )
62+ if rule [ ' port_range_min' ] is None :
6363 port_range_min = port_range_max
64- if rule . port_range_max is None :
64+ if rule [ ' port_range_max' ] is None :
6565 port_range_max = port_range_min
6666 port_range = port_range_min + ':' + port_range_max
6767 return port_range
@@ -423,6 +423,16 @@ def take_action_compute(self, client, parsed_args):
423423class ListSecurityGroupRule (common .NetworkAndComputeLister ):
424424 _description = _ ("List security group rules" )
425425
426+ def _format_network_security_group_rule (self , rule ):
427+ """Transform the SDK SecurityGroupRule object to a dict
428+
429+ The SDK object gets in the way of reformatting columns...
430+ Create port_range column from port_range_min and port_range_max
431+ """
432+ rule = rule .to_dict ()
433+ rule ['port_range' ] = _format_network_port_range (rule )
434+ return rule
435+
426436 def update_parser_common (self , parser ):
427437 parser .add_argument (
428438 'group' ,
@@ -508,7 +518,7 @@ def take_action_network(self, client, parsed_args):
508518 'id' ,
509519 'protocol' ,
510520 'remote_ip_prefix' ,
511- 'port_range_min ' ,
521+ 'port_range ' ,
512522 )
513523 if parsed_args .long :
514524 columns = columns + ('direction' , 'ethertype' ,)
@@ -535,16 +545,13 @@ def take_action_network(self, client, parsed_args):
535545 if parsed_args .protocol is not None :
536546 query ['protocol' ] = parsed_args .protocol
537547
538- rules = list (client .security_group_rules (** query ))
539-
540- # Reformat the rules to display a port range instead
541- # of just the port range minimum. This maintains
542- # output compatibility with compute.
543- for rule in rules :
544- rule .port_range_min = _format_network_port_range (rule )
548+ rules = [
549+ self ._format_network_security_group_rule (r )
550+ for r in client .security_group_rules (** query )
551+ ]
545552
546553 return (column_headers ,
547- (utils .get_item_properties (
554+ (utils .get_dict_properties (
548555 s , columns ,
549556 ) for s in rules ))
550557
0 commit comments