]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: re-check dashboard <-> rgw creds when rgw daemons created/destroyed
authorSage Weil <sage@newdream.net>
Thu, 8 Jul 2021 17:22:59 +0000 (13:22 -0400)
committerSebastian Wagner <sewagner@redhat.com>
Thu, 2 Sep 2021 14:24:37 +0000 (16:24 +0200)
We don't always know when a realm is created/destroyed, but we can use
service config and purge to cover most such cases.

Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit 91e185d956495885575f052848204169937efde7)

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

index c0317b0443f5e54739fb36ed6a043ee63ed4d7aa..b62b4548675da9679d38e0515bc7f44d54ea5545 100644 (file)
@@ -467,6 +467,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         self.template = TemplateMgr(self)
 
         self.requires_post_actions: Set[str] = set()
+        self.need_connect_dashboard_rgw = False
 
         self.config_checker = CephadmConfigChecks(self)
 
@@ -2660,3 +2661,7 @@ Then run the following:
             daemons_table += "{:<20} {:<15}\n".format(d.daemon_type, d.daemon_id)
 
         return "Scheduled to remove the following daemons from host '{}'\n{}".format(hostname, daemons_table)
+
+    def trigger_connect_dashboard_rgw(self) -> None:
+        self.need_connect_dashboard_rgw = True
+        self.event.set()
index 3f78af74d5286cffa4433f22d06055c31e78c63d..1c9bd5f4c56e5f3ca0394c267d9201e9c96a6287 100644 (file)
@@ -38,6 +38,8 @@ if TYPE_CHECKING:
 
 logger = logging.getLogger(__name__)
 
+REQUIRES_POST_ACTIONS = ['grafana', 'iscsi', 'prometheus', 'alertmanager', 'rgw']
+
 
 class CephadmServe:
     """
@@ -79,6 +81,12 @@ class CephadmServe:
 
                 self._update_paused_health()
 
+                if self.mgr.need_connect_dashboard_rgw and self.mgr.config_dashboard:
+                    self.mgr.need_connect_dashboard_rgw = False
+                    if 'dashboard' in self.mgr.get('mgr_map')['modules']:
+                        self.log.info('Checking dashboard <-> RGW credentials')
+                        self.mgr.remote('dashboard', 'connect_rgw')
+
                 if not self.mgr.paused:
                     self.mgr.to_remove_osds.process_removal_queue()
 
@@ -888,7 +896,7 @@ class CephadmServe:
                 continue
 
             # These daemon types require additional configs after creation
-            if dd.daemon_type in ['grafana', 'iscsi', 'prometheus', 'alertmanager', 'nfs']:
+            if dd.daemon_type in REQUIRES_POST_ACTIONS:
                 daemons_post[dd.daemon_type].append(dd)
 
             if self.mgr.cephadm_services[daemon_type_to_service(dd.daemon_type)].get_active_daemon(
@@ -1065,9 +1073,7 @@ class CephadmServe:
                         sd = daemon_spec.to_daemon_description(
                             DaemonDescriptionStatus.running, 'starting')
                         self.mgr.cache.add_daemon(daemon_spec.host, sd)
-                        if daemon_spec.daemon_type in [
-                            'grafana', 'iscsi', 'prometheus', 'alertmanager'
-                        ]:
+                        if daemon_spec.daemon_type in REQUIRES_POST_ACTIONS:
                             self.mgr.requires_post_actions.add(daemon_spec.daemon_type)
                     self.mgr.cache.invalidate_host_daemons(daemon_spec.host)
 
index 81fae8efedcc2b05b66d62920db1b26538c9c57d..7a7d6b4073a5e99ea587955189c12ebbfac018b7 100644 (file)
@@ -795,6 +795,7 @@ class RgwService(CephService):
         logger.info('Saving service %s spec with placement %s' % (
             spec.service_name(), spec.placement.pretty_str()))
         self.mgr.spec_store.save(spec)
+        self.mgr.trigger_connect_dashboard_rgw()
 
     def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonDeploySpec:
         assert self.TYPE == daemon_spec.daemon_type
@@ -874,6 +875,7 @@ class RgwService(CephService):
             'prefix': 'config-key rm',
             'key': f'rgw/cert/{service_name}',
         })
+        self.mgr.trigger_connect_dashboard_rgw()
 
     def post_remove(self, daemon: DaemonDescription) -> None:
         super().post_remove(daemon)
@@ -918,6 +920,9 @@ class RgwService(CephService):
         warn_message = "WARNING: Removing RGW daemons can cause clients to lose connectivity. "
         return HandleCommandResult(-errno.EBUSY, '', warn_message)
 
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
+        self.mgr.trigger_connect_dashboard_rgw()
+
 
 class RbdMirrorService(CephService):
     TYPE = 'rbd-mirror'