def get_instances()

in build/update_instance_types.py [0:0]


def get_instances(filters, auth_map):
    profile = auth_map.get('default', 'default')
    ec2_api_response = []
    paginator = boto3.Session(profile_name=profile).client('ec2').get_paginator('describe_instance_types')
    for page in paginator.paginate():
        ec2_api_response.extend(page['InstanceTypes'])
    raw_instances = {i['InstanceType']: i for i in ec2_api_response}
    ec2info = requests.get(INSTANCE_INFO).json()
    for i in ec2info:
        if i['instance_type'] in raw_instances:
            raw_instances[i['instance_type']].update(i)
        else:
            raw_instances[i['instance_type']] = i
    instance_prices = {}
    region_map = {}
    add_end = []
    for ec2_filter in filters:
        raw_instances = eval_filter(ec2_filter, raw_instances)
    for r in raw_instances.values():
        price = r.get('pricing', {}).get('us-east-1', {}).get('linux', {}).get('ondemand')
        if price:
            instance_regions = set(r['pricing'].keys())
            for region_name in instance_regions:
                if region_name not in region_map:
                    region_map[region_name] = [r['instance_type']]
                else:
                    region_map[region_name].append(r['instance_type'])
            instance_prices[r['instance_type']] = price
        else:
            i = r['instance_type'] if 'instance_type' in r else r.get('InstanceType')
            if i:
                add_end.append(i)
    instance_prices = [k for k, v in sorted(instance_prices.items(), key=lambda item: item[1])] + add_end
    return instance_prices, region_map