def drain_nodes()

in eksupdate/src/k8s_client.py [0:0]


def drain_nodes(cluster_name, Nodename,forced,regionName):
    ''' pod eviction using eviction api '''
    loading_config(cluster_name,regionName)
    v1 = client.CoreV1Api()
    api_response = v1.list_pod_for_all_namespaces(watch=False, field_selector='spec.nodeName=' + Nodename)
    retry = 0
    # print(api_response.items)
    if len(api_response.items) == 0:
        return "Empty Nothing to Drain"+Nodename
    for i in api_response.items:
        if i.spec.node_name == Nodename:
            try:
                if forced:
                    v1.delete_namespaced_pod(i.metadata.name,i.metadata.namespace,grace_period_seconds=0,body=client.V1DeleteOptions())
                else:
                    eviction_body = kubernetes.client.models.v1beta1_eviction.V1beta1Eviction(
                    metadata=kubernetes.client.V1ObjectMeta(name=i.metadata.name, namespace=i.metadata.namespace))
                    v1.create_namespaced_pod_eviction(name=i.metadata.name,

                                                    namespace=i.metadata.namespace, body=eviction_body)
                    '''retry to if pod is not deleted with eviction api'''
                    if watcher(cluster_name, i.metadata.name) == False and retry < 2:
                        drain_nodes(cluster_name, i.metadata.name)
                        retry += 1
                    if retry == 2:
                        raise Exception(
                            "Error Not able to delete the Node"+i.metadata.name)
                    return


            except Exception as e:
                print(e)
                # logs_pusher(e, "error")
                raise Exception("Unable to Delete the Node")