Bucle sobre la matriz de variables Ansible en la plantilla Jinja2

Bucle sobre la matriz de variables Ansible en la plantilla Jinja2

cuando Ansible recopila datos sobre los hosts, por ejemplo obtiene todos los montajes del host:

 "ansible_mounts": [
            {
                "block_available": 7800291, 
                "block_size": 4096, 
                "block_total": 8225358, 
                "block_used": 425067, 
                "device": "/dev/mapper/foobar", 
                "fstype": "xfs", 
                "inode_available": 16403366, 
                "inode_total": 16458752, 
                "inode_used": 55386, 
                "mount": "/", 
                "options": "rw,seclabel,relatime,attr2,inode64,noquota", 
                "size_available": 31949991936, 
                "size_total": 33691066368, 
                "uuid": "2ebc82cb-5bc2-4db9-9914-33d65ba350b8"
            }, 
            {
                "block_available": 44648, 
                "block_size": 4096, 
                "block_total": 127145, 
                "block_used": 82497, 
                "device": "/dev/sda1", 
                "fstype": "xfs", 
                "inode_available": 255595, 
                "inode_total": 256000, 
                "inode_used": 405, 
                "mount": "/boot", 
                "options": "rw,seclabel,relatime,attr2,inode64,noquota", 
                "size_available": 182878208, 
                "size_total": 520785920, 
                "uuid": "c5f7eaf2-5b70-4f74-8189-a63bb4bee5f8"
            }, 

Etcétera. Entonces, lo que quiero hacer es: en una plantilla, quiero recorrer todos los objetos en la matriz y generar los valores de cada clave de "montaje".

Lo intento así:

    (% for mounts in {{ ansible_mounts }} %)
    Mountpoint: {{ ansible_mounts.mount }}
    (% endfor %)

Pero no funciona. Intenté con otras cosas como iteritems() pero no puedo hacerlo funcionar. Hasta donde yo sé, la salida de Ansible está en json, si eso ayuda a alguien. ¿Alguien conoce la solución o es más una pregunta para stackoverflow?

Gracias por cualquier respuesta.

Respuesta1

Tienes un simple error de sintaxis; deberías usar llaves en lugar de paréntesis.

Tu Actualmente tienes:

(% for mounts in {{ ansible_mounts }} %)
Mountpoint: {{ ansible_mounts.mount }}
(% endfor %)

Deben ser llaves, no paréntesis, es decir, {%y %}.

Además, el nombre de la variable que seleccionó fores mounts, por lo que eso es lo que debería usar dentro del bucle para obtener cada objeto.

Finalmente, las llaves alrededor de la variable en el bucle for no son necesarias.

La corrección de estos errores da como resultado esto, que debería funcionar bien:

{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}

información relacionada