From 8c71a35eebb25a4930c7d0c2cc4cf0d57b1f6c72 Mon Sep 17 00:00:00 2001 From: Ankur Gupta Date: Wed, 12 Oct 2016 13:41:12 -0500 Subject: [PATCH] SDK Refactor: Prepare ip availability commands Prepared the OSC "ip availability" commands for the SDK refactor. See [1] for details. [1] https://etherpad.openstack.org/p/osc-network-command-sdk-support Change-Id: Ia22e9fafec0a91ba1b0f1ce825fcaf1d8cbbbf88 Partially-Implements: blueprint network-command-sdk-support --- openstackclient/network/v2/ip_availability.py | 18 ++++++++++-------- openstackclient/tests/unit/network/v2/fakes.py | 12 +++++++++--- .../unit/network/v2/test_ip_availability.py | 1 + 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/openstackclient/network/v2/ip_availability.py b/openstackclient/network/v2/ip_availability.py index 1d7b2aed87..839e1d0084 100644 --- a/openstackclient/network/v2/ip_availability.py +++ b/openstackclient/network/v2/ip_availability.py @@ -18,7 +18,7 @@ from osc_lib import utils from openstackclient.i18n import _ from openstackclient.identity import common as identity_common - +from openstackclient.network import sdk_utils _formatters = { 'subnet_ip_availability': utils.format_list_of_dicts, @@ -26,13 +26,14 @@ _formatters = { def _get_columns(item): - columns = list(item.keys()) - if 'tenant_id' in columns: - columns.remove('tenant_id') - columns.append('project_id') - return tuple(sorted(columns)) + column_map = { + 'tenant_id': 'project_id', + } + return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map) +# TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once +# the OSC minimum requirements include SDK 1.0. class ListIPAvailability(command.Lister): """List IP availability for network""" @@ -84,6 +85,7 @@ class ListIPAvailability(command.Lister): parsed_args.project_domain, ).id filters['tenant_id'] = project_id + filters['project_id'] = project_id data = client.network_ip_availabilities(**filters) return (column_headers, (utils.get_item_properties( @@ -107,6 +109,6 @@ class ShowIPAvailability(command.ShowOne): client = self.app.client_manager.network obj = client.find_network_ip_availability(parsed_args.network, ignore_missing=False) - columns = _get_columns(obj) + display_columns, columns = _get_columns(obj) data = utils.get_item_properties(obj, columns, formatters=_formatters) - return (columns, data) + return (display_columns, data) diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py index ed3579b724..527649b802 100644 --- a/openstackclient/tests/unit/network/v2/fakes.py +++ b/openstackclient/tests/unit/network/v2/fakes.py @@ -194,15 +194,18 @@ class FakeIPAvailability(object): """Fake one or more network ip availabilities.""" @staticmethod - def create_one_ip_availability(): + def create_one_ip_availability(attrs=None): """Create a fake list with ip availability stats of a network. + :param Dictionary attrs: + A dictionary with all attributes :return: A FakeResource object with network_name, network_id, etc. """ + attrs = attrs or {} # Set default attributes. - network_ip_availability = { + network_ip_attrs = { 'network_id': 'network-id-' + uuid.uuid4().hex, 'network_name': 'network-name-' + uuid.uuid4().hex, 'tenant_id': '', @@ -210,10 +213,13 @@ class FakeIPAvailability(object): 'total_ips': 254, 'used_ips': 6, } + network_ip_attrs.update(attrs) network_ip_availability = fakes.FakeResource( - info=copy.deepcopy(network_ip_availability), + info=copy.deepcopy(network_ip_attrs), loaded=True) + network_ip_availability.project_id = network_ip_attrs['tenant_id'] + return network_ip_availability @staticmethod diff --git a/openstackclient/tests/unit/network/v2/test_ip_availability.py b/openstackclient/tests/unit/network/v2/test_ip_availability.py index c929ab82c8..4bdbddc47f 100644 --- a/openstackclient/tests/unit/network/v2/test_ip_availability.py +++ b/openstackclient/tests/unit/network/v2/test_ip_availability.py @@ -107,6 +107,7 @@ class TestListIPAvailability(TestIPAvailability): columns, data = self.cmd.take_action(parsed_args) filters = {'tenant_id': self.project.id, + 'project_id': self.project.id, 'ip_version': 4} self.network.network_ip_availabilities.assert_called_once_with(