-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathretriever.py
51 lines (45 loc) · 2.37 KB
/
retriever.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from kubernetes import client
from urllib3.exceptions import InsecureRequestWarning
import requests
class Retriever:
def __init__(self):
self.resources = client.AppsV1Api()
self.retrieve_function = {
"deployment": self.resources.list_namespaced_deployment,
"statefulset": self.resources.list_namespaced_stateful_set,
}
def get_mem_cpu_req_lim(self, namespace):
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
results = []
for object_type, function in self.retrieve_function.items():
k8s_objects = function(namespace)
for k8s_object in k8s_objects.items:
replicas = k8s_object.spec.replicas
name = k8s_object.metadata.name
for container in k8s_object.spec.template.spec.containers:
if container.resources.requests:
request_cpu = container.resources.requests.get("cpu", "Not defined")
request_memory = container.resources.requests.get("memory", "Not defined")
else:
request_cpu = "Not Defined"
request_memory = "Not Defined"
if container.resources.limits:
limit_cpu = container.resources.limits.get("cpu", "Not defined")
limit_memory = container.resources.limits.get("memory", "Not defined")
else:
limit_cpu = "Not Defined"
limit_memory = "Not Defined"
if object_type == 'deployment':
for status in k8s_object.status.conditions:
if status.type == 'Progressing':
replicaset_name = status.message.split(" ")[1].replace('"', "")
regex = f'{replicaset_name}.*'
break
else:
regex = f'{name}-[0-9]+'
print(regex)
results.append((namespace, object_type, name,
container.name, replicas,
request_cpu, limit_cpu,
request_memory, limit_memory, regex))
return results