diff options
| author | Akihiro Motoki <amotoki@gmail.com> | 2017-05-03 14:19:27 +0000 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2019-05-09 21:51:57 -0500 |
| commit | c44f26eb7e41c28bb13ef9bd31c8ddda9e638862 (patch) | |
| tree | 062fc4fea3e465ac7da63516ee77489e1acbc45a /openstackclient/network/v2 | |
| parent | 6385d64237c9973dd4c7dd53efb6664ea2c719da (diff) | |
| download | python-openstackclient-c44f26eb7e41c28bb13ef9bd31c8ddda9e638862.tar.gz | |
Use cliff formattable columns in network commands
Use cliff formattable columns not to convert complex fields
into a string when a machine readable format like JSON or YAML
is requested.
Partial-Bug: #1687955
Partially implement blueprint osc-formattable-columns
Change-Id: I9878f327e39f56852cc0fb6e4eee9105b7141da9
Diffstat (limited to 'openstackclient/network/v2')
| -rw-r--r-- | openstackclient/network/v2/ip_availability.py | 3 | ||||
| -rw-r--r-- | openstackclient/network/v2/network.py | 30 | ||||
| -rw-r--r-- | openstackclient/network/v2/network_agent.py | 23 | ||||
| -rw-r--r-- | openstackclient/network/v2/port.py | 31 | ||||
| -rw-r--r-- | openstackclient/network/v2/router.py | 47 | ||||
| -rw-r--r-- | openstackclient/network/v2/security_group.py | 15 | ||||
| -rw-r--r-- | openstackclient/network/v2/subnet.py | 30 | ||||
| -rw-r--r-- | openstackclient/network/v2/subnet_pool.py | 5 |
8 files changed, 110 insertions, 74 deletions
diff --git a/openstackclient/network/v2/ip_availability.py b/openstackclient/network/v2/ip_availability.py index 1d963580..ddc88e55 100644 --- a/openstackclient/network/v2/ip_availability.py +++ b/openstackclient/network/v2/ip_availability.py @@ -13,6 +13,7 @@ """IP Availability Info implementations""" +from osc_lib.cli import format_columns from osc_lib.command import command from osc_lib import utils @@ -21,7 +22,7 @@ from openstackclient.identity import common as identity_common from openstackclient.network import sdk_utils _formatters = { - 'subnet_ip_availability': utils.format_list_of_dicts, + 'subnet_ip_availability': format_columns.ListDictColumn, } diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index f5123932..63aec714 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -13,6 +13,8 @@ """Network action implementations""" +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.command import command from osc_lib import utils @@ -23,24 +25,26 @@ from openstackclient.network import sdk_utils from openstackclient.network.v2 import _tag -def _format_admin_state(item): - return 'UP' if item else 'DOWN' +class AdminStateColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return 'UP' if self._value else 'DOWN' -def _format_router_external(item): - return 'External' if item else 'Internal' +class RouterExternalColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return 'External' if self._value else 'Internal' _formatters = { - 'subnets': utils.format_list, - 'subnet_ids': utils.format_list, - 'admin_state_up': _format_admin_state, - 'is_admin_state_up': _format_admin_state, - 'router:external': _format_router_external, - 'is_router_external': _format_router_external, - 'availability_zones': utils.format_list, - 'availability_zone_hints': utils.format_list, - 'tags': utils.format_list, + 'subnets': format_columns.ListColumn, + 'subnet_ids': format_columns.ListColumn, + 'admin_state_up': AdminStateColumn, + 'is_admin_state_up': AdminStateColumn, + 'router:external': RouterExternalColumn, + 'is_router_external': RouterExternalColumn, + 'availability_zones': format_columns.ListColumn, + 'availability_zone_hints': format_columns.ListColumn, + 'tags': format_columns.ListColumn, } diff --git a/openstackclient/network/v2/network_agent.py b/openstackclient/network/v2/network_agent.py index 46e8d4b2..16784854 100644 --- a/openstackclient/network/v2/network_agent.py +++ b/openstackclient/network/v2/network_agent.py @@ -15,6 +15,8 @@ import logging +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.command import command from osc_lib import exceptions from osc_lib import utils @@ -26,19 +28,22 @@ from openstackclient.network import sdk_utils LOG = logging.getLogger(__name__) -def _format_alive(alive): - return ":-)" if alive else "XXX" +class AliveColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return ":-)" if self._value else "XXX" -def _format_admin_state(state): - return 'UP' if state else 'DOWN' +class AdminStateColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return 'UP' if self._value else 'DOWN' + _formatters = { - 'is_alive': _format_alive, - 'alive': _format_alive, - 'admin_state_up': _format_admin_state, - 'is_admin_state_up': _format_admin_state, - 'configurations': utils.format_dict, + 'is_alive': AliveColumn, + 'alive': AliveColumn, + 'admin_state_up': AdminStateColumn, + 'is_admin_state_up': AdminStateColumn, + 'configurations': format_columns.DictColumn, } diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py index f6d6fc72..6094dfc4 100644 --- a/openstackclient/network/v2/port.py +++ b/openstackclient/network/v2/port.py @@ -18,6 +18,8 @@ import copy import json import logging +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -33,23 +35,24 @@ from openstackclient.network.v2 import _tag LOG = logging.getLogger(__name__) -def _format_admin_state(state): - return 'UP' if state else 'DOWN' +class AdminStateColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return 'UP' if self._value else 'DOWN' _formatters = { - 'admin_state_up': _format_admin_state, - 'is_admin_state_up': _format_admin_state, - 'allowed_address_pairs': utils.format_list_of_dicts, - 'binding_profile': utils.format_dict, - 'binding_vif_details': utils.format_dict, - 'binding:profile': utils.format_dict, - 'binding:vif_details': utils.format_dict, - 'dns_assignment': utils.format_list_of_dicts, - 'extra_dhcp_opts': utils.format_list_of_dicts, - 'fixed_ips': utils.format_list_of_dicts, - 'security_group_ids': utils.format_list, - 'tags': utils.format_list, + 'admin_state_up': AdminStateColumn, + 'is_admin_state_up': AdminStateColumn, + 'allowed_address_pairs': format_columns.ListDictColumn, + 'binding_profile': format_columns.DictColumn, + 'binding_vif_details': format_columns.DictColumn, + 'binding:profile': format_columns.DictColumn, + 'binding:vif_details': format_columns.DictColumn, + 'dns_assignment': format_columns.ListDictColumn, + 'extra_dhcp_opts': format_columns.ListDictColumn, + 'fixed_ips': format_columns.ListDictColumn, + 'security_group_ids': format_columns.ListColumn, + 'tags': format_columns.ListColumn, } diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py index 2ec3e2f0..fd6a24fd 100644 --- a/openstackclient/network/v2/router.py +++ b/openstackclient/network/v2/router.py @@ -18,6 +18,8 @@ import copy import json import logging +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -32,33 +34,36 @@ from openstackclient.network.v2 import _tag LOG = logging.getLogger(__name__) -def _format_admin_state(state): - return 'UP' if state else 'DOWN' +class AdminStateColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return 'UP' if self._value else 'DOWN' -def _format_router_info(info): - try: - return json.dumps(info) - except (TypeError, KeyError): - return '' +class RouterInfoColumn(cliff_columns.FormattableColumn): + def human_readable(self): + try: + return json.dumps(self._value) + except (TypeError, KeyError): + return '' -def _format_routes(routes): - # Map the route keys to match --route option. - for route in routes: - if 'nexthop' in route: - route['gateway'] = route.pop('nexthop') - return utils.format_list_of_dicts(routes) +class RoutesColumn(cliff_columns.FormattableColumn): + def human_readable(self): + # Map the route keys to match --route option. + for route in self._value: + if 'nexthop' in route: + route['gateway'] = route.pop('nexthop') + return utils.format_list_of_dicts(self._value) _formatters = { - 'admin_state_up': _format_admin_state, - 'is_admin_state_up': _format_admin_state, - 'external_gateway_info': _format_router_info, - 'availability_zones': utils.format_list, - 'availability_zone_hints': utils.format_list, - 'routes': _format_routes, - 'tags': utils.format_list, + 'admin_state_up': AdminStateColumn, + 'is_admin_state_up': AdminStateColumn, + 'external_gateway_info': RouterInfoColumn, + 'availability_zones': format_columns.ListColumn, + 'availability_zone_hints': format_columns.ListColumn, + 'routes': RoutesColumn, + 'tags': format_columns.ListColumn, } @@ -720,7 +725,7 @@ class ShowRouter(command.ShowOne): setattr(obj, 'interfaces_info', interfaces_info) display_columns, columns = _get_columns(obj) - _formatters['interfaces_info'] = _format_router_info + _formatters['interfaces_info'] = RouterInfoColumn data = utils.get_item_properties(obj, columns, formatters=_formatters) return (display_columns, data) diff --git a/openstackclient/network/v2/security_group.py b/openstackclient/network/v2/security_group.py index ed6c8d7c..e3894738 100644 --- a/openstackclient/network/v2/security_group.py +++ b/openstackclient/network/v2/security_group.py @@ -15,6 +15,7 @@ import argparse +from cliff import columns as cliff_columns from osc_lib.command import command from osc_lib import utils import six @@ -65,13 +66,23 @@ def _format_compute_security_group_rules(sg_rules): return utils.format_list(rules, separator='\n') +class NetworkSecurityGroupRulesColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return _format_network_security_group_rules(self._value) + + +class ComputeSecurityGroupRulesColumn(cliff_columns.FormattableColumn): + def human_readable(self): + return _format_compute_security_group_rules(self._value) + + _formatters_network = { - 'security_group_rules': _format_network_security_group_rules, + 'security_group_rules': NetworkSecurityGroupRulesColumn, } _formatters_compute = { - 'rules': _format_compute_security_group_rules, + 'rules': ComputeSecurityGroupRulesColumn, } diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py index 0733f37c..1f0c2d94 100644 --- a/openstackclient/network/v2/subnet.py +++ b/openstackclient/network/v2/subnet.py @@ -16,6 +16,8 @@ import copy import logging +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -40,23 +42,27 @@ def _update_arguments(obj_list, parsed_args_list, option): raise exceptions.CommandError(msg) -def _format_allocation_pools(data): - pool_formatted = ['%s-%s' % (pool.get('start', ''), pool.get('end', '')) - for pool in data] - return ','.join(pool_formatted) +class AllocationPoolsColumn(cliff_columns.FormattableColumn): + def human_readable(self): + pool_formatted = ['%s-%s' % (pool.get('start', ''), + pool.get('end', '')) + for pool in self._value] + return ','.join(pool_formatted) -def _format_host_routes(data): - # Map the host route keys to match --host-route option. - return utils.format_list_of_dicts(convert_entries_to_gateway(data)) +class HostRoutesColumn(cliff_columns.FormattableColumn): + def human_readable(self): + # Map the host route keys to match --host-route option. + return utils.format_list_of_dicts( + convert_entries_to_gateway(self._value)) _formatters = { - 'allocation_pools': _format_allocation_pools, - 'dns_nameservers': utils.format_list, - 'host_routes': _format_host_routes, - 'service_types': utils.format_list, - 'tags': utils.format_list, + 'allocation_pools': AllocationPoolsColumn, + 'dns_nameservers': format_columns.ListColumn, + 'host_routes': HostRoutesColumn, + 'service_types': format_columns.ListColumn, + 'tags': format_columns.ListColumn, } diff --git a/openstackclient/network/v2/subnet_pool.py b/openstackclient/network/v2/subnet_pool.py index ba0b6c45..7ece263a 100644 --- a/openstackclient/network/v2/subnet_pool.py +++ b/openstackclient/network/v2/subnet_pool.py @@ -15,6 +15,7 @@ import logging +from osc_lib.cli import format_columns from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -41,8 +42,8 @@ def _get_columns(item): _formatters = { - 'prefixes': utils.format_list, - 'tags': utils.format_list, + 'prefixes': format_columns.ListColumn, + 'tags': format_columns.ListColumn, } |
