Exemplo n.º 1
0
def list_namespaces(**payload):
    """
    List all namespaces in a cluster.
    """
    ns_list = [ns.metadata.name for ns in k.list_namespace().items]
    message = "Here are all the namespaces I can find:\n" + "\n".join(ns_list)
    send_message(message, payload)
Exemplo n.º 2
0
def pick_dev_env(**payload):
    """
    Release a specific environment
    """
    label_selector = 'env=dev'
    web_client = payload["web_client"]
    namespace = re.search(payload["regex"], payload["data"]["text"]).group(1)
    username = web_client.users_info(user=payload["data"]["user"])
    namespaces = k.list_namespace(label_selector=label_selector).items

    k8s_ns = next(
        (k8s_ns for k8s_ns in namespaces if namespace in k8s_ns.metadata.name),
        None,
    )

    logging.debug(f"found this k8s_ns: {k8s_ns}")

    if k8s_ns is None:
        message = f"Hey <@{username['user']['id']}>, l'environnement `{namespace}` n'a pas été trouvé."
    elif k8s_ns and k8s_ns.metadata.labels.get('developer') is None:
        message = f"Hey <@{username['user']['id']}>, l'environnement `{namespace}` est déjà libre."
    elif k8s_ns and k8s_ns.metadata.labels.get(
            'developer') not in username['user']['id']:
        message = f"Hey <@{username['user']['id']}>, l'environnement `{namespace}` est utilisé par <@{k8s_ns.metadata.labels['developer']}>."
    else:
        body = {"metadata": {"labels": {"developer": None}}}
        k.patch_namespace(namespace, body)
        message = f"Hey <!here>, l'environnement `{namespace}` est désormais libre. Bravo <@{username['user']['id']}> et à la prochaine."
    send_message(message, payload)
Exemplo n.º 3
0
def unregister_dev_env(**payload):
    """
    Unregister a new environment
    """
    label_selector = 'env=dev'
    web_client = payload["web_client"]
    namespace = re.search(payload["regex"], payload["data"]["text"]).group(1)
    username = web_client.users_info(user=payload["data"]["user"])
    namespaces = k.list_namespace(label_selector=label_selector).items

    k8s_ns = next(
        (k8s_ns for k8s_ns in namespaces if namespace in k8s_ns.metadata.name),
        None,
    )

    logging.debug(f"found this k8s_ns: {k8s_ns}")

    if k8s_ns:
        body = {"metadata": {"labels": {"env": None, "developer": None}}}

        k.patch_namespace(namespace, body)
        message = f"Hey <!here>, `{namespace}` a été retiré de la liste des environnements PROD 2.0."
    else:
        message = f"Hey <@{username['user']['id']}>, Opps, nous ne pouvons pas retirer `{namespace}`."

    send_message(message, payload)
Exemplo n.º 4
0
def list_pods(**payload):
    """
    List all the Pods in a namespace
    """
    namespace = re.search(payload["regex"], payload["data"]["text"]).group(1)
    message = f"Here are all the pods in `{namespace}` I can find:\n" + "\n".join(
        [pod.metadata.name for pod in k.list_namespaced_pod(namespace).items])
    send_message(message, payload)
Exemplo n.º 5
0
def list_all_pods(**payload):
    """
    List all the Pods in a cluster
    """
    pod_list = [
        pod.metadata.name for pod in k.list_pod_for_all_namespaces(watch=False).items
    ]
    message = "Here are all the pods I can find:\n" + "\n".join(pod_list)
    send_message(message, payload)
Exemplo n.º 6
0
def list_images(**payload):
    """
    List images used in a namespace
    """
    namespace = re.search(payload["regex"], payload["data"]["text"]).group(1)
    message = f"Here are all the images in `{namespace}` I can find:\n" + "\n".join(
        [
            container.image for pod in k.list_namespaced_pod(namespace).items
            for container in pod.spec.containers
        ])
    send_message(message, payload)
Exemplo n.º 7
0
def list_dev_env(**payload):
    """
    List prod 2.0 available namespaces
    """
    label_selector = 'env=dev'
    web_client = payload["web_client"]
    username = web_client.users_info(user=payload["data"]["user"])
    message = f"Hey <@{username['user']['id']}>, voici la liste des environnements prod 2.0:" + "\n".join(
        [
            f"\n `{ns.metadata.name}` {get_developer(ns.metadata.labels.get('developer'))}"
            for ns in k.list_namespace(label_selector=label_selector).items
        ])
    send_message(message, payload)
Exemplo n.º 8
0
def pod_logs(**payload):
    """
    Get logs for a given pod
    """
    pod_name = re.search(payload["regex"], payload["data"]["text"]).group(1)
    pod = next(
        (pod for pod in k.list_pod_for_all_namespaces(watch=False).items
         if pod_name in pod.metadata.name),
        None,
    )
    logging.debug(f"found this pod: {pod}")
    if not pod:
        send_message(
            f"Could not find pod named {pod_name}. Did you type it correctly?",
            payload)
    else:
        message = (f"Here are the logs from `{pod_name}`", )
        file = k.read_namespaced_pod_log(pod_name, pod.metadata.namespace)
        send_file(message, file, payload)
Exemplo n.º 9
0
def describe_pod(**payload):
    """
    Get details about a pod include env vars and other useful info
    """
    pod_name = re.search(payload["regex"], payload["data"]["text"]).group(1)
    pod = next(
        (pod for pod in k.list_pod_for_all_namespaces(watch=False).items
         if pod_name in pod.metadata.name),
        None,
    )
    logging.debug(f"found this pod: {pod}")
    if not pod:
        send_message(
            f"Could not find pod named {pod_name}. Did you type it correctly?",
            payload)
    else:
        message = (f"Here is the description for pod {pod_name}", )
        file = k.read_namespaced_pod(pod_name,
                                     pod.metadata.namespace,
                                     pretty="true")
        send_file(message, file, payload)