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)
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
# 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])