in eksupdate/src/preflight_module.py [0:0]
def addon_version(log_details,errors,cluster_name,region,cluster_details,report,customer_report,pass_vpc):
loading_config(cluster_name,region)
# Fetch data from S3 Bucket
s3 = boto3.resource('s3')
yaml_data = {}
config_map = {}
# Version Dictionary
# version_dict = s3.Object('eks-one-click-upgrade', 'version_dict.json')
# version_dict = version_dict.get()['Body'].read().decode('utf-8')
# version_dict = json.loads(version_dict)
#print(version_dict)
f = open('eksupdate/src/S3Files/version_dict.json',)
version_dict = json.load(f)
# Kube Proxy config YAML
# kube_proxy_config = s3.Object('eks-one-click-upgrade', 'addons/kube-proxy.json')
# kube_proxy_config = kube_proxy_config.get()['Body'].read().decode('utf-8')
# kube_proxy_config = json.loads(kube_proxy_config)
f = open('eksupdate/src/S3Files/kube-proxy.json',)
kube_proxy_config = json.load(f)
kube_proxy_container = kube_proxy_config['spec']['template']['spec']['containers'][0]
yaml_data['kube-proxy'] = {'image':kube_proxy_container['image'],'volumeMount':kube_proxy_container['volumeMounts'],'env':None}
#print(kube_proxy_config)
# Core DNS config YAML
# core_dns_config = s3.Object('eks-one-click-upgrade', 'addons/coredns.json')
# core_dns_config = core_dns_config.get()['Body'].read().decode('utf-8')
# core_dns_config = json.loads(core_dns_config)
f = open('eksupdate/src/S3Files/coredns.json',)
core_dns_config = json.load(f)
coredns_container = core_dns_config['spec']['template']['spec']['containers'][0]
yaml_data['coredns'] = {'image':coredns_container['image'],'volumeMount':coredns_container['volumeMounts'],'env':None}
#print(core_dns_config)
# VPC CNI config YAML
# vpc_cni_config = s3.Object('eks-one-click-upgrade', 'addons/vpc-cni.json')
# vpc_cni_config = vpc_cni_config.get()['Body'].read().decode('utf-8')
# vpc_cni_config = json.loads(vpc_cni_config)
f = open('eksupdate/src/S3Files/vpc-cni.json',)
vpc_cni_config = json.load(f)
vpc_cni_container = vpc_cni_config['spec']['template']['spec']['containers'][0]
yaml_data['vpc-cni'] = {'image':vpc_cni_container['image'],'volumeMount':vpc_cni_container['volumeMounts'],'env':vpc_cni_container['env']}
#print(vpc_cni_config)
# Kube Proxy config map YAML
# kube_proxy_config_map = s3.Object('eks-one-click-upgrade', 'configMap/kube-proxy.json')
# kube_proxy_config_map = kube_proxy_config_map.get()['Body'].read().decode('utf-8')
# kube_proxy_config_map = json.loads(kube_proxy_config_map)
f = open('eksupdate/src/S3Files/kube-proxy-configmap.json',)
kube_proxy_config_map = json.load(f)
config_map['certificate-authority'] = yaml.safe_load(kube_proxy_config_map['data']['kubeconfig'])['clusters'][0]['cluster']['certificate-authority']
# Core DNS config map YAML
# core_dns_config_map = s3.Object('eks-one-click-upgrade', 'configMap/coredns.json')
# core_dns_config_map = core_dns_config_map.get()['Body'].read().decode('utf-8')
# core_dns_config_map = json.loads(core_dns_config_map)
# config_map['coredns'] = core_dns_config_map['data']
# pprint(yaml.load(core_dns_config_map['data']['Corefile']).split('.:53')[1].split(' '))
try :
print('\n')
log_pusher(log_details,cluster_name,region,'Check addon version compatibility .....')
print('Check addon version compatibility .....')
addons = []
report['addon_params'] = {}
customer_report['addons'] = {'vpc-cni':{},'kube-proxy':{},'coredns':{}}
v1=client.AppsV1Api()
daemon_set = v1.list_namespaced_daemon_set('kube-system')
deployment = v1.list_namespaced_deployment('kube-system')
calico = v1.list_namespaced_daemon_set('calico-system')
if len(calico.items) != 0:
for cal in calico.items :
print("Calico addon is present in cluster")
check_pods_running('calico',log_details,cluster_name,region,report,errors,"calico-system")
for ds in daemon_set.items :
#print(ds.metadata.name)
if(ds.metadata.name == 'aws-node' and not pass_vpc):
version_str = ds.spec.template.spec.containers[0].image.split('amazon-k8s-cni:v')[1].split('-')[0]
config = {'image':ds.spec.template.spec.containers[0].image,'volumeMount':ds.spec.template.spec.containers[0].volume_mounts,'env':ds.spec.template.spec.containers[0].env}
target_version = version_dict[report['cluster']['version']]['vpc-cni'].split('.')
version = version_str.split('.')
check_pods_running('aws-node',log_details,cluster_name,region,report,errors)
if(int(''.join(version)) >= int('170')) :
addons.append({'name' :'vpc-cni','version' : version_str, 'update' : False})
customer_report['addons']['vpc-cni']['version'] = 'Up to date'
log_pusher(log_details,cluster_name,region, 'vpc-cni version up to date' )
print('vpc-cni version up to date')
check_addons_params(log_details,config,'vpc-cni',cluster_details,config_map,yaml_data,report,customer_report,cluster_name,region,errors)
else :
addons.append({'name' :'vpc-cni','version' :version_str, 'update' : True})
log_pusher(log_details,cluster_name,region, 'vpc-cni version is not compatible' )
print('vpc-cni version is not compatible' )
customer_report['addons']['vpc-cni']['version'] = 'Version Not Compatible with current cluster version'
#print(ds.metadata.name + ':' + version)
elif(ds.metadata.name == 'kube-proxy') :
version = ds.spec.template.spec.containers[0].image.split(ds.metadata.name+':v')[1].split('-')[0]
config = {'image':ds.spec.template.spec.containers[0].image,'volumeMount':ds.spec.template.spec.containers[0].volume_mounts,'env':ds.spec.template.spec.containers[0].env}
check_pods_running('kube-proxy',log_details,cluster_name,region,report,errors)
print(version_dict[report['cluster']['version']][ds.metadata.name],version)
if(version_dict[report['cluster']['version']][ds.metadata.name] == version) :
addons.append({'name' :ds.metadata.name,'version' : version, 'update' : False})
log_pusher(log_details,cluster_name,region, 'kube-proxy version up to date' )
print('kube-proxy version up to date')
customer_report['addons'][ds.metadata.name]['version'] = 'Up to date'
check_addons_params(log_details,config,ds.metadata.name,cluster_details,config_map,yaml_data,report,customer_report,cluster_name,region,errors)
else :
addons.append({'name' :ds.metadata.name,'version' : version, 'update' : True})
print('kube-proxy version not compatible')
log_pusher(log_details,cluster_name,region, 'kube-proxy version not compatible' )
customer_report['addons'][ds.metadata.name]['version'] = 'Version Not Compatible with current cluster version'
#print(ds.metadata.name + ':' + version)
#print(addons)
for dp in deployment.items :
# print(dp.metadata.name)
if (dp.metadata.name == 'coredns'):
version = dp.spec.template.spec.containers[0].image.split(dp.metadata.name+':v')[1].split('-')[0]
config = {'image':dp.spec.template.spec.containers[0].image,'volumeMount':dp.spec.template.spec.containers[0].volume_mounts,'env':dp.spec.template.spec.containers[0].env}
check_pods_running('coredns',log_details,cluster_name,region,report,errors)
if(version_dict[report['cluster']['version']][dp.metadata.name] == version) :
addons.append({'name' :dp.metadata.name,'version' : version, 'update' : False})
log_pusher(log_details,cluster_name,region, 'core-dns version up to date' )
customer_report['addons'][dp.metadata.name]['version'] = 'Up to date'
#print(config)
print( 'core-dns version up to date')
check_addons_params(log_details,config,dp.metadata.name,cluster_details,config_map,yaml_data,report,customer_report,cluster_name,region,errors)
else :
addons.append({'name' :dp.metadata.name,'version' : version, 'update' : True})
print( 'core-dns version up not compatible' )
log_pusher(log_details,cluster_name,region, 'core-dns version up not compatible' )
customer_report['addons'][dp.metadata.name]['version'] = 'Version Not Compatible with current cluster version'
# print(addons)
report['addons'] = addons
customer_report['addons_version'] = addons
except Exception as e :
errors.append('Some error occured while checking the addon version {err}'.format(err=e))
log_pusher(log_details,cluster_name,region,'Some error occured while checking the addon version {err}'.format(err=e))
print('Some error occured while checking the addon version {err}'.format(err=e))
report['preflight_status'] = False