Acho que um plugin de filtro bem colocado pode ajudá-lo nessa situação. Por exemplo, se você souber o id da tabela de rotas, poderá escrever uma função python simples para recuperar uma lista de subnet_ids associadas ao id da tabela de rotas. Você colocará esse filtro na raiz do seu diretório ansible.
Exemplo abaixo .... filter_plugins / example.py
def get_all_subnet_ids_in_route_table(route_table_id, region=None):
"""
Args:
route_table_id (str): The route table id you are retrieving subnets for.
Kwargs:
region (str): The aws region in which the route table exists.
Basic Usage:
>>> get_all_subnet_ids_in_route_table("rtb-1234567", "us-west-2")
['subnet-1234567', 'subnet-7654321']
Returns:
List of subnet ids
"""
subnet_ids = list()
client = boto3.client('ec2', region_name=region)
params = {
'RouteTableIds': [route_table_id]
}
routes = client.describe_route_tables(**params)
if routes:
for route in routes['RouteTables']:
for association in route['Associations']:
if association.get('SubnetId', None):
subnet_ids.append(association['SubnetId'])
return subnet_ids
else:
raise errors.AnsibleFilterError(
"No subnets were found for {0}".format(route_table_id)
)
class FilterModule(object):
''' Ansible core jinja2 filters '''
def filters(self):
return {
'get_all_subnet_ids_in_route_table': get_all_subnet_ids_in_route_table
}
Se você quiser usar esse filtro, seria tão simples quanto fazer o seguinte ...
route_table_id: rtb-1234567
aws_region: eu-west-1
subnet_ids_for_example_rt: "{{ route_table_id | get_all_subnet_ids_in_route_table(aws_region) }}"