]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: use ipv4 default when ipv6 was disabled 29194/head
authorkungf <yang.wang@easystack.cn>
Wed, 29 May 2019 07:57:42 +0000 (15:57 +0800)
committerPrashant D <pdhange@redhat.com>
Mon, 22 Jul 2019 23:41:14 +0000 (19:41 -0400)
Fixes: https://tracker.ceph.com/issues/40023
Signed-off-by: kungf <yang.wang@easystack.cn>
(cherry picked from commit 38e7083301f4d5e419f4c7c1fb596d529d3ab83c)

src/pybind/mgr/dashboard/module.py
src/pybind/mgr/mgr_util.py
src/pybind/mgr/prometheus/module.py

index 7af9f3608d1ebd2ccaf8340c7c476361c5f8d8b0..3f66790bc6a1b6abcecde80dc766635dda69fa40 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
@@ -126,7 +127,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)
@@ -301,7 +303,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 ca2e8d907f0972e4d91897cf3a11f1054153e01f..f3696c7d7e74f7eb4feb5b34d6478134e5cb1ae7 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
@@ -999,7 +999,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(
@@ -1041,7 +1041,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" %