diff --git a/exceptions.py b/exceptions.py new file mode 100644 index 0000000..8dd838e --- /dev/null +++ b/exceptions.py @@ -0,0 +1,2 @@ +class KubenodeCannotBeParsedFromJson(Exception): + pass diff --git a/models.py b/models.py new file mode 100644 index 0000000..2157fe5 --- /dev/null +++ b/models.py @@ -0,0 +1,27 @@ +import json + + +class KubeNode: + def __init__(self, node_json): + # Parse meta informations + self.name = node_json.metadata.name + self.uid = node_json.metadata.uid + + # Parse node conditions + for condition_json in node_json.status.conditions: + type = condition_json.type + if type == 'MemoryPressure': + self.memory_pressure = condition_json.status == 'True' + + if type == 'DiskPressure': + self.disk_pressure = condition_json.status == 'True' + + if type == 'PIDPressure': + self.pid_pressure = condition_json.status == 'True' + + if type == 'Ready': + self.ready = condition_json.status == 'True' + + def __str__(self): + attrs = {str(i): getattr(self, i) for i in dir(self) if not i.startswith('__')} + return json.dumps(attrs) diff --git a/test.py b/test.py index 4648257..1ae401a 100644 --- a/test.py +++ b/test.py @@ -1,5 +1,7 @@ from kubernetes import client, config +from models import KubeNode + label_selector = 'grid=testing' # Configs can be set in Configuration class directly or using helper utility @@ -8,5 +10,9 @@ print("Listing pods with their IPs:") ret = v1.list_node(label_selector=label_selector) +kubenodes = [] for node in ret.items: - print(node.metadata.name) + kubenodes.append(KubeNode(node_json=node)) + +for kn in kubenodes: + print(kn)