]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr: use ipv4 default when ipv6 was disabled
authorkungf <yang.wang@easystack.cn>
Wed, 29 May 2019 07:57:42 +0000 (15:57 +0800)
committerkungf <yang.wang@easystack.cn>
Thu, 30 May 2019 03:27:19 +0000 (11:27 +0800)
Fixes: https://tracker.ceph.com/issues/40023
Signed-off-by: kungf <yang.wang@easystack.cn>
src/pybind/mgr/dashboard/module.py
src/pybind/mgr/mgr_util.py
src/pybind/mgr/prometheus/module.py

index 71760d7f0f5f6f0167f33677acd20bb9a664aeb6..18faa020d7d44b365e475e65cf9bd1c0470fed25 100644 (file)
@@ -15,6 +15,7 @@ import time
 from uuid import uuid4
 from OpenSSL import crypto, SSL
 from mgr_module import MgrModule, MgrStandbyModule, Option
+from mgr_util import get_default_addr
 
 try:
     import cherrypy
@@ -125,7 +126,8 @@ class CherryPyConfig(object):
 
         :returns our URI
         """
-        server_addr = self.get_localized_module_option('server_addr', '::')
+        server_addr = self.get_localized_module_option(
+            'server_addr', get_default_addr())
         ssl = self.get_localized_module_option('ssl', True)
         if not ssl:
             server_port = self.get_localized_module_option('server_port', 8080)
@@ -295,7 +297,7 @@ class Module(MgrModule, CherryPyConfig):
     PLUGIN_MANAGER.hook.register_commands()
 
     MODULE_OPTIONS = [
-        Option(name='server_addr', type='str', default='::'),
+        Option(name='server_addr', type='str', default=get_default_addr()),
         Option(name='server_port', type='int', default=8080),
         Option(name='ssl_server_port', type='int', default=8443),
         Option(name='jwt_token_ttl', type='int', default=28800),
index 3a48e9330267f87d0226146f203aef02efa4baa5..331f19d389f31e699c87b9c9ac2a59faa943f2c5 100644 (file)
@@ -1,3 +1,5 @@
+import contextlib
+import socket
 
 (
     BLACK,
@@ -85,3 +87,22 @@ def merge_dicts(*args):
     for arg in args:
         ret.update(arg)
     return ret
+
+
+def get_default_addr():
+    def is_ipv6_enabled():
+        try:
+            sock = socket.socket(socket.AF_INET6)
+            with contextlib.closing(sock):
+                sock.bind(("::1", 0))
+                return True
+        except (AttributeError, socket.error) as e:
+           return False
+
+    try:
+        return get_default_addr.result
+    except AttributeError:
+        result = '::' if is_ipv6_enabled() else '0.0.0.0'
+        get_default_addr.result = result
+        return result
+
index 4a81fce65ec97f70acf8bd2804cb6e3c31ed935f..5bf87dd902acfc488d986ae01bd9216dc33aacf0 100644 (file)
@@ -9,13 +9,13 @@ import socket
 import threading
 import time
 from mgr_module import MgrModule, MgrStandbyModule, CommandResult, PG_STATES
+from mgr_util import get_default_addr
 from rbd import RBD
 
 # Defaults for the Prometheus HTTP server.  Can also set in config-key
 # see https://github.com/prometheus/prometheus/wiki/Default-port-allocations
 # for Prometheus exporter port registry
 
-DEFAULT_ADDR = '::'
 DEFAULT_PORT = 9283
 
 # When the CherryPy server in 3.2.2 (and later) starts it attempts to verify
@@ -986,7 +986,7 @@ class Module(MgrModule):
             'scrape_interval', 5.0)
 
         server_addr = self.get_localized_module_option(
-            'server_addr', DEFAULT_ADDR)
+            'server_addr', get_default_addr())
         server_port = self.get_localized_module_option(
             'server_port', DEFAULT_PORT)
         self.log.info(
@@ -1028,7 +1028,8 @@ class StandbyModule(MgrStandbyModule):
         self.shutdown_event = threading.Event()
 
     def serve(self):
-        server_addr = self.get_localized_module_option('server_addr', '::')
+        server_addr = self.get_localized_module_option(
+            'server_addr', get_default_addr())
         server_port = self.get_localized_module_option(
             'server_port', DEFAULT_PORT)
         self.log.info("server_addr: %s server_port: %s" %