Skip to content

Commit 34e8dee

Browse files
authored
Merge pull request ceph#61694 from rkachach/fix_issue_69863
mgr/cephadm: reconfig rgw and ingress daemons when certificate changes Reviewed-by: Adam King <[email protected]>
2 parents 0401493 + f21cb07 commit 34e8dee

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -996,6 +996,21 @@ class RgwService(CephService):
996996
def allow_colo(self) -> bool:
997997
return True
998998

999+
@classmethod
1000+
def get_dependencies(cls, mgr: "CephadmOrchestrator",
1001+
spec: Optional[ServiceSpec] = None,
1002+
daemon_type: Optional[str] = None) -> List[str]:
1003+
1004+
deps = []
1005+
rgw_spec = cast(RGWSpec, spec)
1006+
ssl_cert = getattr(rgw_spec, 'rgw_frontend_ssl_certificate', None)
1007+
if ssl_cert:
1008+
if isinstance(ssl_cert, list):
1009+
ssl_cert = '\n'.join(ssl_cert)
1010+
deps.append(f'ssl-cert:{str(utils.md5_hash(ssl_cert))}')
1011+
1012+
return sorted(deps)
1013+
9991014
def set_realm_zg_zone(self, spec: RGWSpec) -> None:
10001015
assert self.TYPE == spec.service_type
10011016

@@ -1271,6 +1286,12 @@ def ingress_present() -> bool:
12711286
def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
12721287
self.mgr.trigger_connect_dashboard_rgw()
12731288

1289+
def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[str, Any], List[str]]:
1290+
svc_spec = cast(RGWSpec, self.mgr.spec_store[daemon_spec.service_name].spec)
1291+
config, parent_deps = super().generate_config(daemon_spec)
1292+
rgw_deps = parent_deps + self.get_dependencies(self.mgr, svc_spec)
1293+
return config, rgw_deps
1294+
12741295

12751296
@register_cephadm_service
12761297
class RbdMirrorService(CephService):

src/pybind/mgr/cephadm/services/ingress.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,18 @@ def get_haproxy_dependencies(mgr: "CephadmOrchestrator", spec: Optional[ServiceS
9797
# sufficient to detect changes.
9898
if not spec:
9999
return []
100+
100101
ingress_spec = cast(IngressSpec, spec)
101102
assert ingress_spec.backend_service
102103
daemons = mgr.cache.get_daemons_by_service(ingress_spec.backend_service)
103-
return sorted([d.name() for d in daemons])
104+
deps = [d.name() for d in daemons]
105+
for attr in ['ssl_cert', 'ssl_key']:
106+
ssl_cert_key = getattr(ingress_spec, attr, None)
107+
if ssl_cert_key:
108+
assert isinstance(ssl_cert_key, str)
109+
deps.append(f'ssl-cert-key:{str(utils.md5_hash(ssl_cert_key))}')
110+
111+
return sorted(deps)
104112

105113
def haproxy_generate_config(
106114
self,
@@ -224,11 +232,12 @@ def haproxy_generate_config(
224232
"haproxy.cfg": haproxy_conf,
225233
}
226234
}
235+
227236
if spec.ssl_cert:
228-
ssl_cert = spec.ssl_cert
229-
if isinstance(ssl_cert, list):
230-
ssl_cert = '\n'.join(ssl_cert)
231-
config_files['files']['haproxy.pem'] = ssl_cert
237+
config_files['files']['haproxy.pem'] = spec.ssl_cert
238+
239+
if spec.ssl_key:
240+
config_files['files']['haproxy.pem.key'] = spec.ssl_key
232241

233242
return config_files, self.get_haproxy_dependencies(self.mgr, spec)
234243

0 commit comments

Comments
 (0)