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)