def addon_version()

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