From de4e40a7549f39dc341e8853b2bce456e258fc62 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 20 Apr 2015 19:00:27 -0400 Subject: [PATCH] add ips to novaclient server manager This exposes the ips Resource from the nova server manager which the infra team believes will help them optimize some of their API load on various clouds. Change-Id: I00730dc809ae4e86d728e2ec76bfb38024d7634e --- novaclient/tests/functional/api/__init__.py | 0 .../tests/functional/api/test_servers.py | 35 +++++++++++++++++++ novaclient/v2/servers.py | 10 ++++++ 3 files changed, 45 insertions(+) create mode 100644 novaclient/tests/functional/api/__init__.py create mode 100644 novaclient/tests/functional/api/test_servers.py diff --git a/novaclient/tests/functional/api/__init__.py b/novaclient/tests/functional/api/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/novaclient/tests/functional/api/test_servers.py b/novaclient/tests/functional/api/test_servers.py new file mode 100644 index 000000000..5615eb849 --- /dev/null +++ b/novaclient/tests/functional/api/test_servers.py @@ -0,0 +1,35 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import time + +from novaclient.tests.functional import base + + +class TestServersAPI(base.ClientTestBase): + def test_server_ips(self): + server_name = "test_server" + initial_server = self.client.servers.create( + server_name, self.image, self.flavor) + self.addCleanup(initial_server.delete) + + for x in xrange(60): + server = self.client.servers.get(initial_server) + if server.status == "ACTIVE": + break + else: + time.sleep(1) + else: + self.fail("Server %s did not go ACTIVE after 60s" % server) + + ips = self.client.servers.ips(server) + self.assertIn('private', ips) diff --git a/novaclient/v2/servers.py b/novaclient/v2/servers.py index 624651b05..11f1a56eb 100644 --- a/novaclient/v2/servers.py +++ b/novaclient/v2/servers.py @@ -819,6 +819,16 @@ class ServerManager(base.BootingManagerWithFind): """ self._action('unshelve', server, None) + def ips(self, server): + """ + Return IP Addresses associated with the server. + + Often a cheaper call then getting all the details for a server. + """ + _resp, body = self.api.client.get("/servers/%s/ips" % + base.getid(server)) + return body['addresses'] + def diagnostics(self, server): """Retrieve server diagnostics.""" return self.api.client.get("/servers/%s/diagnostics" %