]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
orchestrator/rook: rework describe_service() to accomodate "service ls"
authorJeff Layton <jlayton@redhat.com>
Wed, 31 Oct 2018 17:42:56 +0000 (13:42 -0400)
committerJeff Layton <jlayton@redhat.com>
Thu, 15 Nov 2018 12:21:15 +0000 (07:21 -0500)
Rework the describe_service operation for rook to allow listing of
services, with optional filters for service type, id and nodename.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
src/pybind/mgr/rook/module.py
src/pybind/mgr/rook/rook_cluster.py

index 16e94961137bf4eef426d9f6a63c1a242e7c494d..afdaa505012345895864ba1c9becc89a04453866 100644 (file)
@@ -332,30 +332,30 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
         return result
 
     @deferred_read
-    def describe_service(self, service_type, service_id):
+    def describe_service(self, service_type, service_id, nodename):
 
-        assert service_type in ("mds", "osd", "mgr", "mon", "rgw"), service_type + " unsupported"
+        assert service_type in ("mds", "osd", "mgr", "mon", None), service_type + " unsupported"
 
-        pods = self.rook_cluster.describe_pods(service_type, service_id)
+        pods = self.rook_cluster.describe_pods(service_type, service_id, nodename)
 
         result = orchestrator.ServiceDescription()
         for p in pods:
             sl = orchestrator.ServiceLocation()
             sl.nodename = p['nodename']
             sl.container_id = p['name']
+            sl.service_type = p['labels']['app'].replace('rook-ceph-', '')
 
-            if service_type == "osd":
+            if sl.service_type == "osd":
                 sl.daemon_name = "%s" % p['labels']["ceph-osd-id"]
-            elif service_type == "mds":
+            elif sl.service_type == "mds":
                 sl.daemon_name = p['labels']["rook_file_system"]
-            elif service_type == "mon":
+            elif sl.service_type == "mon":
                 sl.daemon_name = p['labels']["mon"]
-            elif service_type == "mgr":
+            elif sl.service_type == "mgr":
                 sl.daemon_name = p['labels']["mgr"]
-            elif service_type == "rgw":
-                # FIXME: put a label on the pod to consume
-                # from here
-                raise NotImplementedError("rgw")
+            else:
+                # Unknown type -- skip it
+                continue
 
             result.locations.append(sl)
 
index ff2b90ceb1847af51ce8811df93f92438b3cbcf5..ccd2bcb6bb801ef674617967718ab6e0f71fd4f2 100644 (file)
@@ -125,7 +125,7 @@ class RookCluster(object):
 
         return nodename_to_devices
 
-    def describe_pods(self, service_type, service_id):
+    def describe_pods(self, service_type, service_id, nodename):
         # Go query the k8s API about deployment, containers related to this
         # filesystem
 
@@ -143,25 +143,32 @@ class RookCluster(object):
         # Label filter is rook_cluster=<cluster name>
         #                 rook_file_system=<self.fs_name>
 
-        label_filter = "rook_cluster={0},app=rook-ceph-{1}".format(
-            self.cluster_name, service_type)
-        if service_type == "mds":
-            label_filter += ",rook_file_system={0}".format(service_id)
-        elif service_type == "osd":
-            # Label added in https://github.com/rook/rook/pull/1698
-            label_filter += ",ceph-osd-id={0}".format(service_id)
-        elif service_type == "mon":
-            # label like mon=rook-ceph-mon0
-            label_filter += ",mon={0}".format(service_id)
-        elif service_type == "mgr":
-            label_filter += ",mgr={0}".format(service_id)
-        elif service_type == "rgw":
-            # TODO: rgw
-            pass
+        label_filter = "rook_cluster={0}".format(self.cluster_name)
+        if service_type != None:
+            label_filter += ",app=rook-ceph-{0}".format(service_type)
+            if service_id != None:
+                if service_type == "mds":
+                    label_filter += ",rook_file_system={0}".format(service_id)
+                elif service_type == "osd":
+                    # Label added in https://github.com/rook/rook/pull/1698
+                    label_filter += ",ceph-osd-id={0}".format(service_id)
+                elif service_type == "mon":
+                    # label like mon=rook-ceph-mon0
+                    label_filter += ",mon={0}".format(service_id)
+                elif service_type == "mgr":
+                    label_filter += ",mgr={0}".format(service_id)
+                elif service_type == "rgw":
+                    # TODO: rgw
+                    pass
+
+        field_filter = ""
+        if nodename != None:
+            field_filter = "spec.nodeName={0}".format(nodename);
 
         pods = self.k8s.list_namespaced_pod(
             self.rook_namespace,
-            label_selector=label_filter)
+            label_selector=label_filter,
+            field_selector=field_filter)
 
         # import json
         # print json.dumps(pods.items[0])