Arredondar matriz variável Ansible no modelo Jinja2

5

quando Ansible reúne fatos sobre hosts, por exemplo, obtém todas as montagens do 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 assim por diante. Então o que eu quero fazer é: Em um modelo, quero fazer um loop sobre todos os objetos na matriz e gerar os valores de cada chave "mount".

Eu tento assim:

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

Mas isso não funciona. Eu tentei por aí com algumas outras coisas como iteritems (), mas não consigo fazê-lo funcionar. Tanto quanto sei, a saída da Ansible está em json, se isso ajuda alguém. Alguém sabe a solução ou isso é mais uma pergunta para stackoverflow?

Obrigado por qualquer resposta.

    
por ThatGuyOnTheNet 14.12.2017 / 21:02

1 resposta

6

Você tem um erro simples de sintaxe; você deve estar usando colchetes em vez de parênteses.

Você tem atualmente:

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

Devem ser chaves, não parênteses, ou seja, {% e %} .

Além disso, o nome da variável que você selecionou em for é mounts , então é isso que você deveria estar usando dentro do loop para obter cada objeto.

Finalmente, as chaves ao redor da variável no loop for não são necessárias.

Corrigir esses erros resulta nisto, o que deve funcionar bem:

{% for mounts in ansible_mounts %}
Mountpoint: {{ mounts.mount }}
{% endfor %}
    
por 14.12.2017 / 21:28