]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Add config() to CephadmService
authorSebastian Wagner <sebastian.wagner@suse.com>
Mon, 1 Feb 2021 17:13:59 +0000 (18:13 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 23 Feb 2021 09:59:23 +0000 (10:59 +0100)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
(cherry picked from commit 1b4e9e68d449ba58f1d0169c733124879173cf76)

src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/serve.py
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/services/iscsi.py
src/pybind/mgr/cephadm/services/nfs.py

index acfe95155d8c2c8c484eab22c6cc4d7dc79a33cf..96a08b7330b6be79ef3f4e3e274a5a4fcac7e07b 100644 (file)
@@ -1944,10 +1944,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
                                              forcename=name)
 
             if not did_config and config_func:
-                if daemon_type == 'rgw':
-                    config_func(spec, daemon_id)
-                else:
-                    config_func(spec)
+                config_func(spec, daemon_id)
                 did_config = True
 
             daemon_spec = self.cephadm_services[daemon_type_to_service(daemon_type)].make_daemon_spec(
index aeb8d0317affe31fec84db14e1a6d50c5ff4e240..4f3974bfd80c7229e6ceefbb928d334760161036 100644 (file)
@@ -2,7 +2,7 @@ import json
 import logging
 from collections import defaultdict
 from contextlib import contextmanager
-from typing import TYPE_CHECKING, Optional, List, Callable, cast, Set, Dict, Any, Union, Tuple, Iterator
+from typing import TYPE_CHECKING, Optional, List, cast, Set, Dict, Any, Union, Tuple, Iterator
 
 from cephadm import remotes
 
@@ -14,7 +14,7 @@ except ImportError:
 
 from ceph.deployment import inventory
 from ceph.deployment.drive_group import DriveGroupSpec
-from ceph.deployment.service_spec import ServiceSpec, HostPlacementSpec, RGWSpec, \
+from ceph.deployment.service_spec import ServiceSpec, HostPlacementSpec, \
     HA_RGWSpec, CustomContainerSpec
 from ceph.utils import str_to_datetime, datetime_now
 
@@ -435,15 +435,6 @@ class CephadmServe:
 
         return r
 
-    def _config_fn(self, service_type: str) -> Optional[Callable[[ServiceSpec], None]]:
-        fn = {
-            'mds': self.mgr.mds_service.config,
-            'rgw': self.mgr.rgw_service.config,
-            'nfs': self.mgr.nfs_service.config,
-            'iscsi': self.mgr.iscsi_service.config,
-        }.get(service_type)
-        return cast(Callable[[ServiceSpec], None], fn)
-
     def _apply_service(self, spec: ServiceSpec) -> bool:
         """
         Schedule a service.  Deploy new daemons or remove old ones, depending
@@ -461,8 +452,6 @@ class CephadmServe:
             return False
         self.log.debug('Applying service %s spec' % service_name)
 
-        config_func = self._config_fn(service_type)
-
         if service_type == 'osd':
             self.mgr.osd_service.create_from_spec(cast(DriveGroupSpec, spec))
             # TODO: return True would result in a busy loop
@@ -544,12 +533,8 @@ class CephadmServe:
                                                      prefix=spec.service_id,
                                                      forcename=name)
 
-                if not did_config and config_func:
-                    if daemon_type == 'rgw':
-                        rgw_config_func = cast(Callable[[RGWSpec, str], None], config_func)
-                        rgw_config_func(cast(RGWSpec, spec), daemon_id)
-                    else:
-                        config_func(spec)
+                if not did_config:
+                    self.mgr.cephadm_services[service_type].config(spec, daemon_id)
                     did_config = True
 
                 daemon_spec = self.mgr.cephadm_services[service_type].make_daemon_spec(
index 4cff688e875c604ef7f1605450d2d6423e0c46f9..8d35483c6d26c68f0deade2e5f369ee25c2723e4 100644 (file)
@@ -124,6 +124,13 @@ class CephadmService(metaclass=ABCMeta):
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
         raise NotImplementedError()
 
+    def config(self, spec: ServiceSpec, daemon_id: str) -> None:
+        """
+        Configure the cluster for this service. Only called *once* per
+        service apply. Not for every daemon.
+        """
+        pass
+
     def daemon_check_post(self, daemon_descrs: List[DaemonDescription]) -> None:
         """The post actions needed to be done after daemons are checked"""
         if self.mgr.config_dashboard:
@@ -560,7 +567,7 @@ class MgrService(CephService):
 class MdsService(CephService):
     TYPE = 'mds'
 
-    def config(self, spec: ServiceSpec) -> None:
+    def config(self, spec: ServiceSpec, daemon_id: str) -> None:
         assert self.TYPE == spec.service_type
         assert spec.service_id
 
@@ -616,7 +623,7 @@ class MdsService(CephService):
 class RgwService(CephService):
     TYPE = 'rgw'
 
-    def config(self, spec: RGWSpec, rgw_id: str) -> None:
+    def config(self, spec: RGWSpec, rgw_id: str) -> None:  # type: ignore
         assert self.TYPE == spec.service_type
 
         # create realm, zonegroup, and zone if needed
index 2241b214935955d4f5ef083bb313fce3cd7ec29f..cf1e6932eb92a851dd87990d6806c4948b800517 100644 (file)
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
 class IscsiService(CephService):
     TYPE = 'iscsi'
 
-    def config(self, spec: IscsiServiceSpec) -> None:
+    def config(self, spec: IscsiServiceSpec, daemon_id: str) -> None:  # type: ignore
         assert self.TYPE == spec.service_type
         assert spec.pool
         self.mgr._check_pool_exists(spec.pool, spec.service_name())
index b4e884f330d3031d6291619f56623b653f7d9f52..9136b7ba9187c72986e456c557d56bc91589d833 100644 (file)
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
 class NFSService(CephService):
     TYPE = 'nfs'
 
-    def config(self, spec: NFSServiceSpec) -> None:
+    def config(self, spec: NFSServiceSpec, daemon_id: str) -> None:  # type: ignore
         assert self.TYPE == spec.service_type
         assert spec.pool
         self.mgr._check_pool_exists(spec.pool, spec.service_name())