Цикл над массивом переменных Ansible в шаблоне Jinja2
Когда 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"
},
И так далее. Итак, что я хочу сделать: в шаблоне я хочу перебрать все объекты в массиве и вывести значения каждого ключа "монтирования".
Я пытаюсь это так:
(% for mounts in {{ ansible_mounts }} %)
Mountpoint: {{ ansible_mounts.mount }}
(% endfor %)
Но это не работает. Я пробовал некоторые другие вещи, такие как iteritems(), но я не могу заставить его работать. Насколько я знаю, выход Ansible в json, если это кому-нибудь поможет. Кто-нибудь знает решение или это больше вопрос для stackoverflow?
Спасибо за любые ответы.
1 ответ
У вас есть простая синтаксическая ошибка; Вы должны использовать скобки вместо скобок.
В настоящее время у вас есть:
(% for mounts in {{ ansible_mounts }} %)
Mountpoint: {{ ansible_mounts.mount }}
(% endfor %)
Это должны быть скобки, а не скобки, то есть {%
а также %}
,
Кроме того, имя переменной, которое вы выбрали в for
является mounts
Это то, что вы должны использовать внутри цикла, чтобы получить каждый объект.
Наконец, скобки вокруг переменной в цикле for не нужны.
Исправление этих ошибок приводит к этому, который должен работать нормально:
{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}