Skip to content

Commit 44f842b

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add an error message when server bind floating IP"
2 parents 1bac625 + 415545a commit 44f842b

3 files changed

Lines changed: 51 additions & 8 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,10 @@ def take_action_network(self, client, parsed_args):
292292
parsed_args.server,
293293
)
294294
ports = list(client.ports(device_id=server.id))
295+
if not ports:
296+
msg = _('No attached ports found to associate floating IP with')
297+
raise exceptions.CommandError(msg)
298+
295299
# If the fixed IP address was specified, we need to find the
296300
# corresponding port.
297301
if parsed_args.fixed_ip_address:

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def setUp(self):
249249
# Get the command object to test
250250
self.cmd = server.AddFloatingIP(self.app, self.namespace)
251251

252-
def test_server_add_floating_ip_default(self):
252+
def test_server_add_floating_ip(self):
253253
_server = compute_fakes.FakeServer.create_one_server()
254254
self.servers_mock.get.return_value = _server
255255
_port = network_fakes.FakePort.create_one_port()
@@ -284,8 +284,41 @@ def test_server_add_floating_ip_default(self):
284284
**attrs
285285
)
286286

287-
def test_server_add_floating_ip_default_no_external_gateway(self,
288-
success=False):
287+
def test_server_add_floating_ip_no_ports(self):
288+
server = compute_fakes.FakeServer.create_one_server()
289+
floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
290+
291+
self.servers_mock.get.return_value = server
292+
self.network.find_ip = mock.Mock(return_value=floating_ip)
293+
self.network.ports = mock.Mock(return_value=[])
294+
295+
arglist = [
296+
server.id,
297+
floating_ip['floating_ip_address'],
298+
]
299+
verifylist = [
300+
('server', server.id),
301+
('ip_address', floating_ip['floating_ip_address']),
302+
]
303+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
304+
305+
ex = self.assertRaises(
306+
exceptions.CommandError,
307+
self.cmd.take_action,
308+
parsed_args)
309+
self.assertIn(
310+
'No attached ports found to associate floating IP with',
311+
str(ex))
312+
313+
self.network.find_ip.assert_called_once_with(
314+
floating_ip['floating_ip_address'],
315+
ignore_missing=False,
316+
)
317+
self.network.ports.assert_called_once_with(
318+
device_id=server.id,
319+
)
320+
321+
def test_server_add_floating_ip_no_external_gateway(self, success=False):
289322
_server = compute_fakes.FakeServer.create_one_server()
290323
self.servers_mock.get.return_value = _server
291324
_port = network_fakes.FakePort.create_one_port()
@@ -338,11 +371,10 @@ def test_server_add_floating_ip_default_no_external_gateway(self,
338371
**attrs
339372
)
340373

341-
def test_server_add_floating_ip_default_one_external_gateway(self):
342-
self.test_server_add_floating_ip_default_no_external_gateway(
343-
success=True)
374+
def test_server_add_floating_ip_one_external_gateway(self):
375+
self.test_server_add_floating_ip_no_external_gateway(success=True)
344376

345-
def test_server_add_floating_ip_fixed(self):
377+
def test_server_add_floating_ip_with_fixed_ip(self):
346378
_server = compute_fakes.FakeServer.create_one_server()
347379
self.servers_mock.get.return_value = _server
348380
_port = network_fakes.FakePort.create_one_port()
@@ -384,7 +416,7 @@ def test_server_add_floating_ip_fixed(self):
384416
**attrs
385417
)
386418

387-
def test_server_add_floating_ip_fixed_no_port_found(self):
419+
def test_server_add_floating_ip_with_fixed_ip_no_port_found(self):
388420
_server = compute_fakes.FakeServer.create_one_server()
389421
self.servers_mock.get.return_value = _server
390422
_port = network_fakes.FakePort.create_one_port()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
fixes:
3+
- |
4+
Associating a floating IP with a server using the ``server add floating
5+
ip`` command requires the server have at least one port associated with it.
6+
Previously, this was not validated, meaning the operation would silently
7+
fail. This has been resolved.

0 commit comments

Comments
 (0)