]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/rook: implement remove_daemons() 33868/head
authorSage Weil <sage@redhat.com>
Thu, 12 Mar 2020 22:00:35 +0000 (18:00 -0400)
committerSage Weil <sage@redhat.com>
Thu, 12 Mar 2020 22:00:35 +0000 (18:00 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/rook/module.py
src/pybind/mgr/rook/rook_cluster.py

index 0408fee7061d2ce7416d9a4037b41da5a2c140a6..eef36bf6773a0d09f95007e05ab550af273c2494 100644 (file)
@@ -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.
index e704d78fc022e014d891b4b020c1a8bf5e31388b..59300a16e37a47d5d302837b5cce595b989b5eb4 100644 (file)
@@ -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]