es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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’ }

Tags:  ,

Answer

  1. Avatar for 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 usar with_subelements en la tarea de tu libro de jugadas:

    - name: distribuir configuraciones de NGINX
      template:
        src: "{{ item.1.src }}"
        dest: "{{ item.0 }}/etc/nginx/{{ item.1.dest }}"
      loop: "{{ allservers | dict2items | with_subelements('value') }}"
    

    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 lista value de cada par clave-valor.
    • La declaración 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 e item.1.dest se refieren a las configuraciones src y dest 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.

Comments are closed.