Skip to content

Commit fbc0310

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Floating IP: Neutron support for "ip floating show" command"
2 parents 6176e80 + f0960f0 commit fbc0310

7 files changed

Lines changed: 175 additions & 2 deletions

File tree

doc/source/command-objects/ip-floating.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,17 @@ Remove floating IP address from server
8282
.. describe:: <server>
8383

8484
Server to remove the IP address from (name or ID)
85+
86+
ip floating show
87+
----------------
88+
89+
Display floating IP details
90+
91+
.. program:: ip floating show
92+
.. code:: bash
93+
94+
os ip floating show <floating-ip>
95+
96+
.. describe:: <floating-ip>
97+
98+
Floating IP to display (IP address or ID)

openstackclient/network/v2/floating_ip.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
from openstackclient.network import common
1818

1919

20+
def _get_columns(item):
21+
columns = item.keys()
22+
if 'tenant_id' in columns:
23+
columns.remove('tenant_id')
24+
columns.append('project_id')
25+
return tuple(sorted(columns))
26+
27+
2028
class DeleteFloatingIP(common.NetworkAndComputeCommand):
2129
"""Delete floating IP"""
2230

@@ -89,3 +97,30 @@ def take_action_compute(self, client, parsed_args):
8997
s, columns,
9098
formatters={},
9199
) for s in data))
100+
101+
102+
class ShowFloatingIP(common.NetworkAndComputeShowOne):
103+
"""Show floating IP details"""
104+
105+
def update_parser_common(self, parser):
106+
parser.add_argument(
107+
'floating_ip',
108+
metavar="<floating-ip>",
109+
help=("Floating IP to display (IP address or ID)")
110+
)
111+
return parser
112+
113+
def take_action_network(self, client, parsed_args):
114+
obj = client.find_ip(parsed_args.floating_ip, ignore_missing=False)
115+
columns = _get_columns(obj)
116+
data = utils.get_item_properties(obj, columns)
117+
return (columns, data)
118+
119+
def take_action_compute(self, client, parsed_args):
120+
obj = utils.find_resource(
121+
client.floating_ips,
122+
parsed_args.floating_ip,
123+
)
124+
columns = _get_columns(obj._info)
125+
data = utils.get_dict_properties(obj._info, columns)
126+
return (columns, data)

openstackclient/tests/compute/v2/fakes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ def create_one_floating_ip(attrs={}, methods={}):
630630
info=copy.deepcopy(floating_ip_attrs),
631631
methods=copy.deepcopy(floating_ip_methods),
632632
loaded=True)
633+
633634
return floating_ip
634635

635636
@staticmethod

openstackclient/tests/network/v2/fakes.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,22 +637,37 @@ def create_one_floating_ip(attrs={}, methods={}):
637637
'id': 'floating-ip-id-' + uuid.uuid4().hex,
638638
'floating_ip_address': '1.0.9.0',
639639
'fixed_ip_address': '2.0.9.0',
640+
'dns_domain': None,
641+
'dns_name': None,
642+
'status': 'DOWN',
643+
'floating_network_id': 'network-id-' + uuid.uuid4().hex,
644+
'router_id': 'router-id-' + uuid.uuid4().hex,
640645
'port_id': 'port-id-' + uuid.uuid4().hex,
646+
'tenant_id': 'project-id-' + uuid.uuid4().hex,
641647
}
642648

643649
# Overwrite default attributes.
644650
floating_ip_attrs.update(attrs)
645651

646652
# Set default methods.
647-
floating_ip_methods = {}
653+
floating_ip_methods = {
654+
'keys': ['id', 'floating_ip_address', 'fixed_ip_address',
655+
'dns_domain', 'dns_name', 'status', 'router_id',
656+
'floating_network_id', 'port_id', 'tenant_id']
657+
}
648658

649659
# Overwrite default methods.
650660
floating_ip_methods.update(methods)
651661

652662
floating_ip = fakes.FakeResource(
653663
info=copy.deepcopy(floating_ip_attrs),
654664
methods=copy.deepcopy(floating_ip_methods),
655-
loaded=True)
665+
loaded=True
666+
)
667+
668+
# Set attributes with special mappings in OpenStack SDK.
669+
floating_ip.project_id = floating_ip_attrs['tenant_id']
670+
656671
return floating_ip
657672

658673
@staticmethod

openstackclient/tests/network/v2/test_floating_ip.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,64 @@ def test_floating_ip_list(self):
100100
self.assertEqual(self.data, list(data))
101101

102102

103+
class TestShowFloatingIPNetwork(TestFloatingIPNetwork):
104+
105+
# The floating ip to display.
106+
floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
107+
108+
columns = (
109+
'dns_domain',
110+
'dns_name',
111+
'fixed_ip_address',
112+
'floating_ip_address',
113+
'floating_network_id',
114+
'id',
115+
'port_id',
116+
'project_id',
117+
'router_id',
118+
'status',
119+
)
120+
121+
data = (
122+
floating_ip.dns_domain,
123+
floating_ip.dns_name,
124+
floating_ip.fixed_ip_address,
125+
floating_ip.floating_ip_address,
126+
floating_ip.floating_network_id,
127+
floating_ip.id,
128+
floating_ip.port_id,
129+
floating_ip.tenant_id,
130+
floating_ip.router_id,
131+
floating_ip.status,
132+
)
133+
134+
def setUp(self):
135+
super(TestShowFloatingIPNetwork, self).setUp()
136+
137+
self.network.find_ip = mock.Mock(return_value=self.floating_ip)
138+
139+
# Get the command object to test
140+
self.cmd = floating_ip.ShowFloatingIP(self.app, self.namespace)
141+
142+
def test_floating_ip_show(self):
143+
arglist = [
144+
self.floating_ip.id,
145+
]
146+
verifylist = [
147+
('floating_ip', self.floating_ip.id),
148+
]
149+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
150+
151+
columns, data = self.cmd.take_action(parsed_args)
152+
153+
self.network.find_ip.assert_called_with(
154+
self.floating_ip.id,
155+
ignore_missing=False
156+
)
157+
self.assertEqual(self.columns, columns)
158+
self.assertEqual(self.data, data)
159+
160+
103161
# Tests for Nova network
104162
#
105163
class TestFloatingIPCompute(compute_fakes.TestComputev2):
@@ -189,3 +247,50 @@ def test_floating_ip_list(self):
189247
self.compute.floating_ips.list.assert_called_with()
190248
self.assertEqual(self.columns, columns)
191249
self.assertEqual(self.data, list(data))
250+
251+
252+
class TestShowFloatingIPCompute(TestFloatingIPCompute):
253+
254+
# The floating ip to display.
255+
floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip()
256+
257+
columns = (
258+
'fixed_ip',
259+
'id',
260+
'instance_id',
261+
'ip',
262+
'pool',
263+
)
264+
265+
data = (
266+
floating_ip.fixed_ip,
267+
floating_ip.id,
268+
floating_ip.instance_id,
269+
floating_ip.ip,
270+
floating_ip.pool,
271+
)
272+
273+
def setUp(self):
274+
super(TestShowFloatingIPCompute, self).setUp()
275+
276+
self.app.client_manager.network_endpoint_enabled = False
277+
278+
# Return value of utils.find_resource()
279+
self.compute.floating_ips.get.return_value = self.floating_ip
280+
281+
# Get the command object to test
282+
self.cmd = floating_ip.ShowFloatingIP(self.app, None)
283+
284+
def test_floating_ip_show(self):
285+
arglist = [
286+
self.floating_ip.id,
287+
]
288+
verifylist = [
289+
('floating_ip', self.floating_ip.id),
290+
]
291+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
292+
293+
columns, data = self.cmd.take_action(parsed_args)
294+
295+
self.assertEqual(self.columns, columns)
296+
self.assertEqual(self.data, data)

releasenotes/notes/bug-1519502-f72236598d14d350.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,5 @@ features:
44
[Bug `1519502 <https://bugs.launchpad.net/python-openstackclient/+bug/1519502>`_]
55
- Command ``ip floating list`` is now available for neutron network.
66
[Bug `1519502 <https://bugs.launchpad.net/python-openstackclient/+bug/1519502>`_]
7+
- Add command ``ip floating show`` for neutron and nova network.
8+
[Bug `1519502 <https://bugs.launchpad.net/python-openstackclient/+bug/1519502>`_]

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ openstack.image.v2 =
326326
openstack.network.v2 =
327327
ip_floating_delete = openstackclient.network.v2.floating_ip:DeleteFloatingIP
328328
ip_floating_list = openstackclient.network.v2.floating_ip:ListFloatingIP
329+
ip_floating_show = openstackclient.network.v2.floating_ip:ShowFloatingIP
329330
network_create = openstackclient.network.v2.network:CreateNetwork
330331
network_delete = openstackclient.network.v2.network:DeleteNetwork
331332
network_list = openstackclient.network.v2.network:ListNetwork

0 commit comments

Comments
 (0)