Перевірте масив змінної змінної у шаблоні Jinja2


12

коли 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?

Дякую за будь-які відповіді.

Відповіді:


17

У вас проста помилка синтаксису; вам слід використовувати дужки-дужки замість дужок.

На даний момент у вас є:

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

Це повинні бути дужки, а не дужки, тобто {%і %}.

Крім того, ім'я змінної, яку ви вибрали, for- mountsце те, що вам слід фактично використовувати всередині циклу, щоб отримати кожен об'єкт.

Нарешті, дужки навколо змінної в циклі for не потрібні.

Виправлення цих помилок призводить до цього, що має спрацювати добре:

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

чорт зачитав коментар дужками ... важко помітити, якщо ви випадково скопіювали спочатку неправильний блок. :(
Маркус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.