]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/cephadm/http_server.py
4 from typing
import TYPE_CHECKING
6 from cephadm
.agent
import AgentEndpoint
7 from cephadm
.service_discovery
import ServiceDiscovery
8 from mgr_util
import test_port_allocation
, PortAlreadyInUse
9 from orchestrator
import OrchestratorError
12 from cephadm
.module
import CephadmOrchestrator
15 def cherrypy_filter(record
: logging
.LogRecord
) -> int:
17 'TLSV1_ALERT_DECRYPT_ERROR'
19 msg
= record
.getMessage()
20 return not any([m
for m
in blocked
if m
in msg
])
23 logging
.getLogger('cherrypy.error').addFilter(cherrypy_filter
)
24 cherrypy
.log
.access_log
.propagate
= False
27 class CephadmHttpServer(threading
.Thread
):
28 def __init__(self
, mgr
: "CephadmOrchestrator") -> None:
30 self
.agent
= AgentEndpoint(mgr
)
31 self
.service_discovery
= ServiceDiscovery(mgr
)
32 self
.cherrypy_shutdown_event
= threading
.Event()
33 self
._service
_discovery
_port
= self
.mgr
.service_discovery_port
34 self
.secure_monitoring_stack
= self
.mgr
.secure_monitoring_stack
35 super().__init
__(target
=self
.run
)
37 def configure_cherrypy(self
) -> None:
38 cherrypy
.config
.update({
39 'environment': 'production',
40 'engine.autoreload.on': False,
43 def configure(self
) -> None:
44 self
.configure_cherrypy()
45 self
.agent
.configure()
46 self
.service_discovery
.configure(self
.mgr
.service_discovery_port
,
47 self
.mgr
.get_mgr_ip(),
48 self
.secure_monitoring_stack
)
50 def config_update(self
) -> None:
51 self
.service_discovery_port
= self
.mgr
.service_discovery_port
52 if self
.secure_monitoring_stack
!= self
.mgr
.secure_monitoring_stack
:
53 self
.secure_monitoring_stack
= self
.mgr
.secure_monitoring_stack
57 def service_discovery_port(self
) -> int:
58 return self
._service
_discovery
_port
60 @service_discovery_port.setter
61 def service_discovery_port(self
, value
: int) -> None:
62 if self
._service
_discovery
_port
== value
:
66 test_port_allocation(self
.mgr
.get_mgr_ip(), value
)
67 except PortAlreadyInUse
:
68 raise OrchestratorError(f
'Service discovery port {value} is already in use. Listening on old port {self._service_discovery_port}.')
69 except Exception as e
:
70 raise OrchestratorError(f
'Cannot check service discovery port ip:{self.mgr.get_mgr_ip()} port:{value} error:{e}')
72 self
.mgr
.log
.info(f
'Changing service discovery port from {self._service_discovery_port} to {value}...')
73 self
._service
_discovery
_port
= value
76 def restart(self
) -> None:
77 cherrypy
.engine
.stop()
78 cherrypy
.server
.httpserver
= None
80 cherrypy
.engine
.start()
82 def run(self
) -> None:
84 self
.mgr
.log
.debug('Starting cherrypy engine...')
86 cherrypy
.server
.unsubscribe() # disable default server
87 cherrypy
.engine
.start()
88 self
.mgr
.log
.debug('Cherrypy engine started.')
89 self
.mgr
._kick
_serve
_loop
()
90 # wait for the shutdown event
91 self
.cherrypy_shutdown_event
.wait()
92 self
.cherrypy_shutdown_event
.clear()
93 cherrypy
.engine
.stop()
94 cherrypy
.server
.httpserver
= None
95 self
.mgr
.log
.debug('Cherrypy engine stopped.')
96 except Exception as e
:
97 self
.mgr
.log
.error(f
'Failed to run cephadm http server: {e}')
99 def shutdown(self
) -> None:
100 self
.mgr
.log
.debug('Stopping cherrypy engine...')
101 self
.cherrypy_shutdown_event
.set()