Пример #1
0
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
Пример #3
0
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
Пример #4
0
    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
Пример #5
0
 def get_pod_status(kube_client: client.CoreV1Api, label: str) -> list:
     return kube_client.list_pod_for_all_namespaces(label_selector=label)