def main()

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)