amazon-web-services amazon-ec2 ansible ansible-playbook amazon-vpc

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 .