]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/restful/module.py
update sources to 12.2.2
[ceph.git] / ceph / src / pybind / mgr / restful / module.py
index 63fcae72a5a21c384166ae91c026ddcc770b5acb..6ce610b881f4d06d98ae0e25fca3e84721dfeb47 100644 (file)
@@ -10,6 +10,7 @@ import inspect
 import tempfile
 import threading
 import traceback
+import socket
 
 import common
 
@@ -26,6 +27,9 @@ from mgr_module import MgrModule, CommandResult
 instance = None
 
 
+class CannotServe(Exception):
+    pass
+
 
 class CommandsRequest(object):
     """
@@ -247,6 +251,8 @@ class Module(MgrModule):
             try:
                 self._serve()
                 self.server.socket.close()
+            except CannotServe as cs:
+                self.log.warn("server not running: {0}".format(cs.message))
             except:
                 self.log.error(str(traceback.format_exc()))
 
@@ -272,7 +278,8 @@ class Module(MgrModule):
 
         server_addr = self.get_localized_config('server_addr', '::')
         if server_addr is None:
-            raise RuntimeError('no server_addr configured; try "ceph config-key set mgr/restful/server_addr <ip>"')
+            raise CannotServe('no server_addr configured; try "ceph config-key set mgr/restful/server_addr <ip>"')
+
         server_port = int(self.get_localized_config('server_port', '8003'))
         self.log.info('server_addr: %s server_port: %d',
                       server_addr, server_port)
@@ -296,11 +303,18 @@ class Module(MgrModule):
             pkey_fname = self.get_localized_config('key_file')
 
         if not cert_fname or not pkey_fname:
-            raise RuntimeError('no certificate configured')
+            raise CannotServe('no certificate configured')
         if not os.path.isfile(cert_fname):
-            raise RuntimeError('certificate %s does not exist' % cert_fname)
+            raise CannotServe('certificate %s does not exist' % cert_fname)
         if not os.path.isfile(pkey_fname):
-            raise RuntimeError('private key %s does not exist' % pkey_fname)
+            raise CannotServe('private key %s does not exist' % pkey_fname)
+
+        # Publish the URI that others may use to access the service we're
+        # about to start serving
+        self.set_uri("https://{0}:{1}/".format(
+            socket.gethostname() if server_addr == "::" else server_addr,
+            server_port
+        ))
 
         # Create the HTTPS werkzeug server serving pecan app
         self.server = make_server(