def update_addons()

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


def update_addons(cluster_name, version,vpcPass,regionName):
    loading_config(cluster_name,regionName)
    for x in range(20):
        worker = StatsWorker(queue,x)
        worker.setDaemon(True)
        worker.start()
    v1 = client.CoreV1Api()
    api_instance = client.AppsV1Api()
    rep = v1.list_namespaced_pod("kube-system")
    add_on_dict = open('eksupdate/src/S3Files/version_dict.json','r')
    add_on_dict=json.load(add_on_dict)
    old_pods_name=[]

    for pod in rep.items:
        old_pods_name.append(pod.metadata.name)
    print("The Addons Found = ",*old_pods_name)
    logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Addons Found = {instan}".format(instan=old_pods_name))

    flag_vpc,flag_core,flag_proxy,flag_scaler=True,True,True,True

    try:
        for pod in rep.items:
            images = [c.image for c in pod.spec.containers]
            # logs_pusher(images, "info")
            image = "".join(images)
            coredns_new=add_on_dict[version].get('coredns')
            kubeproxy_new=add_on_dict[version].get('kube-proxy')
            autosclaer_new=add_on_dict[version].get('cluster-autoscaler')
            cni_new=add_on_dict[version].get('vpc-cni')
            vv=int("".join(image.split(':')[-1].replace("v","").replace("-",".").split(".")[:3]))
            newv=version.replace(".","")
            newv=int(newv)

            if "coredns" in pod.metadata.name and image.split(":")[-1] != "v"+coredns_new+"-eksbuild.1":
                print(pod.metadata.name ,"Current Version = ", image.split(":")[-1],"Updating To = " ,"v"+coredns_new+"-eksbuild.1")
                body = {"spec": {"template": {"spec": {"containers": [
                    {"name": "coredns", "image": image.split(":")[0]+":v"+coredns_new+"-eksbuild.1"}]}}}}
                if flag_core:
                    api_response = api_instance.patch_namespaced_deployment(
                        name="coredns", namespace='kube-system', body=body, pretty=True)
                    if vv <=170:
                        coredns_yaml = open("eksupdate/src/S3Files/core-dns.yaml", 'r') 
                        body= yaml.safe_load(coredns_yaml)
                        v1.patch_namespaced_config_map(name="coredns",namespace="kube-system",body=body)
                    flag_core=False
                time.sleep(20)

                new_pod_name=sort_pods(cluster_name=cluster_name,regionName=regionName,original_name=pod.metadata.name,old_pods_name=old_pods_name,pod_name="kube-dns",nameSpace="kube-system")
                print("old CoreDNs Pod {oldp} \t new CoreDnsPod {newp}".format(oldp=pod.metadata.name,newp=new_pod_name))
                queue.put([cluster_name,'kube-system',new_pod_name, "coredns",regionName])
                # if addon_status(cluster_name=cluster_name,nameSpace="kube-system",new_pod_name=new_pod_name,podName=pod.metadata.name,regionName=regionName) != True:
                #     raise Exception("Pod Is not Started"+pod.metadata.name)
            elif "kube-proxy" in pod.metadata.name:
                if newv<=118:
                    final_ender="-eksbuild.1"
                else:
                    final_ender="-eksbuild.2"

                if image.split(":")[-1] != "v"+kubeproxy_new+final_ender:
                    print(pod.metadata.name ,"Current Version = ", image.split(":")[-1],"Updating To = " ,"v"+kubeproxy_new+final_ender)
                    body = {"spec": {"template": {"spec": {"containers": [
                        {"name": "kube-proxy", "image": image.split(":")[0]+":v"+kubeproxy_new+final_ender}]}}}}
                    if flag_proxy:
                        api_response = api_instance.patch_namespaced_daemon_set(
                        name="kube-proxy", namespace='kube-system', body=body, pretty=True)
                        flag_proxy=False
                    time.sleep(20)
                    new_pod_name=sort_pods(cluster_name=cluster_name,regionName=regionName,original_name=pod.metadata.name,old_pods_name=old_pods_name,pod_name="kube-proxy",nameSpace="kube-system")
                    
                    print("old KubProxy Pod {oldp} \t new KubeProxyPod {newp}".format(oldp=pod.metadata.name,newp=new_pod_name))
                    queue.put([cluster_name,'kube-system',new_pod_name, "kube-proxy",regionName])
                # if addon_status(cluster_name=cluster_name,nameSpace='kube-system',new_pod_name=new_pod_name, podName=pod.metadata.name,regionName=regionName) != True:
                #     raise Exception("Pod is Not Started"+pod.metadata.name)
            elif "cluster-autoscaler" in pod.metadata.name and image.split(":")[-1] != "v"+autosclaer_new:
                print(pod.metadata.name ,"Current Version = ", image.split(":")[-1],"Updating To = " ,"v"+autosclaer_new+"-eksbuild.1")
                body = {"spec": {"template": {"spec": {"containers": [
                    {"name": "cluster-autoscaler", "image":image.split(":")[0]+":v"+autosclaer_new}]}}}}
                if flag_scaler:
                    api_response = api_instance.patch_namespaced_deployment(
                        name="cluster-autoscaler", namespace='kube-system', body=body, pretty=True)
                    flag_scaler=False
                time.sleep(20)
                new_pod_name=sort_pods(cluster_name=cluster_name,regionName=regionName,original_name=pod.metadata.name,old_pods_name=old_pods_name,pod_name="cluster-autoscaler",nameSpace="kube-system")
                print("old Cluster AutoScaler Pod {oldp} \t new AutoScaler pod {newp}".format(oldp=pod.metadata.name,newp=new_pod_name))
                queue.put([cluster_name,'kube-system',new_pod_name, "cluster-autoscaler",regionName])
                # if addon_status(cluster_name=cluster_name,nameSpace='kube-system',new_pod_name=new_pod_name, podName=pod.metadata.name,regionName=regionName) != True:
                #     raise Exception("Pod is Not Started"+pod.metadata.name)
            elif "aws-node" in pod.metadata.name and image.split(":")[-1] !="v"+cni_new and not vpcPass:
                print(pod.metadata.name ,"Current Version = ", image.split(":")[-1],"Updating To = " ,"v"+cni_new)
                if flag_vpc:
                    vpc_cni_yaml = open("eksupdate/src/S3Files/vpc-cni.yaml", 'r') 
                    body= yaml.safe_load(vpc_cni_yaml)
                    body['spec']['template']['spec']['containers'][0]['image']=image.split(":")[0]+":v"+cni_new
                    old=body['spec']['template']['spec']['initContainers'][0]['image']
                    body['spec']['template']['spec']['initContainers'][0]['image']=old.split(":")[0]+":v"+cni_new
                    api_response = api_instance.patch_namespaced_daemon_set(namespace='kube-system',
                        name="aws-node",  body=body, pretty=True)
                    flag_vpc=False
                time.sleep(20)
                new_pod_name=sort_pods(cluster_name=cluster_name,regionName=regionName,original_name=pod.metadata.name,old_pods_name=old_pods_name,pod_name="aws-node",nameSpace="kube-system")
                print("old vpc cni Pod {oldp} \t new vpc cni {newp}".format(oldp=pod.metadata.name,newp=new_pod_name))
                queue.put([cluster_name,'kube-system',new_pod_name, "aws-node",regionName])
        queue.join()
                # if addon_status(cluster_name=cluster_name,nameSpace='kube-system',new_pod_name=new_pod_name, podName="aws-node",regionName=regionName) != True:
                #     raise Exception("Pod is Not Started"+pod.metadata.name)

    except Exception as e:
        print(e)
        raise Exception(e)