Skip to content

Commit 25d6624

Browse files
committed
mgr/cephadm: 'ceph orch ls' to display all the ports used by RGW service.
Signed-off-by: Kushal Deb <[email protected]>
1 parent e40b3d0 commit 25d6624

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
@@ -2401,7 +2401,7 @@ def describe_service(self, service_type: Optional[str] = None, service_name: Opt
24012401
else:
24022402
size = spec.placement.get_target_count(self.cache.get_schedulable_hosts())
24032403

2404-
sm[nm] = orchestrator.ServiceDescription(
2404+
svc_desc = orchestrator.ServiceDescription(
24052405
spec=spec,
24062406
size=size,
24072407
running=0,
@@ -2412,11 +2412,21 @@ def describe_service(self, service_type: Optional[str] = None, service_name: Opt
24122412
ports=spec.get_port_start(),
24132413
)
24142414

2415+
if spec.service_type == 'rgw':
2416+
try:
2417+
rgw_service = RgwService(self)
2418+
ports = rgw_service.get_active_ports(spec.service_name())
2419+
if ports:
2420+
svc_desc.ports = ports
2421+
except Exception as e:
2422+
logger.warning(f"Failed to get the RGW ports for {spec.service_id}: {e}")
2423+
24152424
if spec.service_type == 'ingress':
24162425
# ingress has 2 daemons running per host
24172426
# but only if it's the full ingress service, not for keepalive-only
24182427
if not cast(IngressSpec, spec).keepalive_only:
2419-
sm[nm].size *= 2
2428+
svc_desc.size *= 2
2429+
sm[nm] = svc_desc
24202430

24212431
# factor daemons into status
24222432
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
@@ -1301,6 +1301,39 @@ def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[st
13011301
rgw_deps = parent_deps + self.get_dependencies(self.mgr, svc_spec)
13021302
return config, rgw_deps
13031303

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

13051338
@register_cephadm_service
13061339
class RbdMirrorService(CephService):

0 commit comments

Comments
 (0)