# -*- coding: utf-8 -*- # Wrapper for K8s API import os from kubernetes import client, config from wrappers.settings import ORG, K8S_ENV_LIST def get_pod_data(namespace): ''' Retrieve and return data from K8s from a given namepasce.''' config.load_kube_config() api_instance = client.CoreV1Api() try: ret = api_instance.list_pod_for_all_namespaces(watch=False) ip_list, name_list, stat_list = [], [], [] for item in ret.items: if (item.metadata.namespace != namespace): continue ip_list.append(item.status.pod_ip) name_list.append(item.metadata.name) stat_list.append(item.status.phase) dtag_list, dimage_list = [], [] for pod in name_list: dtag_str, dimage_str = get_pod_info(namespace, api_instance, pod) dtag_list.append(dtag_str) dimage_list.append(dimage_str) return { 'Status': stat_list, 'Name': name_list, 'Pod IP': ip_list, 'Docker Image': dimage_list, 'Docker Tag': dtag_list } except Exception as e: print("Error retrieving K8s data: \n{}".format(e)) return None def generate_env_dict(): ''' Retrieve K8s namespaces from env, and return a dict of it. ''' env_list = K8S_ENV_LIST.split(',') return [{'label': i.strip(), 'value': i.strip()} for i in env_list] def get_pod_info(namespace, api_instance, pod_name): ''' Retrieve the Docker info from a given pod. ''' api_response = api_instance.read_namespaced_pod(pod_name, namespace) dtag_str, dimage_str = '', '' if len(api_response.spec.containers) < 2: dimage_str, dtag_str = api_response.spec.containers[0].image.split(':') else: for container in api_response.spec.containers: im, tg = container.image.split(':') dimage_str += '{}; '.format(im) dtag_str += '{}; '.format(tg) return dtag_str, dimage_str if __name__ == '__main__': test_namespace = 'staging' print('Printing k8s data for giving namespace') print(get_pod_data(test_namespace))