Skip to content

Commit 14b1dd7

Browse files
mgr/cephadm: Adding genric cert/key name support for get certificates
Fixes: https://tracker.ceph.com/issues/71707 Signed-off-by: Shweta Bhosale <[email protected]>
1 parent 344159e commit 14b1dd7

File tree

1 file changed

+59
-19
lines changed

1 file changed

+59
-19
lines changed

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

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -333,15 +333,44 @@ def get_certificates(self,
333333
if not self.requires_certificates or not svc_spec.ssl:
334334
return EMPTY_TLS_KEYPAIR
335335

336+
return self.get_certificates_generic(
337+
svc_spec=svc_spec,
338+
daemon_spec=daemon_spec,
339+
cert_attr='ssl_cert',
340+
key_attr='ssl_key',
341+
cert_source_attr='certificate_source',
342+
cert_name=self.cert_name,
343+
key_name=self.key_name,
344+
ips=ips,
345+
fqdns=fqdns,
346+
custom_sans=custom_sans
347+
)
348+
349+
def get_certificates_generic(
350+
self,
351+
svc_spec: ServiceSpec,
352+
daemon_spec: CephadmDaemonDeploySpec,
353+
cert_attr: str,
354+
key_attr: str,
355+
cert_source_attr: str,
356+
cert_name: str,
357+
key_name: str,
358+
custom_sans: Optional[List[str]] = None,
359+
ips: Optional[List[str]] = None,
360+
fqdns: Optional[List[str]] = None
361+
) -> CertKeyPair:
362+
336363
ips = ips or [self.mgr.inventory.get_addr(daemon_spec.host)]
337364
fqdns = fqdns or [self.mgr.get_fqdn(daemon_spec.host)]
365+
custom_sans = custom_sans or []
338366

339-
cert_source = svc_spec.certificate_source
367+
cert_source = getattr(svc_spec, cert_source_attr, None)
340368
logger.debug(f'Getting certificate for {svc_spec.service_name()} using source: {cert_source}')
369+
341370
if cert_source == CertificateSource.INLINE.value:
342-
return self._get_certificates_from_spec(svc_spec, daemon_spec)
371+
return self._get_certificates_from_spec(svc_spec, daemon_spec, cert_attr, key_attr, cert_name, key_name)
343372
elif cert_source == CertificateSource.REFERENCE.value:
344-
return self._get_certificates_from_certmgr_store(svc_spec, fqdns)
373+
return self._get_certificates_from_certmgr_store(svc_spec, fqdns, cert_name, key_name)
345374
elif cert_source == CertificateSource.CEPHADM_SIGNED.value:
346375
return self._get_cephadm_signed_certificates(svc_spec, daemon_spec, ips, fqdns, custom_sans)
347376
else:
@@ -351,44 +380,55 @@ def get_certificates(self,
351380
def _get_certificates_from_spec(
352381
self,
353382
svc_spec: ServiceSpec,
354-
daemon_spec: CephadmDaemonDeploySpec
383+
daemon_spec: CephadmDaemonDeploySpec,
384+
cert_attr: str,
385+
key_attr: str,
386+
cert_name: str,
387+
key_name: str
355388
) -> CertKeyPair:
356389
"""
357390
Fetch and persist the TLS certificate and key for a service spec.
358391
Returns:
359392
A CertKeyPair if both are available; otherwise EMPTY_TLS_KEYPAIR.
360393
"""
361-
cert = getattr(svc_spec, 'ssl_cert', None)
362-
key = getattr(svc_spec, 'ssl_key', None)
394+
cert = getattr(svc_spec, cert_attr, None)
395+
key = getattr(svc_spec, key_attr, None)
363396
if cert and key:
364397
service_name = svc_spec.service_name()
365398
host = daemon_spec.host
366-
self.mgr.cert_mgr.save_cert(self.cert_name, cert, service_name, host, user_made=True)
367-
self.mgr.cert_mgr.save_key(self.key_name, key, service_name, host, user_made=True)
399+
self.mgr.cert_mgr.save_cert(cert_name, cert, service_name, host, user_made=True)
400+
self.mgr.cert_mgr.save_key(key_name, key, service_name, host, user_made=True)
368401
return CertKeyPair(cert=cert, key=key)
369402

370403
logger.error(
371404
f"Cannot get cert/key '{self.cert_name}/{self.key_name}' for service '{svc_spec.service_name()}'"
372405
)
373406
return EMPTY_TLS_KEYPAIR
374407

375-
def _get_certificates_from_certmgr_store(self, svc_spec: ServiceSpec, fqdns: List[str]) -> CertKeyPair:
408+
def _get_certificates_from_certmgr_store(
409+
self,
410+
svc_spec: ServiceSpec,
411+
fqdns: List[str],
412+
cert_name: str,
413+
key_name: str
414+
) -> CertKeyPair:
376415
host = fqdns[0] if fqdns else None
377-
cert = self.mgr.cert_mgr.get_cert(self.cert_name, svc_spec.service_name(), host)
378-
key = self.mgr.cert_mgr.get_key(self.key_name, svc_spec.service_name(), host)
416+
cert = self.mgr.cert_mgr.get_cert(cert_name, svc_spec.service_name(), host)
417+
key = self.mgr.cert_mgr.get_key(key_name, svc_spec.service_name(), host)
379418
if cert and key:
380419
return CertKeyPair(cert=cert, key=key)
381420
else:
382-
logger.error(f'Failed to get cert/key {self.cert_name} for service {svc_spec.service_name()} host: {host} from the certmgr store.')
421+
logger.error(f'Failed to get cert/key {cert_name} for service {svc_spec.service_name()} host: {host} from the certmgr store.')
383422
return EMPTY_TLS_KEYPAIR
384423

385-
def _get_cephadm_signed_certificates(self,
386-
svc_spec: ServiceSpec,
387-
daemon_spec: CephadmDaemonDeploySpec,
388-
ips: Optional[List[str]] = None,
389-
fqdns: Optional[List[str]] = None,
390-
custom_sans: Optional[List[str]] = None,
391-
) -> CertKeyPair:
424+
def _get_cephadm_signed_certificates(
425+
self,
426+
svc_spec: ServiceSpec,
427+
daemon_spec: CephadmDaemonDeploySpec,
428+
ips: List[str],
429+
fqdns: List[str],
430+
custom_sans: List[str],
431+
) -> CertKeyPair:
392432

393433
custom_sans = custom_sans or svc_spec.custom_sans or []
394434
ips = ips or [self.mgr.inventory.get_addr(daemon_spec.host)]

0 commit comments

Comments
 (0)