Bucle sobre matriz variable Ansible en plantilla Jinja2

12

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"
            }, 

Y así. Entonces, lo que quiero hacer es: en una plantilla, quiero recorrer todos los objetos de 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 hacer que funcione. Hasta donde yo sé, la salida de Ansible está en json, si eso ayuda a alguien. ¿Alguien sabe la solución o es más una pregunta para stackoverflow?

Gracias por cualquier respuesta

ThatGuyOnTheNet
fuente

Respuestas:

17

Tiene un error de sintaxis simple; deberías usar llaves entre paréntesis 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, de modo que eso es lo que realmente 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 %}
Michael Hampton
fuente
maldito lea el comentario con las llaves ... difícil de detectar si copia accidentalmente el bloque incorrecto primero. :(
Markus