def main()

in src/ansible_collections/alibaba/apsarastack/plugins/modules/ali_instance_type_facts.py [0:0]


def main():
    argument_spec = common_argument_spec()
    argument_spec.update(
        dict(
            apsarastack_zone=dict(type='str', aliases=['zone_id', 'apsarastack_zone'],
                     fallback=(env_fallback, ['APSARASTACK_ZONE', 'APSARASTACK_ZONE_ID'])),
            instance_type_ids=dict(type='list', aliases=["ids"]),
            instance_type_families=dict(type='list', aliases=["families"]),
            cpu_core_count=dict(type='int', aliases=["cpu_count"]),
            memory_size=dict(type='float', aliases=["memory"]),
        )
    )
    module = AnsibleModule(argument_spec=argument_spec)

    if HAS_FOOTMARK is False:
        module.fail_json(msg='footmark required for the module ali_instance_type_facts')

    ecs = ecs_connect(module)

    instance_types = []
    ids = []

    zone_id = module.params["apsarastack_zone"]
    instance_type_ids = module.params["instance_type_ids"]
    instance_type_families = module.params["instance_type_families"]
    cpu_core_count = module.params["cpu_core_count"]
    memory_size = module.params["memory_size"]

    if zone_id:
        zones = ecs.describe_zones(zone_id=zone_id)
        families = [f for z in zones for resource in z.available_resources["resources_info"] for f in resource["instance_type_families"]["supported_instance_type_family"]]

        if instance_type_families:
            filter_families = [f for f in instance_type_families if f in families]
            if not filter_families:
                module.fail_json(msg="Instance type families {0} is not supported in the zone {1}. Expected instance type families: {2}.".format(instance_type_families, zone_id, families))
            families = filter_families

        families = list(set(families))
    else:
        families = [f.id for f in ecs.describe_instance_type_families() if not instance_type_families or f.id in instance_type_families]

    for family in families:
        for instance_type in ecs.describe_instance_types(instance_type_family=family):
            if cpu_core_count and instance_type.cpu_core_count != cpu_core_count:
                continue
            if memory_size and instance_type.memory_size != memory_size:
                continue
            if instance_type_ids and instance_type.id not in instance_type_ids:
                continue
            instance_types.append(get_instance_type_info(instance_type))
            ids.append(instance_type.id)

    module.exit_json(changed=False, instance_type_ids=ids, instance_types=instance_types,
                     total=len(instance_types))