diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-01-10 13:14:04 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-01-10 13:14:04 +0000 |
commit | 401aaaba2a069150f0ec1cc3fb64409c78fd51b5 (patch) | |
tree | 1f4352e0ab4e054cc6c3ae72ba77de52005dd7c1 | |
parent | 7d04a2dce32d6e4a1139d83b503990285b125241 (diff) | |
parent | 3e35f10d42aa474d34152a95ba504261c386b9d2 (diff) | |
download | nova-401aaaba2a069150f0ec1cc3fb64409c78fd51b5.tar.gz nova-401aaaba2a069150f0ec1cc3fb64409c78fd51b5.tar.xz nova-401aaaba2a069150f0ec1cc3fb64409c78fd51b5.zip |
Merge "Enhance wsgi to listen on ipv6 address"
-rw-r--r-- | nova/tests/test_service.py | 8 | ||||
-rw-r--r-- | nova/tests/test_wsgi.py | 9 | ||||
-rw-r--r-- | nova/wsgi.py | 11 |
3 files changed, 26 insertions, 2 deletions
diff --git a/nova/tests/test_service.py b/nova/tests/test_service.py index 2d98a2641..0bb57d542 100644 --- a/nova/tests/test_service.py +++ b/nova/tests/test_service.py @@ -182,6 +182,14 @@ class TestWSGIService(test.TestCase): self.assertNotEqual(0, test_service.port) test_service.stop() + def test_service_random_port_with_ipv6(self): + CONF.set_default("test_service_listen", "::1") + test_service = service.WSGIService("test_service") + test_service.start() + self.assertEqual("::1", test_service.host) + self.assertNotEqual(0, test_service.port) + test_service.stop() + class TestLauncher(test.TestCase): diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index eda735cae..b4b25ed97 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -90,3 +90,12 @@ class TestWSGIServer(test.TestCase): self.assertNotEqual(0, server.port) server.stop() server.wait() + + def test_start_random_port_with_ipv6(self): + server = nova.wsgi.Server("test_random_port", None, + host="::1", port=0) + server.start() + self.assertEqual("::1", server.host) + self.assertNotEqual(0, server.port) + server.stop() + server.wait() diff --git a/nova/wsgi.py b/nova/wsgi.py index e7e731523..c103526da 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -20,6 +20,7 @@ """Utility methods for working with WSGI servers.""" import os.path +import socket import sys import eventlet @@ -82,8 +83,14 @@ class Server(object): raise exception.InvalidInput( reason='The backlog must be more than 1') - self._socket = eventlet.listen((host, port), backlog=backlog) - (self.host, self.port) = self._socket.getsockname() + try: + socket.inet_pton(socket.AF_INET6, host) + family = socket.AF_INET6 + except Exception: + family = socket.AF_INET + + self._socket = eventlet.listen((host, port), family, backlog=backlog) + (self.host, self.port) = self._socket.getsockname()[0:2] LOG.info(_("%(name)s listening on %(host)s:%(port)s") % self.__dict__) def start(self): |