diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index d1412a70837..104780d93f7 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -342,7 +342,19 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator): size=active, last_refresh=now, ) - + if service_type == 'osd' or service_type is None: + # OSDs + all_osds = self.rook_cluster.get_osds() + svc = 'osd' + spec[svc] = orchestrator.ServiceDescription( + spec=DriveGroupSpec( + service_type='osd', + placement=PlacementSpec(count=len(all_osds), hosts=[osd.metadata.labels['topology-location-host'] for osd in all_osds]), + ), + size=len(all_osds), + last_refresh=now, + running= sum(osd.status.phase == 'Running' for osd in all_osds) + ) for dd in self._list_daemons(): if dd.service_name() not in spec: continue diff --git a/src/pybind/mgr/rook/rook_cluster.py b/src/pybind/mgr/rook/rook_cluster.py index 1a280935093..4c48d299a30 100644 --- a/src/pybind/mgr/rook/rook_cluster.py +++ b/src/pybind/mgr/rook/rook_cluster.py @@ -704,6 +704,10 @@ class RookCluster(object): self.fetcher.fetch() return self.fetcher.devices() + def get_osds(self) -> List: + osd_pods: KubernetesResource = KubernetesResource(self.coreV1_api.list_namespaced_pod, namespace='rook-ceph', label_selector='app=rook-ceph-osd') + return list(osd_pods.items) + def get_nfs_conf_url(self, nfs_cluster: str, instance: str) -> Optional[str]: # # Fetch cephnfs object for "nfs_cluster" and then return a rados://