]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: Add RgwService
authorSebastian Wagner <sebastian.wagner@suse.com>
Mon, 4 May 2020 12:07:41 +0000 (14:07 +0200)
committerSebastian Wagner <sebastian.wagner@suse.com>
Thu, 7 May 2020 11:06:01 +0000 (13:06 +0200)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/services/cephadmservice.py

index b5fafa1768b1a84a1dc866959658c583d490a534..d6c38f6b37846d0fc276ee238ae23c15795d0c01 100644 (file)
@@ -38,7 +38,7 @@ from orchestrator import OrchestratorError, OrchestratorValidationError, HostSpe
 
 from . import remotes
 from . import utils
-from .services.cephadmservice import MonService, MgrService, MdsService
+from .services.cephadmservice import MonService, MgrService, MdsService, RgwService
 from .services.nfs import NFSService
 from .services.osd import RemoveUtil, OSDRemoval, OSDService
 from .inventory import Inventory, SpecStore, HostCache
@@ -426,6 +426,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         self.mon_service = MonService(self)
         self.mgr_service = MgrService(self)
         self.mds_service = MdsService(self)
+        self.rgw_service = RgwService(self)
 
     def shutdown(self):
         self.log.debug('shutdown')
@@ -1932,7 +1933,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
             'mgr': self.mgr_service.create,
             'osd': self.create_osds,  # osds work a bit different.
             'mds': self.mds_service.create,
-            'rgw': self._create_rgw,
+            'rgw': self.rgw_service.create,
             'rbd-mirror': self._create_rbd_mirror,
             'nfs': self.nfs_service.create,
             'grafana': self._create_grafana,
@@ -1944,7 +1945,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         }
         config_fns = {
             'mds': self.mds_service.config,
-            'rgw': self._config_rgw,
+            'rgw': self.rgw_service.config,
             'nfs': self.nfs_service.config,
             'iscsi': self._config_iscsi,
         }
@@ -2238,64 +2239,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule):
         return self._apply(spec)
 
     def add_rgw(self, spec):
-        return self._add_daemon('rgw', spec, self._create_rgw, self._config_rgw)
-
-    def _config_rgw(self, spec):
-        # ensure rgw_realm and rgw_zone is set for these daemons
-        ret, out, err = self.check_mon_command({
-            'prefix': 'config set',
-            'who': f"{utils.name_to_config_section('rgw')}.{spec.service_id}",
-            'name': 'rgw_zone',
-            'value': spec.rgw_zone,
-        })
-        ret, out, err = self.check_mon_command({
-            'prefix': 'config set',
-            'who': f"{utils.name_to_config_section('rgw')}.{spec.rgw_realm}",
-            'name': 'rgw_realm',
-            'value': spec.rgw_realm,
-        })
-        ret, out, err = self.check_mon_command({
-            'prefix': 'config set',
-            'who': f"{utils.name_to_config_section('rgw')}.{spec.service_id}",
-            'name': 'rgw_frontends',
-            'value': spec.rgw_frontends_config_value(),
-        })
-
-        if spec.rgw_frontend_ssl_certificate:
-            if isinstance(spec.rgw_frontend_ssl_certificate, list):
-                cert_data = '\n'.join(spec.rgw_frontend_ssl_certificate)
-            else:
-                cert_data = spec.rgw_frontend_ssl_certificate
-            ret, out, err = self.check_mon_command({
-                'prefix': 'config-key set',
-                'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.crt',
-                'val': cert_data,
-            })
-
-        if spec.rgw_frontend_ssl_key:
-            if isinstance(spec.rgw_frontend_ssl_key, list):
-                key_data = '\n'.join(spec.rgw_frontend_ssl_key)
-            else:
-                key_data = spec.rgw_frontend_ssl_key
-            ret, out, err = self.check_mon_command({
-                'prefix': 'config-key set',
-                'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.key',
-                'val': key_data,
-            })
-
-        logger.info('Saving service %s spec with placement %s' % (
-            spec.service_name(), spec.placement.pretty_str()))
-        self.spec_store.save(spec)
-
-    def _create_rgw(self, rgw_id, host):
-        ret, keyring, err = self.check_mon_command({
-            'prefix': 'auth get-or-create',
-            'entity': f"{utils.name_to_config_section('rgw')}.{rgw_id}",
-            'caps': ['mon', 'allow *',
-                     'mgr', 'allow rw',
-                     'osd', 'allow rwx'],
-        })
-        return self._create_daemon('rgw', rgw_id, host, keyring=keyring)
+        return self._add_daemon('rgw', spec, self.rgw_service.create, self.rgw_service.config)
 
     @trivial_completion
     def apply_rgw(self, spec):
index db7264854c0b42149368297011f60e9f1b05a366..900783b720927bdaee02b895409e97ce75444a2a 100644 (file)
@@ -1,11 +1,15 @@
+import logging
 from typing import  TYPE_CHECKING
 
-from ceph.deployment.service_spec import ServiceSpec
+from ceph.deployment.service_spec import ServiceSpec, RGWSpec
 from orchestrator import OrchestratorError
+from cephadm import utils
 
 if TYPE_CHECKING:
     from cephadm.module import CephadmOrchestrator
 
+logger = logging.getLogger(__name__)
+
 
 class CephadmService:
     """
@@ -94,3 +98,62 @@ class MdsService(CephadmService):
                      'mds', 'allow'],
         })
         return self.mgr._create_daemon('mds', mds_id, host, keyring=keyring)
+
+
+class RgwService(CephadmService):
+    def config(self, spec: RGWSpec):
+        # ensure rgw_realm and rgw_zone is set for these daemons
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'config set',
+            'who': f"{utils.name_to_config_section('rgw')}.{spec.service_id}",
+            'name': 'rgw_zone',
+            'value': spec.rgw_zone,
+        })
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'config set',
+            'who': f"{utils.name_to_config_section('rgw')}.{spec.rgw_realm}",
+            'name': 'rgw_realm',
+            'value': spec.rgw_realm,
+        })
+        ret, out, err = self.mgr.check_mon_command({
+            'prefix': 'config set',
+            'who': f"{utils.name_to_config_section('rgw')}.{spec.service_id}",
+            'name': 'rgw_frontends',
+            'value': spec.rgw_frontends_config_value(),
+        })
+
+        if spec.rgw_frontend_ssl_certificate:
+            if isinstance(spec.rgw_frontend_ssl_certificate, list):
+                cert_data = '\n'.join(spec.rgw_frontend_ssl_certificate)
+            else:
+                cert_data = spec.rgw_frontend_ssl_certificate
+            ret, out, err = self.mgr.check_mon_command({
+                'prefix': 'config-key set',
+                'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.crt',
+                'val': cert_data,
+            })
+
+        if spec.rgw_frontend_ssl_key:
+            if isinstance(spec.rgw_frontend_ssl_key, list):
+                key_data = '\n'.join(spec.rgw_frontend_ssl_key)
+            else:
+                key_data = spec.rgw_frontend_ssl_key  # type: ignore
+            ret, out, err = self.mgr.check_mon_command({
+                'prefix': 'config-key set',
+                'key': f'rgw/cert/{spec.rgw_realm}/{spec.rgw_zone}.key',
+                'val': key_data,
+            })
+
+        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, rgw_id, host) -> str:
+        ret, keyring, err = self.mgr.check_mon_command({
+            'prefix': 'auth get-or-create',
+            'entity': f"{utils.name_to_config_section('rgw')}.{rgw_id}",
+            'caps': ['mon', 'allow *',
+                     'mgr', 'allow rw',
+                     'osd', 'allow rwx'],
+        })
+        return self.mgr._create_daemon('rgw', rgw_id, host, keyring=keyring)