]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: assert the service_type during config/create
authorMichael Fritch <mfritch@suse.com>
Wed, 15 Jul 2020 22:23:59 +0000 (16:23 -0600)
committerSebastian Wagner <sebastian.wagner@suse.com>
Thu, 23 Jul 2020 13:20:10 +0000 (15:20 +0200)
ensure the passed ServiceSpec type matches the CephadmService type

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

src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/services/iscsi.py
src/pybind/mgr/cephadm/services/monitoring.py
src/pybind/mgr/cephadm/services/nfs.py

index 0738f352c7601e11900160ba2203b541c3937d90..6a1bda7c49ff8003e7adaeb08876a46db62c5ef0 100644 (file)
@@ -222,6 +222,7 @@ class MonService(CephadmService):
         """
         Create a new monitor on the given host.
         """
+        assert self.TYPE == daemon_spec.daemon_type
         name, host, network = daemon_spec.daemon_id, daemon_spec.host, daemon_spec.network
 
         # get mon. key
@@ -300,7 +301,9 @@ class MgrService(CephadmService):
         """
         Create a new manager instance on a host.
         """
+        assert self.TYPE == daemon_spec.daemon_type
         mgr_id, host = daemon_spec.daemon_id, daemon_spec.host
+
         # get mgr. key
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
@@ -319,8 +322,10 @@ class MdsService(CephadmService):
     TYPE = 'mds'
 
     def config(self, spec: ServiceSpec) -> None:
-        # ensure mds_join_fs is set for these daemons
+        assert self.TYPE == spec.service_type
         assert spec.service_id
+
+        # ensure mds_join_fs is set for these daemons
         ret, out, err = self.mgr.check_mon_command({
             'prefix': 'config set',
             'who': 'mds.' + spec.service_id,
@@ -329,6 +334,7 @@ class MdsService(CephadmService):
         })
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
         mds_id, host = daemon_spec.daemon_id, daemon_spec.host
 
         # get mgr. key
@@ -348,6 +354,8 @@ class RgwService(CephadmService):
     TYPE = 'rgw'
 
     def config(self, spec: RGWSpec) -> None:
+        assert self.TYPE == spec.service_type
+
         # ensure rgw_realm and rgw_zone is set for these daemons
         ret, out, err = self.mgr.check_mon_command({
             'prefix': 'config set',
@@ -403,7 +411,9 @@ class RgwService(CephadmService):
         self.mgr.spec_store.save(spec)
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
         rgw_id, host = daemon_spec.daemon_id, daemon_spec.host
+
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
             'entity': f"{utils.name_to_config_section('rgw')}.{rgw_id}",
@@ -421,7 +431,9 @@ class RbdMirrorService(CephadmService):
     TYPE = 'rbd-mirror'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
         daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
+
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
             'entity': 'client.rbd-mirror.' + daemon_id,
@@ -438,7 +450,9 @@ class CrashService(CephadmService):
     TYPE = 'crash'
 
     def create(self, daemon_spec: CephadmDaemonSpec) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
         daemon_id, host = daemon_spec.daemon_id, daemon_spec.host
+
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
             'entity': 'client.crash.' + host,
index 1c46dd674dea9c4bd48f369eaa8efea3fd5fedd7..86ec539cb5f55bbb6cbb5711116dee0b4d7abddc 100644 (file)
@@ -16,6 +16,7 @@ class IscsiService(CephadmService):
     TYPE = 'iscsi'
 
     def config(self, spec: IscsiServiceSpec) -> None:
+        assert self.TYPE == spec.service_type
         self.mgr._check_pool_exists(spec.pool, spec.service_name())
 
         logger.info('Saving service %s spec with placement %s' % (
@@ -23,10 +24,12 @@ class IscsiService(CephadmService):
         self.mgr.spec_store.save(spec)
 
     def create(self, daemon_spec: CephadmDaemonSpec[IscsiServiceSpec]) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        assert daemon_spec.spec
+
         spec = daemon_spec.spec
-        if spec is None:
-            raise OrchestratorError(f'Unable to deploy {daemon_spec.name()}: Service not found.')
         igw_id = daemon_spec.daemon_id
+
         ret, keyring, err = self.mgr.check_mon_command({
             'prefix': 'auth get-or-create',
             'entity': utils.name_to_auth_entity('iscsi', igw_id),
index 4616f34af243d262fa1ad14e3214879fd85c2103..f910a64446933d2bdee30304b35f822dd0ee3ae7 100644 (file)
@@ -13,9 +13,11 @@ class GrafanaService(CephadmService):
     DEFAULT_SERVICE_PORT = 3000
 
     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, 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]
@@ -76,9 +78,11 @@ class AlertmanagerService(CephadmService):
     DEFAULT_SERVICE_PORT = 9093
 
     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, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         deps = [] # type: List[str]
 
         # dashboard(s)
@@ -143,9 +147,11 @@ class PrometheusService(CephadmService):
     DEFAULT_SERVICE_PORT = 9095
 
     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, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         deps = []  # type: List[str]
 
         # scrape mgrs
@@ -230,7 +236,9 @@ class NodeExporterService(CephadmService):
     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, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
         return {}, []
index c47c4705d0aaa03aca5e0f35353aab290167921f..ed751ec4ec0a8a8d2357c9bc53143beac70af172 100644 (file)
@@ -21,6 +21,8 @@ class NFSService(CephadmService):
     TYPE = 'nfs'
 
     def generate_config(self, daemon_spec: CephadmDaemonSpec) -> Tuple[Dict[str, Any], List[str]]:
+        assert self.TYPE == daemon_spec.daemon_type
+
         daemon_type = daemon_spec.daemon_type
         daemon_id = daemon_spec.daemon_id
         host = daemon_spec.host
@@ -67,15 +69,21 @@ class NFSService(CephadmService):
         return cephadm_config, deps
 
     def config(self, spec: NFSServiceSpec) -> None:
+        assert self.TYPE == spec.service_type
         self.mgr._check_pool_exists(spec.pool, spec.service_name())
+
         logger.info('Saving service %s spec with placement %s' % (
             spec.service_name(), spec.placement.pretty_str()))
         self.mgr.spec_store.save(spec)
 
     def create(self, daemon_spec: CephadmDaemonSpec[NFSServiceSpec]) -> str:
+        assert self.TYPE == daemon_spec.daemon_type
+        assert daemon_spec.spec
+
         daemon_id = daemon_spec.daemon_id
         host = daemon_spec.host
         spec = daemon_spec.spec
+
         logger.info('Create daemon %s on host %s with spec %s' % (
             daemon_id, host, spec))
         return self.mgr._create_daemon(daemon_spec)