come aggiungere a un elenco in jinja2 per ansible

Sotto è il jinja2 modello che ho scritto per l’uso in ansible.

{% set port = 1234 %}
{% set server_ip = [] %}
{% for ip in host_ip  %}
{% do server_ip.append({{ ip }}:{{ port }}) %}
{% endfor %}
{% server_ip|join(', ') %}

Sotto è il mio output desiderato:

devices = 192.168.56.14:1234,192.168.56.13:1234,192.168.56.10:1234

Ma quando sono in esecuzione l’ansible playbook, che sta gettando l’errore, come di seguito:

"AnsibleError: teme templating string: Encountered unknown tag 'do'. Jinja was looking for th: 'endfor' or 'else'

Qualsiasi aiuto sarebbe apprezzato..

  • rimuovere do da ` {% fare ip_server.append({{ ip }}:{{ porta }}) %}` ?
  • Ho anche provato, ma i valori non sono sempre collegato.

 

2 Replies
  1. 12

    Tenta di seguito codice:

    {% set port = '1234' %}
    {% set server_ip = [] %}
    {% for ip in host_ip  %}
    {{ server_ip.append( ip+":"+port ) }}
    {% endfor %}
    {{ server_ip|join(',') }}
    

    Si ll ottenere:

    192.168.56.14:1234,192.168.56.13:1234,192.168.56.10:1234

    • La ringrazio per la risposta. Ma stavo cercando di assegnare l’output in una variabile chiamata “dispositivi”.
    • se la risposta è codice è parte di un html servito come parte del pallone app, {{ server_ip.append( ip+":"+port ) }} sta per essere la produzione di None quante volte ci sono dei passaggi nel ciclo for esterno. C’è un modo intorno ad esso?
    • trovato la soluzione qui: stackoverflow.com/a/38466093/158328
    • per evitare la stampa di Nessuno, io ‘d do {{ ip_server.append(…)|di default(“”, True) }}
  2. 2

    Che ha funzionato per me:

    - set_fact:
        devices: >-
          {% for ip in host_ip %}{{ ip }}:1234{% if not loop.last %},{% endif %}{% endfor %}
    

    Se si vuole ancora utilizzare do quindi aggiungere

    jinja2_extensions = jinja2.ext.do
    

    al tuo ansible file di configurazione e modificare

    {% do server_ip.append({{ ip }}:{{ port }}) %}` to `{% do server_ip.append({ip:port}) %}`
    

Lascia un commento