amazon web services - ¿Valores de búsqueda de estructuras complejas?
amazon-web-services amazon-ec2 (1)
Estoy trabajando en un libro de jugadas de Ansible donde uso
ec2_vpc_subnet_facts
para registrar datos sobre subredes en una VPC como:
- ec2_vpc_subnet_facts:
region: "{{ ec2_region }}"
filters:
vpc-id: "{{ vpc.vpc.id }}"
register: vpc_subnet_facts
recuperando así una estructura como (atributos irrelevantes eliminados):
"vpc_subnet_facts": {
"changed": false,
"subnets": [
{
...
"id": "subnet-0bb50753",
...
"tags": {
"Name": "mytag1"
},
...
},
{
...
"id": "subnet-0bb50754",
...
"tags": {
"Name": "mytag2"
},
...
}
]
}
Más adelante en el libro de jugadas, cuando se crean las instancias de EC2, la idea es buscar una ID de subred basada en el valor de etiqueta para el
ec2
módulos
vpc_subnet_id
, es decir,
mytag1
busca la ID de
subnet-0bb50753
asociada
subnet-0bb50753
.
Mi enfoque actual es crear un diccionario
tag => subnet-ID
usando
set_facts
del resultado
ec2_vpc_subnet_facts
pero estoy interesado en alternativas.
Saludos, Ola
selectattr filtro selectattr jinja es tu amigo aquí:
- debug: msg="{{ (vpc_subnet_facts.subnets | selectattr(''tags.Name'',''equalto'',''mytag1'') | first).id }}"
Lo que se hace aquí:
vpc_subnet_facts.subnets
un subconjunto de elementos de
vpc_subnet_facts.subnets
donde
tags.Name==''mytag1''
, toma el primer elemento, toma el campo
id
.