Schleife über Ansible-Variablenarray in der Jinja2-Vorlage


12

Wenn Ansible Fakten über Hosts sammelt, erhält es beispielsweise alle Reittiere des Hosts:

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

Und so weiter. Ich möchte also Folgendes tun: In einer Vorlage möchte ich alle Objekte im Array durchlaufen und die Werte jedes "Mount" -Schlüssels ausgeben.

Ich versuche es so:

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

Aber es funktioniert nicht. Ich habe es mit anderen Dingen wie iteritems () versucht, aber ich kann es nicht zum Laufen bringen. Soweit ich weiß, ist die Ausgabe von Ansible in json, wenn das jemandem hilft. Kennt jemand die Lösung oder ist dies eher eine Frage für den Stackoverflow?

Vielen Dank für alle Antworten.

Antworten:


17

Sie haben einen einfachen Syntaxfehler. Sie sollten Klammern anstelle von Klammern verwenden.

Zur Zeit haben Sie:

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

Dies sollten geschweifte Klammern sein, keine Klammern, dh {%und %}.

Außerdem forlautet der Variablenname, in dem Sie ausgewählt haben mounts, genau das, was Sie tatsächlich in der Schleife verwenden sollten, um jedes Objekt abzurufen.

Schließlich sind die geschweiften Klammern um die Variable in der for-Schleife nicht erforderlich.

Das Korrigieren dieser Fehler führt dazu, dass dies gut funktionieren sollte:

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

Verdammt, lesen Sie den Kommentar mit den Klammern durch ... schwer zu erkennen, wenn Sie versehentlich zuerst den falschen Block kopieren. :(
Markus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.