From 91e185d956495885575f052848204169937efde7 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 8 Jul 2021 13:22:59 -0400 Subject: [PATCH] mgr/cephadm: re-check dashboard <-> rgw creds when rgw daemons created/destroyed 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 --- src/pybind/mgr/cephadm/module.py | 5 +++++ src/pybind/mgr/cephadm/serve.py | 14 ++++++++++---- src/pybind/mgr/cephadm/services/cephadmservice.py | 5 +++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index a06f57512def0..96e13ac2a7150 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -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) @@ -2611,3 +2612,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() diff --git a/src/pybind/mgr/cephadm/serve.py b/src/pybind/mgr/cephadm/serve.py index b36d24c991d8b..26c4683fe2b7b 100644 --- a/src/pybind/mgr/cephadm/serve.py +++ b/src/pybind/mgr/cephadm/serve.py @@ -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) diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index 96e459c70a7e7..d4796edf56bfe 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -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' -- 2.39.5