summaryrefslogtreecommitdiff
path: root/openstackclient/network/v2
diff options
context:
space:
mode:
authorAkihiro Motoki <amotoki@gmail.com>2017-05-03 14:19:27 +0000
committerDean Troyer <dtroyer@gmail.com>2019-05-09 21:51:57 -0500
commitc44f26eb7e41c28bb13ef9bd31c8ddda9e638862 (patch)
tree062fc4fea3e465ac7da63516ee77489e1acbc45a /openstackclient/network/v2
parent6385d64237c9973dd4c7dd53efb6664ea2c719da (diff)
downloadpython-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.py3
-rw-r--r--openstackclient/network/v2/network.py30
-rw-r--r--openstackclient/network/v2/network_agent.py23
-rw-r--r--openstackclient/network/v2/port.py31
-rw-r--r--openstackclient/network/v2/router.py47
-rw-r--r--openstackclient/network/v2/security_group.py15
-rw-r--r--openstackclient/network/v2/subnet.py30
-rw-r--r--openstackclient/network/v2/subnet_pool.py5
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,
}