Lặp lại mảng biến Ansible trong mẫu Jinja2


12

khi Ansible tập hợp các sự kiện về máy chủ, ví dụ, nó nhận được tất cả các gắn kết của máy chủ:

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

Và như thế. Vì vậy, những gì tôi muốn làm là: Trong một mẫu tôi muốn lặp qua tất cả các đối tượng trong mảng và xuất các giá trị của mỗi khóa "mount".

Tôi thử nó như thế này:

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

Nhưng nó không hoạt động. Tôi đã thử xung quanh với một số thứ khác như iteritems () nhưng tôi không thể làm cho nó hoạt động. Theo như tôi biết thì đầu ra của Ansible là trong json, nếu điều đó giúp được ai. Có ai đó biết giải pháp hay đây là một câu hỏi cho stackoverflow?

Cảm ơn cho bất kỳ câu trả lời.

Câu trả lời:


17

Bạn có một lỗi cú pháp đơn giản; bạn nên sử dụng dấu ngoặc nhọn thay vì dấu ngoặc đơn.

Bạn rất muốn:

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

Đây phải là dấu ngoặc nhọn, không phải dấu ngoặc đơn, nghĩa là {%%}.

Hơn nữa, tên biến bạn đã chọn formounts, vì vậy đó là tên bạn thực sự nên sử dụng bên trong vòng lặp để lấy từng đối tượng.

Cuối cùng, các dấu ngoặc quanh biến trong vòng lặp for là không cần thiết.

Sửa các lỗi này dẫn đến việc này sẽ hoạt động tốt:

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

chết tiệt đọc qua bình luận với niềng răng ... khó phát hiện nếu bạn vô tình sao chép sai khối đầu tiên. :(
Markus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.