web-dev-qa-db-ja.com

ansibleのためにjinja2のリストに追加する方法

以下は、ansibleで使用するために作成したjinja2テンプレートです。

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

以下が私の希望する出力です。

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

しかし、私はansible Playbookを実行しているときに、次のようにエラーをスローしています:

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

助けていただければ幸いです。

6
learning fun

以下のコードを試してください:

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

あなたが得る:

192.168.56.14:1234,192.168.56.13:1234,192.168.56.10:1234

15

それは私のために働いた:

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

それでもdoを使用したい場合は追加します

jinja2_extensions = jinja2.ext.do

あなたのansible設定ファイルに変更します

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