summaryrefslogtreecommitdiff
path: root/openstackclient/network
diff options
context:
space:
mode:
authorAkihiro Motoki <amotoki@gmail.com>2017-05-03 14:19:27 +0000
committerAkihiro Motoki <amotoki@gmail.com>2017-08-16 15:41:31 +0000
commit07f5498842834823ec911811e6e9c8ba9ff4ac9b (patch)
tree2c2624b628fd48d454997ea6b2e323a5cbcdd9ee /openstackclient/network
parentbcf2abe08a08138f0099ecaa19fe57ca5cc93bc1 (diff)
downloadpython-openstackclient-07f5498842834823ec911811e6e9c8ba9ff4ac9b.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: If478fccd867a4bcd7c86e283c5aaf67a667cc080
Diffstat (limited to 'openstackclient/network')
-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.py45
-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, 109 insertions, 73 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 4c1725c5..742a0c5d 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 ed4970a4..5175002f 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 9536fe86..ce35cd1a 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
@@ -32,23 +34,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 4f908537..fb0de4d2 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_external_gateway_info(info):
- try:
- return json.dumps(info)
- except (TypeError, KeyError):
- return ''
+class ExternalGatewayInfoColumn(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_external_gateway_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': ExternalGatewayInfoColumn,
+ 'availability_zones': format_columns.ListColumn,
+ 'availability_zone_hints': format_columns.ListColumn,
+ 'routes': RoutesColumn,
+ 'tags': format_columns.ListColumn,
}
diff --git a/openstackclient/network/v2/security_group.py b/openstackclient/network/v2/security_group.py
index 75af3587..6be2d229 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 import utils
import six
@@ -63,13 +64,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 b96dff7f..3470d24e 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 a5839868..bd19ebce 100644
--- a/openstackclient/network/v2/subnet_pool.py
+++ b/openstackclient/network/v2/subnet_pool.py
@@ -16,6 +16,7 @@
import copy
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
@@ -42,8 +43,8 @@ def _get_columns(item):
_formatters = {
- 'prefixes': utils.format_list,
- 'tags': utils.format_list,
+ 'prefixes': format_columns.ListColumn,
+ 'tags': format_columns.ListColumn,
}