]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/cephadm/services/monitoring.py
import 15.2.5
[ceph.git] / ceph / src / pybind / mgr / cephadm / services / monitoring.py
index b17a448755b272e3f8d43dd43e9ed8cdc6b181ed..cc4d1416b65ad1752ebbc0e49487509589c8de17 100644 (file)
@@ -3,20 +3,23 @@ import os
 from typing import List, Any, Tuple, Dict
 
 from orchestrator import DaemonDescription
-from cephadm.services.cephadmservice import CephadmService
+from ceph.deployment.service_spec import AlertManagerSpec
+from cephadm.services.cephadmservice import CephadmService, CephadmDaemonSpec
 from mgr_util import verify_tls, ServerConfigException, create_self_signed_cert
 
 logger = logging.getLogger(__name__)
 
+
 class GrafanaService(CephadmService):
+    TYPE = 'grafana'
     DEFAULT_SERVICE_PORT = 3000
 
-    def create(self, daemon_id, host):
-        # type: (str, str) -> str
-        return self.mgr._create_daemon('grafana', daemon_id, host)
+    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        return self.mgr._create_daemon(daemon_spec)
 
-    def generate_config(self):
-        # type: () -> Tuple[Dict[str, Any], List[str]]
+    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         deps = []  # type: List[str]
 
         prom_services = []  # type: List[str]
@@ -60,7 +63,7 @@ class GrafanaService(CephadmService):
         # Use the least-created one as the active daemon
         return daemon_descrs[-1]
 
-    def daemon_check_post(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
         # TODO: signed cert
         dd = self.get_active_daemon(daemon_descrs)
         service_url = 'https://{}:{}'.format(
@@ -72,18 +75,29 @@ class GrafanaService(CephadmService):
             service_url
         )
 
+
 class AlertmanagerService(CephadmService):
+    TYPE = 'alertmanager'
     DEFAULT_SERVICE_PORT = 9093
 
-    def create(self, daemon_id, host) -> str:
-        return self.mgr._create_daemon('alertmanager', daemon_id, host)
+    def create(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        assert daemon_spec.spec
+        return self.mgr._create_daemon(daemon_spec)
+
+    def generate_config(self, daemon_spec: CephadmDaemonSpec[AlertManagerSpec]) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
+        deps: List[str] = []
+        default_webhook_urls: List[str] = []
 
-    def generate_config(self):
-        # type: () -> Tuple[Dict[str, Any], List[str]]
-        deps = [] # type: List[str]
+        if daemon_spec.spec:
+            user_data = daemon_spec.spec.user_data
+            if 'default_webhook_urls' in user_data and isinstance(
+                    user_data['default_webhook_urls'], list):
+                default_webhook_urls.extend(user_data['default_webhook_urls'])
 
         # dashboard(s)
-        dashboard_urls = []
+        dashboard_urls: List[str] = []
         mgr_map = self.mgr.get('mgr_map')
         port = None
         proto = None  # http: or https:
@@ -107,7 +121,8 @@ class AlertmanagerService(CephadmService):
                                                   port))
 
         context = {
-            'dashboard_urls': dashboard_urls
+            'dashboard_urls': dashboard_urls,
+            'default_webhook_urls': default_webhook_urls
         }
         yml = self.mgr.template.render('services/alertmanager/alertmanager.yml.j2', context)
 
@@ -128,7 +143,7 @@ class AlertmanagerService(CephadmService):
         # TODO: if there are multiple daemons, who is the active one?
         return daemon_descrs[0]
 
-    def daemon_check_post(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
         dd = self.get_active_daemon(daemon_descrs)
         service_url = 'http://{}:{}'.format(self._inventory_get_addr(dd.hostname), self.DEFAULT_SERVICE_PORT)
         self._set_service_url_on_dashboard(
@@ -140,13 +155,15 @@ class AlertmanagerService(CephadmService):
 
 
 class PrometheusService(CephadmService):
+    TYPE = 'prometheus'
     DEFAULT_SERVICE_PORT = 9095
 
-    def create(self, daemon_id, host) -> str:
-        return self.mgr._create_daemon('prometheus', daemon_id, host)
+    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        return self.mgr._create_daemon(daemon_spec)
 
-    def generate_config(self):
-        # type: () -> Tuple[Dict[str, Any], List[str]]
+    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         deps = []  # type: List[str]
 
         # scrape mgrs
@@ -216,7 +233,7 @@ class PrometheusService(CephadmService):
         # TODO: if there are multiple daemons, who is the active one?
         return daemon_descrs[0]
 
-    def daemon_check_post(self, daemon_descrs: List[DaemonDescription]):
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]):
         dd = self.get_active_daemon(daemon_descrs)
         service_url = 'http://{}:{}'.format(
             self._inventory_get_addr(dd.hostname), self.DEFAULT_SERVICE_PORT)
@@ -227,9 +244,14 @@ class PrometheusService(CephadmService):
             service_url
         )
 
+
 class NodeExporterService(CephadmService):
-    def create(self, daemon_id, host) -> str:
-        return self.mgr._create_daemon('node-exporter', daemon_id, host)
+    TYPE = 'node-exporter'
+
+    def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        return self.mgr._create_daemon(daemon_spec)
 
-    def generate_config(self) -> Tuple[Dict[str, Any], List[str]]:
+    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         return {}, []