Jinja2 şablonunda Ansible değişken dizisi üzerinden döngü


12

Ansible ana bilgisayarlar hakkında gerçekleri topladığında, örneğin ana bilgisayarın tüm bağlarını alır:

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

Ve bunun gibi. Yani ne yapmak istiyorum: Bir şablonda dizideki tüm nesneler üzerinde döngü ve her "mount" anahtarının değerlerini çıktı istiyorum.

Ben böyle denemek:

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

Ama bu çalışmıyor. İteritems () gibi başka şeyler denedim ama işe yarayamıyorum. Bildiğim kadarıyla Ansible'ın çıktısı json'da, eğer bu herkese yardım ederse. Birisi çözümü biliyor mu veya bu daha çok yığın akışı için bir soru mu?

Yanıtlarınız için teşekkürler.

Yanıtlar:


17

Basit bir sözdizimi hatası var; parantez yerine köşeli ayraç kullanmanız gerekir.

Şu anda sahip olduğunuz:

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

Bunlar ise parantez değil parantez olması, gerektiğini {%ve %}.

Ayrıca, sen seçilen değişken adı forolduğunu mounts, böylece her bir nesneyi almak için döngü içinde kullanarak aslında olması gereken budur.

Son olarak, for döngüsündeki değişkenin etrafındaki parantezler gerekli değildir.

Bu hataların düzeltilmesi, bunun iyi sonuç vermesi ile sonuçlanır:

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

lanet olası parantez ile yorum okumak ... yanlışlıkla yanlışlıkla yanlış bloğu kopyalarsanız tespit etmek zor. :(
Markus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.