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))