Passa sopra la matrice variabile Ansible nel modello Jinja2


12

quando Ansible raccoglie informazioni sugli host, ad esempio ottiene tutti i mount dell'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"
            }, 

E così via. Quindi quello che voglio fare è: in un modello voglio passare in rassegna tutti gli oggetti dell'array e generare i valori di ogni chiave "mount".

Lo provo così:

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

Ma non funziona Ho provato con altre cose come iteritems () ma non riesco a farlo funzionare. Per quanto ne so, l'output di Ansible è in json, se questo aiuta qualcuno. Qualcuno conosce la soluzione o è più una domanda per StackOverflow?

Grazie per qualsiasi risposta

Risposte:


17

Hai un semplice errore di sintassi; dovresti usare parentesi graffe anziché parentesi.

Al momento hai:

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

Questi dovrebbero essere parentesi graffe, non parentesi, cioè {%e %}.

Inoltre, il nome della variabile che hai selezionato forè mounts, quindi è quello che dovresti effettivamente usare all'interno del ciclo per ottenere ogni oggetto.

Infine, le parentesi graffe attorno alla variabile nel ciclo for non sono necessarie.

La correzione di questi errori comporta ciò, che dovrebbe funzionare correttamente:

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

dannatamente letto sopra il commento con le parentesi graffe ... difficile da individuare se prima copi accidentalmente il blocco sbagliato. :(
Markus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.