วนซ้ำอาร์เรย์ตัวแปร Ansible ในเทมเพลต 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"
            }, 

และอื่น ๆ ดังนั้นสิ่งที่ฉันต้องการทำคือในเทมเพลตฉันต้องการวนลูปวัตถุทั้งหมดในอาร์เรย์และส่งออกค่าของคีย์ "เมาท์" แต่ละอัน

ฉันลองแบบนี้:

    (% 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 loop ก็ไม่จำเป็น

การแก้ไขข้อผิดพลาดเหล่านี้ส่งผลให้เกิดสิ่งนี้ซึ่งควรจะทำงานได้ดี:

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

เจ้ากรรมอ่านคำติชมพร้อมเครื่องหมายปีกกา ... ยากที่จะสังเกตเห็นหากคุณคัดลอกบล็อกผิดครั้งแรกโดยไม่ตั้งใจ :(
Markus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.