]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: block deploying nvmeof daemons of different groups on same host
authorAdam King <adking@redhat.com>
Wed, 12 Feb 2025 19:31:36 +0000 (14:31 -0500)
committerAdam King <adking@redhat.com>
Wed, 12 Feb 2025 21:51:55 +0000 (16:51 -0500)
As recommended by the nvmeof team, we shouldn't have nvmeof teams
of different groups on the same host

Signed-off-by: Adam King <adking@redhat.com>
src/pybind/mgr/cephadm/services/nvmeof.py

index b522a762032636e0c477f3610896f57eebd84272..43b4c2b086ff017c9a02da3d9106bf740a3393a2 100644 (file)
@@ -7,7 +7,12 @@ from ipaddress import ip_address, IPv6Address
 from mgr_module import HandleCommandResult
 from ceph.deployment.service_spec import NvmeofServiceSpec
 
-from orchestrator import OrchestratorError, DaemonDescription, DaemonDescriptionStatus
+from orchestrator import (
+    OrchestratorError,
+    DaemonDescription,
+    DaemonDescriptionStatus,
+    HostSpec,
+)
 from .cephadmservice import CephadmDaemonDeploySpec, CephService
 from .service_registry import register_cephadm_service
 from .. import utils
@@ -234,3 +239,22 @@ class NvmeofService(CephService):
         _, _, err = self.mgr.mon_command(cmd)
         if err:
             self.mgr.log.error(f"Unable to send monitor command {cmd}, error {err}")
+
+    def get_blocking_daemon_hosts(self, service_name: str) -> List[HostSpec]:
+        # we should not deploy nvmeof daemons on hosts that have nvmeof daemons
+        # from services with a different "group" attribute (as recommended by
+        # the nvmeof team)
+        spec = cast(NvmeofServiceSpec, self.mgr.spec_store[service_name].spec)
+        nvmeof_group = cast(NvmeofServiceSpec, spec).group
+        blocking_daemons: List[DaemonDescription] = []
+        other_group_nvmeof_services = [
+            nspec for nspec in self.mgr.spec_store.get_specs_by_type('nvmeof').values()
+            if cast(NvmeofServiceSpec, nspec).group != nvmeof_group
+        ]
+        for other_group_nvmeof_service in other_group_nvmeof_services:
+            blocking_daemons += self.mgr.cache.get_daemons_by_service(other_group_nvmeof_service.service_name())
+        blocking_daemon_hosts = [
+            HostSpec(hostname=blocking_daemon.hostname)
+            for blocking_daemon in blocking_daemons if blocking_daemon.hostname is not None
+        ]
+        return blocking_daemon_hosts