From 36da1447fa92a6b1f6ef9804570a2f0f86f24105 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 11 Mar 2020 17:50:53 -0400 Subject: [PATCH] mgr/rook: initial pass at 'orch ls' This doesn't cover mds.* or rgw.* yet. Signed-off-by: Sage Weil --- src/pybind/mgr/rook/module.py | 63 ++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index 15613c2d81dc6..ef72d26f59b2e 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -1,3 +1,4 @@ +import datetime import threading import functools import os @@ -249,8 +250,68 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator): return [orchestrator.HostSpec(n) for n in self.rook_cluster.get_node_names()] @deferred_read - def list_daemons(self, daemon_type=None, daemon_id=None, host=None, refresh=False): + def describe_service(self, service_type=None, service_name=None, + refresh=False): + now = datetime.datetime.utcnow() + + # CephCluster + cl = self.rook_cluster.rook_api_get( + "cephclusters/{0}".format(self.rook_cluster.rook_env.cluster_name)) + self.log.debug('CephCluster %s' % cl) + image_name = cl['spec'].get('cephVersion', {}).get('image', None) + num_nodes = len(self.rook_cluster.get_node_names()) + + spec = {} + spec['mon'] = orchestrator.ServiceDescription( + service_name='mon', + spec=orchestrator.ServiceSpec( + 'mon', + placement=orchestrator.PlacementSpec( + count=cl['spec'].get('mon', {}).get('count', 1), + ), + ), + size=cl['spec'].get('mon', {}).get('count', 1), + container_image_name=image_name, + last_refresh=now, + ) + spec['mgr'] = orchestrator.ServiceDescription( + service_name='mgr', + spec=orchestrator.ServiceSpec( + 'mgr', + placement=orchestrator.PlacementSpec.from_string('count:1'), + ), + size=1, + container_image_name=image_name, + last_refresh=now, + ) + if not cl['spec'].get('crashCollector', {}).get('disable', False): + spec['crash'] = orchestrator.ServiceDescription( + service_name='crash', + spec=orchestrator.ServiceSpec( + 'crash', + placement=orchestrator.PlacementSpec.from_string('all:true'), + ), + size=num_nodes, + container_image_name=image_name, + last_refresh=now, + ) + + # FIXME: CephFilesystems + # FIXME: CephObjectstores + + for dd in self._list_daemons(): + if dd.service_name() not in spec: + continue + spec[dd.service_name()].running += 1 + return [v for k, v in spec.items()] + + @deferred_read + def list_daemons(self, daemon_type=None, daemon_id=None, host=None, + refresh=False): + return self._list_daemons(daemon_type, daemon_id, host, refresh) + def _list_daemons(self, daemon_type=None, daemon_id=None, host=None, + refresh=False): pods = self.rook_cluster.describe_pods(daemon_type, daemon_id, host) result = [] -- 2.39.5