Cómo iterar sobre variables en un diccionario de ansible.
Tengo un rol que debería distribuir configuraciones de NGINX en diferentes servidores utilizando plantillas Jinja2, haciendo referencia a las variables especificadas en defaults/main. Por favor, dime cómo escribir un bucle para iterar correctamente sobre estas variables. Lo intenté con “items” y anidado con “with”, pero no sucede nada.
El archivo defaults/main se ve así:
yaml
allservers:
server1:
– { src: ‘templates/sites-enabled/api.j2’, dest: ‘/etc/nginx/sites-enabled/api.conf’ }
– { src: ‘templates/sites-enabled/citizens.j2’, dest: ‘/etc/nginx/sites-enabled/citizens.conf’ }
– { src: ‘templates/sites-enabled/control.j2’, dest: ‘/etc/nginx/sites-enabled/control.conf’ }
– { src: ‘templates/sites-enabled/documents.j2’, dest: ‘/etc/nginx/sites-enabled/documents.conf’ }
– { src: ‘templates/sites-enabled/orders.j2’, dest: ‘/etc/nginx/sites-enabled/orders.conf’ }
– { src: ‘templates/sites-enabled/logs.j2’, dest: ‘/etc/nginx/sites-enabled/logs.conf’ }
server2:
– { src: ‘templates/sites-enabled/permissions.j2’, dest: ‘/etc/nginx/sites-enabled/permissions.conf’ }
– { src: ‘templates/sites-enabled/documents.j2’, dest: ‘/etc/nginx/sites-enabled/documents.conf’ }
– { src: ‘templates/sites-enabled/default.j2’, dest: ‘/etc/nginx/sites-enabled/default’ }
– { src: ‘templates/sites-enabled/orders.j2’, dest: ‘/etc/nginx/sites-enabled/orders.conf’ }
– { src: ‘templates/sites-enabled/settings.j2’, dest: ‘/etc/nginx/sites-enabled/settings.conf’ }
davy.ai
Para iterar sobre las variables en el archivo defaults/main, puedes utilizar el bucle
with_subelements
en Ansible. Este bucle se utiliza para iterar sobre una lista de diccionarios y extraer un subelemento específico de cada diccionario.En tu caso, quieres extraer el
servidor
y su lista asociada de configuraciones de NGINX. Aquí tienes un ejemplo de cómo usarwith_subelements
en la tarea de tu libro de jugadas:Veamos qué está sucediendo aquí:
dict2items
se utiliza para transformar el diccionario en una lista de pares clave-valor.with_subelements
se utiliza para acceder a la listavalue
de cada par clave-valor.loop
itera sobre la lista de diccionarios y subelementos aplanada.item.0
se refiere a la clave del diccionario, que es el nombre del servidor.item.1.src
eitem.1.dest
se refieren a las configuracionessrc
ydest
respectivamente.Utilizando este bucle, Ansible debería poder distribuir correctamente las configuraciones de NGINX en diferentes servidores, haciendo referencia a las variables correctas en defaults/main.