Ansible
在 Jinja2 模板中循環 Ansible 變數數組
當 Ansible 收集有關主機的事實時,它例如獲取主機的所有掛載:
"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" },
等等。所以我想做的是:在一個模板中,我想循環遍歷數組中的所有對象並輸出每個“mount”鍵的值。
我這樣嘗試:
(% for mounts in {{ ansible_mounts }} %) Mountpoint: {{ ansible_mounts.mount }} (% endfor %)
但它不起作用。我嘗試了一些其他的東西,比如 iteritems() 但我無法讓它工作。據我所知,Ansible 的輸出是 json 格式,如果這對任何人都有幫助的話。有人知道解決方案還是這更多的是stackoverflow的問題?
感謝您的任何回答。
你有一個簡單的語法錯誤;您應該使用大括號而不是括號。
您目前擁有:
(% for mounts in {{ ansible_mounts }} %) Mountpoint: {{ ansible_mounts.mount }} (% endfor %)
這些應該是大括號,而不是括號,即
{%
和%}
。此外,您在中選擇的變數名稱
for
是mounts
,因此您應該在循環中實際使用它來獲取每個對象。最後,for 循環中變數周圍的大括號不是必需的。
糾正這些錯誤會導致這種情況,這應該可以正常工作:
{% for mounts in ansible_mounts %} Mountpoint: {{ mounts.mount }} {% endfor %}