Unten ist die jinja2-Vorlage, die ich in ansible geschrieben habe.
{% set port = 1234 %}
{% set server_ip = [] %}
{% for ip in Host_ip %}
{% do server_ip.append({{ ip }}:{{ port }}) %}
{% endfor %}
{% server_ip|join(', ') %}
Unten ist meine gewünschte Ausgabe:
devices = 192.168.56.14:1234,192.168.56.13:1234,192.168.56.10:1234
Aber wenn ich das Ansible Playbook betreibe, wirft es den Fehler wie folgt:
"AnsibleError: teme templating string: Encountered unknown tag 'do'. Jinja was looking for th: 'endfor' or 'else'
Jede Hilfe wäre dankbar ..
Versuchen Sie es unter dem Code:
{% set port = '1234' %}
{% set server_ip = [] %}
{% for ip in Host_ip %}
{{ server_ip.append( ip+":"+port ) }}
{% endfor %}
{{ server_ip|join(',') }}
Du wirst kriegen:
192.168.56.14:1234.192.168.56.13:1234.192.168.56.10:1234
Das hat für mich funktioniert:
- set_fact:
devices: >-
{% for ip in Host_ip %}{{ ip }}:1234{% if not loop.last %},{% endif %}{% endfor %}
Wenn Sie dennoch do
verwenden möchten, fügen Sie hinzu
jinja2_extensions = jinja2.ext.do
in Ihre ansible config-Datei und ändern
{% do server_ip.append({{ ip }}:{{ port }}) %}` to `{% do server_ip.append({ip:port}) %}`