ep = []
protocol = 'https' if rgw_spec.ssl else 'http'
- for s in self.mgr.cache.get_daemons_by_service(rgw_spec.service_name()):
+ daemons = self.mgr.cache.get_daemons_by_service(rgw_spec.service_name())
+ if not daemons:
+ self.log.debug(f'No rgw daemons found yet for \
+ service {rgw_spec.service_name()}, will retry')
+ return
+
+ for s in daemons:
if s.ports:
for p in s.ports:
if s.hostname is not None:
ep.append(f'{protocol}://{host_addr}:{p}')
else:
logger.error("Hostname is None for service: %s", s)
+
+ if not ep:
+ self.log.warning(
+ "Computed endpoints are empty for service %s; deferring zone update",
+ rgw_spec.service_name()
+ )
+ return
+
zone_update_cmd = {
'prefix': 'rgw zone modify',
'realm_name': rgw_spec.rgw_realm,
self.mgr.set_health_warning('CEPHADM_RGW', 'Cannot update rgw endpoints, error: {err}', 1,
[f'Cannot update rgw endpoints for daemon {rgw_spec.service_name()}, error: {err}'])
else:
+ self.log.debug(f'Successfully updated rgw zone endpoints: {out}')
self.mgr.remove_health_warning('CEPHADM_RGW')
def _apply_service(self, spec: ServiceSpec) -> Optional[Dict[int, Dict[int, Optional[str]]]]: