summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-10-13 04:59:42 +0000
committerGerrit Code Review <review@openstack.org>2020-10-13 04:59:42 +0000
commit44f842b1f86dd922d0393ff947314da3dbd83925 (patch)
tree9ffd36f1e11d17d4e9d05c18f4661554959e71b9 /openstackclient
parent1bac625d47315f1cd9711b31295b7ff36a15ec5f (diff)
parent415545ab9fd842bdc19b7fbfa63e3332dd63fe6c (diff)
downloadpython-openstackclient-44f842b1f86dd922d0393ff947314da3dbd83925.tar.gz
Merge "Add an error message when server bind floating IP"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py4
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py48
2 files changed, 44 insertions, 8 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index a223e09d..76e57ed2 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -292,6 +292,10 @@ class AddFloatingIP(network_common.NetworkAndComputeCommand):
parsed_args.server,
)
ports = list(client.ports(device_id=server.id))
+ if not ports:
+ msg = _('No attached ports found to associate floating IP with')
+ raise exceptions.CommandError(msg)
+
# If the fixed IP address was specified, we need to find the
# corresponding port.
if parsed_args.fixed_ip_address:
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index bc6b1acb..8f8a33ac 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -249,7 +249,7 @@ class TestServerAddFloatingIPNetwork(
# Get the command object to test
self.cmd = server.AddFloatingIP(self.app, self.namespace)
- def test_server_add_floating_ip_default(self):
+ def test_server_add_floating_ip(self):
_server = compute_fakes.FakeServer.create_one_server()
self.servers_mock.get.return_value = _server
_port = network_fakes.FakePort.create_one_port()
@@ -284,8 +284,41 @@ class TestServerAddFloatingIPNetwork(
**attrs
)
- def test_server_add_floating_ip_default_no_external_gateway(self,
- success=False):
+ def test_server_add_floating_ip_no_ports(self):
+ server = compute_fakes.FakeServer.create_one_server()
+ floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
+
+ self.servers_mock.get.return_value = server
+ self.network.find_ip = mock.Mock(return_value=floating_ip)
+ self.network.ports = mock.Mock(return_value=[])
+
+ arglist = [
+ server.id,
+ floating_ip['floating_ip_address'],
+ ]
+ verifylist = [
+ ('server', server.id),
+ ('ip_address', floating_ip['floating_ip_address']),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ ex = self.assertRaises(
+ exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)
+ self.assertIn(
+ 'No attached ports found to associate floating IP with',
+ str(ex))
+
+ self.network.find_ip.assert_called_once_with(
+ floating_ip['floating_ip_address'],
+ ignore_missing=False,
+ )
+ self.network.ports.assert_called_once_with(
+ device_id=server.id,
+ )
+
+ def test_server_add_floating_ip_no_external_gateway(self, success=False):
_server = compute_fakes.FakeServer.create_one_server()
self.servers_mock.get.return_value = _server
_port = network_fakes.FakePort.create_one_port()
@@ -338,11 +371,10 @@ class TestServerAddFloatingIPNetwork(
**attrs
)
- def test_server_add_floating_ip_default_one_external_gateway(self):
- self.test_server_add_floating_ip_default_no_external_gateway(
- success=True)
+ def test_server_add_floating_ip_one_external_gateway(self):
+ self.test_server_add_floating_ip_no_external_gateway(success=True)
- def test_server_add_floating_ip_fixed(self):
+ def test_server_add_floating_ip_with_fixed_ip(self):
_server = compute_fakes.FakeServer.create_one_server()
self.servers_mock.get.return_value = _server
_port = network_fakes.FakePort.create_one_port()
@@ -384,7 +416,7 @@ class TestServerAddFloatingIPNetwork(
**attrs
)
- def test_server_add_floating_ip_fixed_no_port_found(self):
+ def test_server_add_floating_ip_with_fixed_ip_no_port_found(self):
_server = compute_fakes.FakeServer.create_one_server()
self.servers_mock.get.return_value = _server
_port = network_fakes.FakePort.create_one_port()