Skip to content

Commit 4b54e37

Browse files
authored
Merge pull request ceph#62491 from Kushal-deb/rgw-port-summary
mgr/cephadm: 'ceph orch ls' to display all the ports used by RGW service Reviewed-by: Adam King <[email protected]>
2 parents c3b9e1c + 25d6624 commit 4b54e37

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/pybind/mgr/cephadm/module.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2411,7 +2411,7 @@ def describe_service(self, service_type: Optional[str] = None, service_name: Opt
24112411
else:
24122412
size = spec.placement.get_target_count(self.cache.get_schedulable_hosts())
24132413

2414-
sm[nm] = orchestrator.ServiceDescription(
2414+
svc_desc = orchestrator.ServiceDescription(
24152415
spec=spec,
24162416
size=size,
24172417
running=0,
@@ -2422,11 +2422,21 @@ def describe_service(self, service_type: Optional[str] = None, service_name: Opt
24222422
ports=spec.get_port_start(),
24232423
)
24242424

2425+
if spec.service_type == 'rgw':
2426+
try:
2427+
rgw_service = RgwService(self)
2428+
ports = rgw_service.get_active_ports(spec.service_name())
2429+
if ports:
2430+
svc_desc.ports = ports
2431+
except Exception as e:
2432+
logger.warning(f"Failed to get the RGW ports for {spec.service_id}: {e}")
2433+
24252434
if spec.service_type == 'ingress':
24262435
# ingress has 2 daemons running per host
24272436
# but only if it's the full ingress service, not for keepalive-only
24282437
if not cast(IngressSpec, spec).keepalive_only:
2429-
sm[nm].size *= 2
2438+
svc_desc.size *= 2
2439+
sm[nm] = svc_desc
24302440

24312441
# factor daemons into status
24322442
for h, dm in self.cache.get_daemons_with_volatile_status():

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,39 @@ def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[st
13071307
rgw_deps = parent_deps + self.get_dependencies(self.mgr, svc_spec)
13081308
return config, rgw_deps
13091309

1310+
def get_active_ports(self, service_name: str) -> List[int]:
1311+
"""
1312+
Fetch active RGW frontend ports by parsing config entries for a given service.
1313+
"""
1314+
ports = set()
1315+
daemons = self.mgr.cache.get_daemons_by_service(service_name)
1316+
for d in daemons:
1317+
who = f"client.{d.name()}"
1318+
try:
1319+
ret, out, err = self.mgr.check_mon_command({
1320+
'prefix': 'config get',
1321+
'who': who,
1322+
'name': 'rgw_frontends'
1323+
})
1324+
1325+
if ret == 0 and out:
1326+
logger.debug(f"who: {who}, out: {out}")
1327+
ports.update(self._extract_ports_from_frontend(out.strip()))
1328+
except Exception as e:
1329+
logger.warning(f"Failed to get the config details for {who}: {e}")
1330+
continue
1331+
1332+
return sorted(ports)
1333+
1334+
def _extract_ports_from_frontend(self, frontend_str: str) -> set[int]:
1335+
1336+
ports = set()
1337+
for val in frontend_str.split():
1338+
if val.startswith("port="):
1339+
ports.add(int(val.split("=")[1]))
1340+
1341+
return ports
1342+
13101343

13111344
@register_cephadm_service
13121345
class RbdMirrorService(CephService):

0 commit comments

Comments
 (0)