Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-20 07:59:01

0001 from kubernetes import client, config
0002 from kubernetes.client.rest import ApiException
0003 
0004 config.load_kube_config(config_file="/opt/harvester_k8s/kubeconf")
0005 namespace = ""  # namespace needs to be set or read from queue configuration
0006 
0007 corev1 = client.CoreV1Api()
0008 batchv1 = client.BatchV1Api()
0009 
0010 
0011 # unavailable nodes
0012 nodes_unav = []
0013 nodes_av = {}
0014 
0015 # get nodes and make a dictionary with the available ones
0016 nodes = corev1.list_node()
0017 for node in nodes.items:
0018     print(f"Processing {node.metadata.name}")
0019     for condition in node.status.conditions:
0020         print(f"Condition: {condition.type}, status: {type(condition.status)}")
0021         if condition.type == "Ready" and condition.status == "Unknown":
0022             nodes_unav.append(node.metadata.name)
0023         elif condition.type == "Ready" and condition.status == "True":
0024             nodes_av.setdefault(node.metadata.name, [])
0025 
0026 print(f"Unavailable nodes: {len(nodes_unav)}")
0027 print(f"Available nodes: {len(nodes_av.keys())}")
0028 
0029 # get pods and pack them into the available nodes
0030 pods = corev1.list_namespaced_pod(namespace=namespace)
0031 for pod in pods.items:
0032     print(pod.metadata.name)
0033     cpus = 0
0034     if pod.status.phase == "Running" and pod.spec.containers:
0035         for container in pod.spec.containers:
0036             print(container.resources.limits)
0037             if container.resources.limits and "cpu" in container.resources.limits:
0038                 cpus += int(container.resources.limits["cpu"])
0039         try:
0040             nodes_av[pod.spec.node_name].append(cpus)
0041         except KeyError:
0042             pass
0043 
0044 for node in nodes_av:
0045     if not sum(nodes_av[node]):
0046         print(f"{node}: occupied cpus {nodes_av[node]}")