in eksupdate/starter.py [0:0]
def main(args):
try:
cluster_name = args.name
to_update = args.version
pass_vpc=args.pass_vpc
max_retry=args.max_retry
regionName=args.region
presentversion="NAN"
isPresent=False
forced= args.force
parlleld=args.parallel
if args.eksctl:
quit("updating using EKSCTL is still under testing will be launched soon")
''' Preflight Logic '''
if not (pre_flight_checks(True,cluster_name,regionName,args.pass_vpc,args.version,args.email,args.force)):
print('Pre flight check for cluster ' + cluster_name +' failed')
quit()
else :
print('Pre flight check for the cluster ' + cluster_name + ' succeded')
if (args.preflight) :
quit()
# ''' upgrade Logic'''
st=time.time()
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Cluster Upgrade Process has Started")
if is_cluster_exists(Clustname=cluster_name,regionName=regionName)=="ACTIVE" or is_cluster_exists(Clustname=cluster_name,regionName=regionName)=="UPDATING":
presentversion=status_of_cluster(cluster_name,regionName)[1]
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Current Version of the Cluster is Detected = {version} ".format(version=presentversion))
else:
raise Exception("Cluster is Not Active")
# '''
# Checking Cluster is Active or Not Befor Making an Update
# '''
start=time.time()
if is_cluster_exists(Clustname=cluster_name,regionName=regionName)=="ACTIVE":
#if eksctl flag is enabled.s
if(args.eksctl!=False):
print("updating using EKSCTL")
eksctl_execute(args)
print('Pre flight check for the upgraded cluster')
if not (pre_flight_checks(cluster_name,regionName,topic = args.topic)):
print('Pre flight check for cluster ' + cluster_name +' failed after it upgraded')
else :
print('After update check for cluster completed successfully')
quit()
update_cluster(Clustname=cluster_name, Version=to_update,regionName=regionName)
time.sleep(5)
''' Making Sure the Cluster is Updated'''
if status_of_cluster(cluster_name,regionName)[1] != to_update or status_of_cluster(cluster_name,regionName)[0] != "ACTIVE":
update_cluster(cluster_name, to_update,regionName)
''' finding the managed autoscaling groups '''
end=time.time()
hours, rem = divmod(end-start, 3600)
minutes, seconds = divmod(rem, 60)
print("The Time Taken For the Cluster to Upgrade ","{:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds))
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="Time Taken For the Cluster to Upgrade "+" {:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds))
finding_manged = get_asg_node_groups(cluster_name,regionName)
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Manged Node Groups Found are "+",".join(finding_manged))
asg_list = get_Asgs(cluster_name,regionName)
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Asg's Found Are "+",".join(asg_list))
''' removing selfmanged from manged so that we dont update them again'''
asg_list_self_managed = list(set(asg_list)-set(finding_manged))
''' addons update '''
finding_manged_nodes_names=get_node_groups(Clustername=cluster_name,regionName=regionName)
print(" The add-ons Update has been initiated.... ")
start_time=time.time()
start=time.time()
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Addons Upgrade Started At "+str(start_time))
update_addons(cluster_name=cluster_name,version=to_update,vpcPass=pass_vpc,regionName=regionName)
end=time.time()
hours, rem = divmod(end-start, 3600)
minutes, seconds = divmod(rem, 60)
print("The Taken For the Addons Upgrade ","{:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds))
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Taken For the Addons Upgrade "+"{:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds))
''' finding managed node groups with filter'''
finding_manged_nodes=filter_node_groups(cluster_name=cluster_name,node_list=finding_manged_nodes_names,latest_version=to_update,regionName=regionName)
if len(finding_manged)>0:
print("The OutDated Managed Node Groups = ",finding_manged)
else:
print("No OutDated Managed Node Groups Found ")
replicas_value=0
''' checking auto scaler present and the value associated from it '''
isPresent,replicas_value=is_cluster_auto_scaler_present(ClusterName=cluster_name,regionName=regionName)
if isPresent:
clus_auto_enable_disable(ClusterName=cluster_name,type="pause",mx_val=replicas_value,regionName=regionName)
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="Paused Cluster AutoScaler")
print("Paused the Cluster AutoScaler")
else:
print("No Cluster AutoScaler is Found")
if parlleld:
for x in range(20):
worker = StatsWorker(queue,x)
worker.setDaemon(True)
worker.start()
if len(finding_manged_nodes) != 0:
for ng_name in finding_manged_nodes:
start=time.time()
print("Updating the Node Group = {ng} To version = {versi}".format(ng=ng_name,versi=to_update))
if parlleld:
queue.put([cluster_name,ng_name,to_update,regionName,max_retry,forced,"managed"])
else:
Update_nodeGroup(cluster_name, ng_name, to_update,regionName)
if len(asg_list_self_managed) != 0:
for asg_iter in asg_list_self_managed:
if parlleld:
queue.put([cluster_name,asg_iter,to_update,regionName,max_retry,forced,"selfmanaged"])
else:
actual_update(cluster_name,asg_iter,to_update,regionName,max_retry,forced)
if parlleld:
queue.join()
if isPresent:
clus_auto_enable_disable(ClusterName=cluster_name,type="start",mx_val=replicas_value,regionName=regionName)
print("Cluster Autoscaler is Enabled Again")
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="Cluster Autoscaler is Enabled Again")
print(" EKS Cluster {Clustname} UPDATED TO {ver}".format(Clustname=cluster_name,ver=to_update))
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg=" EKS Cluster {Clustname} UPDATED TO {ver}".format(Clustname=cluster_name,ver=to_update))
print('Post flight check for the upgraded cluster')
if not (pre_flight_checks(False,cluster_name,regionName,args.pass_vpc,email = args.email)):
print('Post flight check for cluster ' + cluster_name +' failed after it upgraded')
else :
print('After update check for cluster completed successfully')
except Exception as e:
if isPresent:
try:
clus_auto_enable_disable(ClusterName=cluster_name,type="start",mx_val=replicas_value,regionName=regionName)
print("Cluster Autoscaler is Enabled Again")
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="Cluster Autoscaler is Enabled Again")
except Exception as e:
print("Enter AutoScaler Manullay")
logs_pusher(regionName=regionName,cluster_name=cluster_name,msg="The Cluster Upgrade Failed Due To = {err}".format(err=e))
print(e)