From d8abec33ada8b2b028d52eb8bfad2640812b9af8 Mon Sep 17 00:00:00 2001 From: Tang Chen Date: Tue, 9 Feb 2016 14:23:28 +0800 Subject: [PATCH] Floating IP: Neutron support for "ip floating list" command Change-Id: I253f66f6bc64470e1a18ffea506048eb53f67d5c partial-Bug: 1519502 Related-to: blueprint neutron-client --- openstackclient/compute/v2/floatingip.py | 17 ----- openstackclient/network/v2/floating_ip.py | 26 +++++++ openstackclient/tests/network/v2/fakes.py | 5 +- .../tests/network/v2/test_floating_ip.py | 76 +++++++++++++++++++ setup.cfg | 2 +- 5 files changed, 107 insertions(+), 19 deletions(-) diff --git a/openstackclient/compute/v2/floatingip.py b/openstackclient/compute/v2/floatingip.py index e4280de745..6212989f3b 100644 --- a/openstackclient/compute/v2/floatingip.py +++ b/openstackclient/compute/v2/floatingip.py @@ -68,23 +68,6 @@ class CreateFloatingIP(command.ShowOne): return zip(*sorted(six.iteritems(info))) -class ListFloatingIP(command.Lister): - """List floating IP addresses""" - - def take_action(self, parsed_args): - compute_client = self.app.client_manager.compute - - columns = ('ID', 'Pool', 'IP', 'Fixed IP', 'Instance ID') - - data = compute_client.floating_ips.list() - - return (columns, - (utils.get_item_properties( - s, columns, - formatters={}, - ) for s in data)) - - class RemoveFloatingIP(command.Command): """Remove floating IP address from server""" diff --git a/openstackclient/network/v2/floating_ip.py b/openstackclient/network/v2/floating_ip.py index 91a93380a9..488950485b 100644 --- a/openstackclient/network/v2/floating_ip.py +++ b/openstackclient/network/v2/floating_ip.py @@ -38,3 +38,29 @@ class DeleteFloatingIP(common.NetworkAndComputeCommand): parsed_args.floating_ip, ) client.floating_ips.delete(obj.id) + + +class ListFloatingIP(common.NetworkAndComputeLister): + """List floating IP(s)""" + + columns = ('ID', 'IP', 'Fixed IP', 'Instance ID', 'Pool') + column_headers = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool') + + def take_action_network(self, client, parsed_args): + query = {} + data = client.ips(**query) + + return (self.column_headers, + (utils.get_item_properties( + s, self.columns, + formatters={}, + ) for s in data)) + + def take_action_compute(self, client, parsed_args): + data = client.floating_ips.list() + + return (self.column_headers, + (utils.get_item_properties( + s, self.columns, + formatters={}, + ) for s in data)) diff --git a/openstackclient/tests/network/v2/fakes.py b/openstackclient/tests/network/v2/fakes.py index 7dee41e00e..77720ee0ca 100644 --- a/openstackclient/tests/network/v2/fakes.py +++ b/openstackclient/tests/network/v2/fakes.py @@ -566,12 +566,15 @@ class FakeFloatingIP(object): :param Dictionary methods: A dictionary with all methods :return: - A FakeResource object, with id, ip + A FakeResource object, with id, ip, and so on """ # Set default attributes. floating_ip_attrs = { 'id': 'floating-ip-id-' + uuid.uuid4().hex, 'ip': '1.0.9.0', + 'fixed_ip': '2.0.9.0', + 'instance_id': 'server-id-' + uuid.uuid4().hex, + 'pool': 'public', } # Overwrite default attributes. diff --git a/openstackclient/tests/network/v2/test_floating_ip.py b/openstackclient/tests/network/v2/test_floating_ip.py index 49131f364c..cfe3d11ddf 100644 --- a/openstackclient/tests/network/v2/test_floating_ip.py +++ b/openstackclient/tests/network/v2/test_floating_ip.py @@ -59,6 +59,43 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork): self.assertIsNone(result) +class TestListFloatingIPNetwork(TestFloatingIPNetwork): + + # The floating ips to list up + floating_ips = network_fakes.FakeFloatingIP.create_floating_ips(count=3) + + columns = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool') + + data = [] + for ip in floating_ips: + data.append(( + ip.id, + ip.ip, + ip.fixed_ip, + ip.instance_id, + ip.pool, + )) + + def setUp(self): + super(TestListFloatingIPNetwork, self).setUp() + + self.network.ips = mock.Mock(return_value=self.floating_ips) + + # Get the command object to test + self.cmd = floating_ip.ListFloatingIP(self.app, self.namespace) + + def test_floating_ip_list(self): + arglist = [] + verifylist = [] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.ips.assert_called_with(**{}) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + + # Tests for Nova network # class TestFloatingIPCompute(compute_fakes.TestComputev2): @@ -103,3 +140,42 @@ class TestDeleteFloatingIPCompute(TestFloatingIPCompute): self.floating_ip.id ) self.assertIsNone(result) + + +class TestListFloatingIPCompute(TestFloatingIPCompute): + + # The floating ips to be list up + floating_ips = network_fakes.FakeFloatingIP.create_floating_ips(count=3) + + columns = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool') + + data = [] + for ip in floating_ips: + data.append(( + ip.id, + ip.ip, + ip.fixed_ip, + ip.instance_id, + ip.pool, + )) + + def setUp(self): + super(TestListFloatingIPCompute, self).setUp() + + self.app.client_manager.network_endpoint_enabled = False + + self.compute.floating_ips.list.return_value = self.floating_ips + + # Get the command object to test + self.cmd = floating_ip.ListFloatingIP(self.app, None) + + def test_floating_ip_list(self): + arglist = [] + verifylist = [] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.compute.floating_ips.list.assert_called_with() + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) diff --git a/setup.cfg b/setup.cfg index dabe779c3c..e8100b5f8c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -91,7 +91,6 @@ openstack.compute.v2 = ip_floating_add = openstackclient.compute.v2.floatingip:AddFloatingIP ip_floating_create = openstackclient.compute.v2.floatingip:CreateFloatingIP - ip_floating_list = openstackclient.compute.v2.floatingip:ListFloatingIP ip_floating_remove = openstackclient.compute.v2.floatingip:RemoveFloatingIP ip_floating_pool_list = openstackclient.compute.v2.floatingippool:ListFloatingIPPool @@ -326,6 +325,7 @@ openstack.image.v2 = openstack.network.v2 = ip_floating_delete = openstackclient.network.v2.floating_ip:DeleteFloatingIP + ip_floating_list = openstackclient.network.v2.floating_ip:ListFloatingIP network_create = openstackclient.network.v2.network:CreateNetwork network_delete = openstackclient.network.v2.network:DeleteNetwork network_list = openstackclient.network.v2.network:ListNetwork