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]
# 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(
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:
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)
# 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(
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
# 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)
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 {}, []