
Wenn Ansible Fakten über Hosts sammelt, erhält es beispielsweise alle Mounts 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. Was ich also tun möchte, ist: In einer Vorlage möchte ich eine Schleife über alle Objekte im Array ausführen 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 Sachen wie iteritems() versucht, aber ich bekomme es nicht zum Laufen. Soweit ich weiß, ist die Ausgabe von Ansible in JSON, falls das irgendjemandem hilft. Kennt jemand die Lösung oder ist das eher eine Frage für Stackoverflow?
Danke für alle Antworten.
Antwort1
Es liegt ein einfacher Syntaxfehler vor. Sie sollten geschweifte Klammern statt runder Klammern verwenden.
Derzeit hast du:
(% for mounts in {{ ansible_mounts }} %)
Mountpoint: {{ ansible_mounts.mount }}
(% endfor %)
Dabei sollte es sich um Klammern und nicht um runde Klammern handeln, also um {%
und %}
.
for
Darüber hinaus ist der von Ihnen ausgewählte Variablenname mounts
, das ist also der Name, den Sie innerhalb der Schleife verwenden sollten, um jedes Objekt abzurufen.
Schließlich sind die Klammern um die Variable in der For-Schleife nicht notwendig.
Das Korrigieren dieser Fehler führt zu folgendem Ergebnis, das problemlos funktionieren sollte:
{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}