diff options
Diffstat (limited to 'openstackclient/network')
| -rw-r--r-- | openstackclient/network/client.py | 37 | ||||
| -rw-r--r-- | openstackclient/network/v2/network.py | 98 |
2 files changed, 101 insertions, 34 deletions
diff --git a/openstackclient/network/client.py b/openstackclient/network/client.py index 858a5079..870566aa 100644 --- a/openstackclient/network/client.py +++ b/openstackclient/network/client.py @@ -24,21 +24,54 @@ API_NAME = "network" API_VERSIONS = { "2": "neutronclient.v2_0.client.Client", } +# Translate our API version to auth plugin version prefix +API_VERSION_MAP = { + '2.0': 'v2.0', + '2': 'v2.0', +} + +NETWORK_API_TYPE = 'network' +NETWORK_API_VERSIONS = { + '2': 'openstackclient.api.network_v2.APIv2', +} def make_client(instance): - """Returns an network service client.""" + """Returns an network service client""" network_client = utils.get_client_class( API_NAME, instance._api_version[API_NAME], API_VERSIONS) LOG.debug('Instantiating network client: %s', network_client) - return network_client( + endpoint = instance.get_endpoint_for_service_type( + API_NAME, + region_name=instance._region_name, + ) + + client = network_client( session=instance.session, region_name=instance._region_name, ) + network_api = utils.get_client_class( + API_NAME, + instance._api_version[API_NAME], + NETWORK_API_VERSIONS) + LOG.debug('Instantiating network api: %s', network_client) + + # v2 is hard-coded until discovery is completed, neutron only has one atm + client.api = network_api( + session=instance.session, + service_type=NETWORK_API_TYPE, + endpoint='/'.join([ + endpoint, + API_VERSION_MAP[instance._api_version[API_NAME]], + ]) + ) + + return client + def build_option_parser(parser): """Hook to add global options""" diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index c9265084..1a79c80a 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -25,10 +25,21 @@ from openstackclient.common import utils from openstackclient.network import common -def filters(data): - if 'subnets' in data: - data['subnets'] = utils.format_list(data['subnets']) - return data +def _prep_network_detail(net): + """Prepare network object for output""" + + if 'subnets' in net: + net['subnets'] = utils.format_list(net['subnets']) + if 'admin_state_up' in net: + net['state'] = 'UP' if net['admin_state_up'] else 'DOWN' + net.pop('admin_state_up') + if 'router:external' in net: + net['router_type'] = 'External' if net['router:external'] \ + else 'Internal' + net.pop('router:external') + if 'tenant_id' in net: + net['project_id'] = net.pop('tenant_id') + return net class CreateNetwork(show.ShowOne): @@ -80,7 +91,7 @@ class CreateNetwork(show.ShowOne): create_method = getattr(client, "create_network") data = create_method(body)['network'] if data: - data = filters(data) + data = _prep_network_detail(data) else: data = {'': ''} return zip(*sorted(six.iteritems(data))) @@ -133,40 +144,63 @@ class ListNetwork(lister.Lister): ) parser.add_argument( '--dhcp', - help='ID of the DHCP agent') + metavar='<dhcp-id>', + help='DHCP agent ID') parser.add_argument( '--long', action='store_true', default=False, - help='Long listing', + help='List additional fields in output', ) return parser def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) client = self.app.client_manager.network + if parsed_args.dhcp: - list_method = getattr(client, 'list_networks_on_dhcp_agent') - resources = 'networks_on_dhcp_agent' - report_filter = {'dhcp_agent': parsed_args.dhcp} - data = list_method(**report_filter)[resources] - else: - list_method = getattr(client, "list_networks") - report_filter = {} - if parsed_args.external: - report_filter = {'router:external': True} - data = list_method(**report_filter)['networks'] - columns = len(data) > 0 and sorted(data[0].keys()) or [] - if parsed_args.columns: - list_columns = parsed_args.columns + data = client.api.dhcp_agent_list(dhcp_id=parsed_args.dhcp) + + columns = ('ID',) + column_headers = columns else: - list_columns = ['id', 'name', 'subnets'] - if not parsed_args.long and not parsed_args.dhcp: - columns = [x for x in list_columns if x in columns] - formatters = {'subnets': utils.format_list} - return (columns, - (utils.get_dict_properties(s, columns, formatters=formatters) - for s in data)) + data = client.api.network_list(external=parsed_args.external) + + if parsed_args.long: + columns = ( + 'ID', + 'Name', + 'Status', + 'project_id', + 'state', + 'Shared', + 'Subnets', + 'provider:network_type', + 'router_type', + ) + column_headers = ( + 'ID', + 'Name', + 'Status', + 'Project', + 'State', + 'Shared', + 'Subnets', + 'Network Type', + 'Router Type', + ) + else: + columns = ('ID', 'Name', 'Subnets') + column_headers = columns + + for d in data: + d = _prep_network_detail(d) + + return (column_headers, + (utils.get_dict_properties( + s, columns, + formatters={'subnets': utils.format_list}, + ) for s in data)) class SetNetwork(command.Command): @@ -253,9 +287,9 @@ class ShowNetwork(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)' % parsed_args) client = self.app.client_manager.network - _id = common.find(client, 'network', 'networks', - parsed_args.identifier) - show_method = getattr(client, "show_network") - data = show_method(_id)['network'] - data = filters(data) + net = client.api.find_attr( + 'networks', + parsed_args.identifier, + ) + data = _prep_network_detail(net) return zip(*sorted(six.iteritems(data))) |
