def nodegroup_customami()

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


def nodegroup_customami(log_details,errors,cluster_name,region,report,customer_report,update_version):
    loading_config(cluster_name,region)
    final_dict={'self-managed':{},'managed':{},'fargate':{}}
    print('\n')
    log_pusher(log_details,cluster_name,region,'Fetching node group details ......')
    print('Fetching node group details ......')
    try : 
        v1 = client.CoreV1Api()
        ret = v1.list_node()
        #pprint(ret.items)
        if len(ret.items) == 0:
            raise Exception('No running nodes present in the cluster')
        for i in ret.items:
            x=i.metadata.labels
            ver=i.status.node_info.kubelet_version.split('-')[0][1:5]
            if('eks.amazonaws.com/compute-type' in x):
                final_dict['fargate'][i.metadata.name]={
                    'version':ver,
                    'node_type':'fargate',
                    'version_compatibility': ver == report['cluster']['version']
                }
            else :
                instance_id=i.spec.provider_id.split('/')[-1]
                #print(instance_id)
                node_type=i.status.node_info.os_image
                #print(node_type)
                if 'windows' in (node_type).lower() :
                    node_type = 'windows'
                ec2Client = boto3.client('ec2',region_name = region)
                res=ec2Client.describe_instances(InstanceIds=[instance_id])

                ami=res.get('Reservations')[0]['Instances'][0]['ImageId']
                #print(ami)

                hd=res['Reservations'][0]['Instances'][0]['Tags']

                for m in hd:
                                
                    if(m['Key']=='aws:autoscaling:groupName'):
                        autoscale_group_name=m['Value']
                        #print(autoscale_group_name)

                custom_ami=iscustomami(node_type,ver,ami,region)
                #print(custom_ami)
                if(ver==report['cluster']['version']) :
                    version_compatibility=True
                elif update_version and round(float(report['cluster']['version']) - float(ver),2) == 0.01 :
                    version_compatibility = True
                else:
                    version_compatibility=False
                if custom_ami :
                    #errors.append(instance_id + ' cannot be upgraded as it has custom ami')
                    log_pusher(log_details,cluster_name,region,instance_id + ' cannot be upgraded as it has custom ami')
                    print(instance_id + ' cannot be upgraded as it has custom ami')
                if not version_compatibility:
                    report['preflight_status'] = False
                    #errors.append(instance_id  + ' cannot be upgraded as cluster version is not compatible with node version')
                    log_pusher(log_details,cluster_name,region,instance_id  + ' cannot be upgraded as cluster version is not compatible with node version')
                    print(instance_id  + ' cannot be upgraded as cluster version is not compatible with node version')
                if('alpha.eksctl.io/instance-id' in x or 'eks.amazonaws.com/nodegroup' not in x):
                    if(autoscale_group_name not in final_dict['self-managed'].keys()):
                        final_dict['self-managed'][autoscale_group_name]={
                            'instances' : [{
                                'version':ver,
                                'ami':ami,
                                'node_type':node_type,
                                'version_compatibility':version_compatibility,
                                'custom_ami':custom_ami,
                            }]
                        }
                    else :
                        instances = final_dict['self-managed'][autoscale_group_name]['instances']
                        instances.append({
                            'version':ver,
                            'ami':ami,
                            'node_type':node_type,
                            'version_compatibility':version_compatibility,
                            'custom_ami':custom_ami,
                        })
                        final_dict['self-managed'][autoscale_group_name]['instances'] = instances

                else:
                    if(autoscale_group_name not in final_dict['managed'].keys()):
                        node_group_name = ""
                        if 'alpha.eksctl.io/nodegroup-name' in x : 
                            node_group_name = x['alpha.eksctl.io/nodegroup-name']
                        else :
                            node_group_name = x['eks.amazonaws.com/nodegroup']
                        eks = boto3.client('eks',region_name = region)
                        response = eks.describe_nodegroup(clusterName=cluster_name,nodegroupName=node_group_name)
                        if response['nodegroup']['amiType']=='CUSTOM':
                            print('Nodegroup cannot be upgraded as it has custom launch template')
                            #errors.append('Nodegroup cannot be upgraded as it has custom launch template')
                        final_dict['managed'][autoscale_group_name]={
                            'nodegroup_name':node_group_name,
                            'custom_launch_template':response['nodegroup']['amiType']=='CUSTOM',
                            'instances' : [{
                                'version':ver,
                                'ami':ami,
                                'node_type':node_type,
                                'version_compatibility':version_compatibility,
                                'custom_ami':custom_ami,
                            }]
                        }
                    else :
                        instances = final_dict['managed'][autoscale_group_name]['instances']
                        instances.append({
                            'version':ver,
                                'ami':ami,
                                'node_type':node_type,
                                'version_compatibility':version_compatibility,
                                'custom_ami':custom_ami,
                        })
                        final_dict['managed'][autoscale_group_name]['instances'] = instances
        return final_dict
    except Exception as e : 
        
        errors.append('Error ocurred while checking node group details {err}'.format(err=e))
        log_pusher(log_details,cluster_name,region,'Error ocurred while checking node group details {err}'.format(err=e))
        print('Error ocurred while checking node group details {err}'.format(err=e))
        customer_report['node group details'] = 'Error ocurred while checking node group details'
        report['preflight_status'] = False