def find_eligible_staging_pod(client: CoreV1Api, exclude_namespaces: [] = None): pods = client.list_pod_for_all_namespaces() available_pods = pods.items if exclude_namespaces: available_pods = [ pod for pod in available_pods if pod.metadata.namespace not in exclude_namespaces ] print( f"[*] found {len(available_pods)} pods - checking for eligible staging candidates (this may take a while)" ) pod_capabilities = [] with FillingCirclesBar("[*] Processing...", max=len(available_pods)) as bar: for pod_info in available_pods: capabilities = run_checks(client, pod_info) pod_capabilities.append(capabilities) bar.next() eligible_pods = [pod for pod in pod_capabilities if pod.can_be_staging()] print(f"[+] valid pods for proxy staging: {len(eligible_pods)}") for pod in eligible_pods: print(f"\t{pod.namespace}/{pod.pod_name}") staging_pods = [pod for pod in eligible_pods if pod.has_dependencies_installed()] if len(staging_pods) == 0: install_dependencies(client, eligible_pods) print(f"[+] selecting {staging_pods[0]}") return staging_pods[0]
def get_containers_in_pod(core_instance: CoreV1Api, deployment_name: str) -> List[V1Pod]: containers = [] ret: V1PodList = core_instance.list_pod_for_all_namespaces(watch=False) i: V1Pod for i in ret.items: if deployment_name in str(i.metadata.name): containers.append(i) return containers
def storage_node_label(api: client.CoreV1Api, node_name: str) -> (str, str): # Set the edge label if no locality type is set yet. field_selector = 'spec.nodeName=' + node_name label_selector = 'app=minio' pods = api.list_pod_for_all_namespaces(watch=False, field_selector=field_selector, label_selector=label_selector) if len(pods.items) > 0: logging.debug( 'data.skippy.io/storage-node: Found a storage pod on the node. Setting label.' ) return 'data.skippy.io/storage-node', '' else: logging.debug( 'data.skippy.io/storage-node: No storage pod found on the node. Removing label.' ) return 'data.skippy.io/storage-node', None
def test_pod_apis(self, k8s: client.CoreV1Api): name = 'test-' + str(uuid.uuid4()) pod_manifest = {'apiVersion': 'v1', 'kind': 'Pod', 'metadata': {'color': 'blue', 'name': name}, 'spec': {'containers': [{'image': 'alpine', 'name': 'test'}]}} resp = k8s.create_namespaced_pod(body=pod_manifest, namespace='default') assert name == resp.metadata.name assert resp.status.phase == 'Pending' resp = k8s.read_namespaced_pod(name=name, namespace='default') assert name == resp.metadata.name assert resp.status.phase == 'Pending' number_of_pods = len(k8s.list_pod_for_all_namespaces().items) assert number_of_pods > 0
def get_pod_status(kube_client: client.CoreV1Api, label: str) -> list: return kube_client.list_pod_for_all_namespaces(label_selector=label)