Lewati variabel array yang mungkin dalam template Jinja2

12

ketika Ansible mengumpulkan fakta tentang host, misalnya mendapatkan semua tunggangan host:

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

Dan seterusnya. Jadi yang ingin saya lakukan adalah: Dalam sebuah template saya ingin mengulang semua objek dalam array dan menampilkan nilai dari setiap kunci "mount".

Saya mencobanya seperti ini:

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

Tapi itu tidak berhasil. Saya mencoba-coba dengan beberapa hal lain seperti iteritems () tetapi saya tidak bisa membuatnya bekerja. Sejauh yang saya tahu output dari Ansible ada di json, jika itu membantu siapa pun. Apakah ada yang tahu solusinya atau ini lebih merupakan pertanyaan untuk stackoverflow?

Terima kasih atas jawaban apa pun.

ThatGuyOnTheNet
sumber

Jawaban:

17

Anda memiliki kesalahan sintaksis sederhana; Anda harus menggunakan kurung kurung bukan tanda kurung.

Anda saat ini memiliki:

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

Ini harus kawat gigi, bukan tanda kurung, yaitu, {%dan %}.

Selanjutnya, nama variabel yang Anda pilih foradalah mounts, sehingga Anda harus benar-benar menggunakan di dalam loop untuk mendapatkan setiap objek.

Akhirnya, kurung kurawal di sekitar variabel dalam for loop tidak diperlukan.

Mengoreksi kesalahan ini menghasilkan ini, yang seharusnya berfungsi:

{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}
Michael Hampton
sumber
sialan baca komentar dengan kawat gigi ... sulit dikenali jika Anda tidak sengaja menyalin blok yang salah terlebih dahulu. :(
Markus