Base class for service types. Often providing a create() and config() fn.
"""
+ @property
+ def needs_monitoring(self) -> bool:
+ return False
+
@property
@abstractmethod
def TYPE(self) -> str:
TYPE = 'ceph-exporter'
DEFAULT_SERVICE_PORT = 9926
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
@classmethod
def get_dependencies(cls, mgr: "CephadmOrchestrator",
spec: Optional[ServiceSpec] = None,
TYPE = 'ingress'
MAX_KEEPALIVED_PASS_LEN = 8
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
@classmethod
def get_dependencies(cls, mgr: "CephadmOrchestrator",
spec: Optional[ServiceSpec] = None,
USER_CFG_KEY = 'alertmanager/web_user'
PASS_CFG_KEY = 'alertmanager/web_password'
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonDeploySpec:
assert self.TYPE == daemon_spec.daemon_type
daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec)
TYPE = 'node-exporter'
DEFAULT_SERVICE_PORT = 9100
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
@classmethod
def get_dependencies(cls, mgr: "CephadmOrchestrator",
spec: Optional[ServiceSpec] = None,
TYPE = 'nfs'
DEFAULT_EXPORTER_PORT = 9587
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
def ranked(self, spec: ServiceSpec) -> bool:
return True
TYPE = 'nvmeof'
PROMETHEUS_PORT = 10008
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
def config(self, spec: NvmeofServiceSpec) -> None: # type: ignore
assert self.TYPE == spec.service_type
# Looking at src/pybind/mgr/cephadm/services/iscsi.py
import os
import logging
-from typing import Type, Dict, TYPE_CHECKING
+from typing import Type, Dict, List, TYPE_CHECKING
import importlib
import pkgutil
"""Retrieves an initialized service instance by type."""
return self._services[service_type]
+ def get_services_requiring_monitoring(self) -> List[str]:
+ """Return a list with service types that requiere monitoring."""
+ services_to_monitor = [svc for svc in self._services if self._services[svc].needs_monitoring]
+ services_to_monitor.append('ceph') # this is needed for mgr-prometheus targets
+ return sorted(services_to_monitor)
+
def register_cephadm_service(cls: Type["CephadmService"]) -> Type["CephadmService"]:
"""
TYPE = 'smb'
smb_pool = '.smb' # minor layering violation. try to clean up later.
+ @property
+ def needs_monitoring(self) -> bool:
+ return True
+
def config(self, spec: ServiceSpec) -> None:
assert self.TYPE == spec.service_type
smb_spec = cast(SMBSpec, spec)