]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: introduce `CephService` class
authorMichael Fritch <mfritch@suse.com>
Tue, 1 Sep 2020 20:39:17 +0000 (14:39 -0600)
committerNathan Cutler <ncutler@suse.com>
Tue, 6 Oct 2020 09:40:53 +0000 (11:40 +0200)
- split the cephx related keyring functions into a `CephService` class
- move _get_config_and_keyring and get_keyring_entity to this new class
- monitoring stack (prom, grafana, etc) have no use for cephx keyrings

Signed-off-by: Michael Fritch <mfritch@suse.com>
(cherry picked from commit c133705892cce3bd9ccd981e8080511bdbc12a0e)

src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/services/iscsi.py
src/pybind/mgr/cephadm/services/nfs.py
src/pybind/mgr/cephadm/services/osd.py
src/pybind/mgr/cephadm/tests/test_services.py

index 8f64e934387de71662748868c5210f8e46054c21..9471ac84a7f729099da503919dfca06009044d4c 100644 (file)
@@ -37,7 +37,7 @@ from . import remotes
 from . import utils
 from .migrations import Migrations
 from .services.cephadmservice import MonService, MgrService, MdsService, RgwService, \
-    RbdMirrorService, CrashService, CephadmService, AuthEntity
+    RbdMirrorService, CrashService, CephadmService
 from .services.iscsi import IscsiService
 from .services.nfs import NFSService
 from .services.osd import RemoveUtil, OSDQueue, OSDService, OSD, NotFoundError
@@ -1942,31 +1942,6 @@ To check that the host is reachable:
                 deps.append(dd.name())
         return sorted(deps)
 
-    def _get_config_and_keyring(self, daemon_type, daemon_id, host,
-                                keyring=None,
-                                extra_ceph_config=None):
-        # type: (str, str, str, Optional[str], Optional[str]) -> Dict[str, Any]
-        # keyring
-        if not keyring:
-            entity: AuthEntity = \
-                self.cephadm_services[daemon_type].get_auth_entity(daemon_id, host=host)
-            ret, keyring, err = self.check_mon_command({
-                'prefix': 'auth get',
-                'entity': entity,
-            })
-
-        # generate config
-        ret, config, err = self.check_mon_command({
-            "prefix": "config generate-minimal-conf",
-        })
-        if extra_ceph_config:
-            config += extra_ceph_config
-
-        return {
-            'config': config,
-            'keyring': keyring,
-        }
-
     def _create_daemon(self,
                        daemon_spec: CephadmDaemonSpec,
                        reconfig=False,
index 476dde93751ff284e3cc4b361c9f9a42feb9c1cc..648ca1c931e7a91018ebce8a56630d80929523e0 100644 (file)
@@ -90,18 +90,7 @@ class CephadmService(metaclass=ABCMeta):
         raise NotImplementedError()
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
-        # Ceph.daemons (mon, mgr, mds, osd, etc)
-        cephadm_config = self.mgr._get_config_and_keyring(
-            daemon_spec.daemon_type,
-            daemon_spec.daemon_id,
-            host=daemon_spec.host,
-            keyring=daemon_spec.keyring,
-            extra_ceph_config=daemon_spec.extra_config.pop('config', ''))
-
-        if daemon_spec.extra_config:
-            cephadm_config.update({'files': daemon_spec.extra_config})
-
-        return cephadm_config, []
+        raise NotImplementedError()
 
     def daemon_check_post(self, daemon_descrs: List[DaemonDescription]):
         """The post actions needed to be done after daemons are checked"""
@@ -229,6 +218,22 @@ class CephadmService(metaclass=ABCMeta):
         """
         pass
 
+
+class CephService(CephadmService):
+    def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        # Ceph.daemons (mon, mgr, mds, osd, etc)
+        cephadm_config = self.get_config_and_keyring(
+            daemon_spec.daemon_type,
+            daemon_spec.daemon_id,
+            host=daemon_spec.host,
+            keyring=daemon_spec.keyring,
+            extra_ceph_config=daemon_spec.extra_config.pop('config', ''))
+
+        if daemon_spec.extra_config:
+            cephadm_config.update({'files': daemon_spec.extra_config})
+
+        return cephadm_config, []
+
     def get_auth_entity(self, daemon_id: str, host: str = "") -> AuthEntity:
         """
         Map the daemon id to a cephx keyring entity name
@@ -246,8 +251,35 @@ class CephadmService(metaclass=ABCMeta):
         else:
             raise OrchestratorError("unknown daemon type")
 
+    def get_config_and_keyring(self,
+                               daemon_type: str,
+                               daemon_id: str,
+                               host: str,
+                               keyring: Optional[str] = None,
+                               extra_ceph_config: Optional[str] = None
+                               ) -> Dict[str, Any]:
+        # keyring
+        if not keyring:
+            entity: AuthEntity = self.get_auth_entity(daemon_id, host=host)
+            ret, keyring, err = self.mgr.check_mon_command({
+                'prefix': 'auth get',
+                'entity': entity,
+            })
+
+        # generate config
+        ret, config, err = self.mgr.check_mon_command({
+            "prefix": "config generate-minimal-conf",
+        })
+        if extra_ceph_config:
+            config += extra_ceph_config
+
+        return {
+            'config': config,
+            'keyring': keyring,
+        }
+
 
-class MonService(CephadmService):
+class MonService(CephService):
     TYPE = 'mon'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
@@ -332,7 +364,7 @@ class MonService(CephadmService):
         })
 
 
-class MgrService(CephadmService):
+class MgrService(CephService):
     TYPE = 'mgr'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
@@ -408,7 +440,7 @@ class MgrService(CephadmService):
         return bool(num)
 
 
-class MdsService(CephadmService):
+class MdsService(CephService):
     TYPE = 'mds'
 
     def config(self, spec: ServiceSpec) -> None:
@@ -455,7 +487,7 @@ class MdsService(CephadmService):
         return DaemonDescription()
 
 
-class RgwService(CephadmService):
+class RgwService(CephService):
     TYPE = 'rgw'
 
     def config(self, spec: RGWSpec, rgw_id: str):
@@ -655,7 +687,7 @@ class RgwService(CephadmService):
             self.mgr.log.info('updated period')
 
 
-class RbdMirrorService(CephadmService):
+class RbdMirrorService(CephService):
     TYPE = 'rbd-mirror'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
@@ -674,7 +706,7 @@ class RbdMirrorService(CephadmService):
         return self.mgr._create_daemon(daemon_spec)
 
 
-class CrashService(CephadmService):
+class CrashService(CephService):
     TYPE = 'crash'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
index 237440d50e6ef308725a63f0aa62dee3c9213a4c..d4d34d4c6e1ad82685cd06a48727d3a2e41645af 100644 (file)
@@ -6,13 +6,13 @@ from mgr_module import MonCommandFailed
 from ceph.deployment.service_spec import IscsiServiceSpec
 
 from orchestrator import DaemonDescription, OrchestratorError
-from .cephadmservice import CephadmService, CephadmDaemonSpec
+from .cephadmservice import CephadmDaemonSpec, CephService
 from .. import utils
 
 logger = logging.getLogger(__name__)
 
 
-class IscsiService(CephadmService):
+class IscsiService(CephService):
     TYPE = 'iscsi'
 
     def config(self, spec: IscsiServiceSpec) -> None:
index ed3e0c393f2f4b503bcf583734f1e05aa0751712..d3220ee4ab5c95803ec0893daaeb87281333988f 100644 (file)
@@ -7,7 +7,7 @@ import rados
 from orchestrator import OrchestratorError, DaemonDescription
 
 from cephadm import utils
-from cephadm.services.cephadmservice import CephadmService, CephadmDaemonSpec
+from cephadm.services.cephadmservice import CephadmDaemonSpec, CephService
 
 if TYPE_CHECKING:
     from cephadm.module import CephadmOrchestrator
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
 logger = logging.getLogger(__name__)
 
 
-class NFSService(CephadmService):
+class NFSService(CephService):
     TYPE = 'nfs'
 
     def config(self, spec: NFSServiceSpec) -> None:
@@ -81,7 +81,7 @@ class NFSService(CephadmService):
                 'ganesha.conf': get_ganesha_conf(),
             }
             config.update(
-                self.mgr._get_config_and_keyring(
+                self.get_config_and_keyring(
                     daemon_type, daemon_id,
                     keyring=keyring,
                     host=host
index 96ff202c2a18b3cca1bc3a6c84711a8502e2938a..9f350e82f5856f529c906aa1373a3429d66890ae 100644 (file)
@@ -12,13 +12,13 @@ from cephadm.utils import forall_hosts
 from orchestrator import OrchestratorError
 from mgr_module import MonCommandFailed
 
-from cephadm.services.cephadmservice import CephadmService, CephadmDaemonSpec
+from cephadm.services.cephadmservice import CephadmDaemonSpec, CephService
 
 logger = logging.getLogger(__name__)
 DATEFMT = '%Y-%m-%dT%H:%M:%S.%f'
 
 
-class OSDService(CephadmService):
+class OSDService(CephService):
     TYPE = 'osd'
 
     def create_from_spec(self, drive_group: DriveGroupSpec) -> str:
index 865b4856deca31ef5f29b3366f95859643ac09bc..2a66665bb63059f0ff262f0b4f84cd9b574926b1 100644 (file)
@@ -108,7 +108,7 @@ class TestCephadmService:
             assert "%s.id1" % daemon_type == \
                 cephadm_services[daemon_type].get_auth_entity("id1")
 
-        with pytest.raises(OrchestratorError):
+        with pytest.raises(AttributeError):
             for daemon_type in ['grafana', 'alertmanager', 'prometheus', 'node-exporter']:
                 cephadm_services[daemon_type].get_auth_entity("id1", "host")
                 cephadm_services[daemon_type].get_auth_entity("id1", "")