From bdbeeed680b74b77ed7bee61bba480c7aa86f06a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 12 Mar 2020 18:00:35 -0400 Subject: [PATCH] mgr/rook: implement remove_daemons() Signed-off-by: Sage Weil --- src/pybind/mgr/rook/module.py | 7 +++++++ src/pybind/mgr/rook/rook_cluster.py | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/pybind/mgr/rook/module.py b/src/pybind/mgr/rook/module.py index 0408fee7061d2..eef36bf6773a0 100644 --- a/src/pybind/mgr/rook/module.py +++ b/src/pybind/mgr/rook/module.py @@ -434,6 +434,13 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator): mgr=self ) + def remove_daemons(self, names, force): + return write_completion( + lambda: self.rook_cluster.remove_pods(names), + "Removing daemons {}".format(','.join(names)), + mgr=self + ) + def create_osds(self, drive_groups): # type: (List[DriveGroupSpec]) -> RookCompletion """ Creates OSDs from a drive group specification. diff --git a/src/pybind/mgr/rook/rook_cluster.py b/src/pybind/mgr/rook/rook_cluster.py index e704d78fc022e..59300a16e37a4 100644 --- a/src/pybind/mgr/rook/rook_cluster.py +++ b/src/pybind/mgr/rook/rook_cluster.py @@ -30,7 +30,7 @@ except ImportError: try: from kubernetes.client.rest import ApiException - from kubernetes.client import V1ListMeta, CoreV1Api, V1Pod + from kubernetes.client import V1ListMeta, CoreV1Api, V1Pod, V1DeleteOptions from kubernetes import watch except ImportError: class ApiException(Exception): # type: ignore @@ -349,6 +349,23 @@ class RookCluster(object): return pods_summary + def remove_pods(self, names): + pods = [i for i in self.rook_pods.items] + num = 0 + for p in pods: + d = p.to_dict() + daemon_type = d['metadata']['labels']['app'].replace('rook-ceph-','') + daemon_id = d['metadata']['labels']['ceph_daemon_id'] + name = daemon_type + '.' + daemon_id + if name in names: + self.k8s.delete_namespaced_pod( + d['metadata']['name'], + self.rook_env.namespace, + body=V1DeleteOptions() + ) + num += 1 + return "Removed %d pods" % num + def get_node_names(self): return [i.metadata.name for i in self.nodes.items] -- 2.39.5