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