Loops ansible play_主机模板循环

Loops ansible play_主机模板循环,loops,ansible,jinja2,ansible-2.x,Loops,Ansible,Jinja2,Ansible 2.x,我试图在ansible模板中使用play\u hosts变量 我正在尝试为wildfly设置主/从域设置 因此,我希望循环清单组中的所有主机,而不必指定组 这就是我正在尝试的: {%- for host in play_hosts %} {%- if 'master' in hostvars[host][ansible_hostname + '_alias'] %} <remote protocol="remote" host="{{ hostvars[host]['ansible_

我试图在ansible模板中使用
play\u hosts
变量

我正在尝试为wildfly设置主/从域设置

因此,我希望循环清单组中的所有主机,而不必指定组

这就是我正在尝试的:

{%- for host in play_hosts %}
  {%- if  'master' in hostvars[host][ansible_hostname + '_alias'] %}
<remote protocol="remote" host="{{ hostvars[host]['ansible_default_ipv4']['address'] }}" port="9999" />
  {%- endif %}
{%- endfor %}
剧本:

---
# http://stackoverflow.com/questions/39005760/ansible-play-hosts-template-loop

- name: so question 39005760 version 2
  hosts: all
  tasks:
    - name: show debug
      debug: msg="target = {{ item }} default ipv4 = {{ hostvars[item]['ansible_default_ipv4']['address'] }}"
      with_items: "{{ play_hosts }}"
    - name: make template
      template:
        src: q39005760v2.j2
        dest: /home/ansible/q39005760.txt
模板:

{{ play_hosts }}

{% for host in play_hosts %}
<remote protocol="remote" host="{{ hostvars[host]['ansible_default_ipv4']['address'] }}" port="9999" />
{% endfor %}
示例文件:

q39005760.txt[---]0L:[1+01/5]*(0/124b)0045 0x02D[*]
[u'server274.mydomain.tld']
剧本:

---
# http://stackoverflow.com/questions/39005760/ansible-play-hosts-template-loop

- name: so question 39005760 version 2
  hosts: all
  tasks:
    - name: show debug
      debug: msg="target = {{ item }} default ipv4 = {{ hostvars[item]['ansible_default_ipv4']['address'] }}"
      with_items: "{{ play_hosts }}"
    - name: make template
      template:
        src: q39005760v2.j2
        dest: /home/ansible/q39005760.txt
模板:

{{ play_hosts }}

{% for host in play_hosts %}
<remote protocol="remote" host="{{ hostvars[host]['ansible_default_ipv4']['address'] }}" port="9999" />
{% endfor %}
示例文件:

q39005760.txt[---]0L:[1+01/5]*(0/124b)0045 0x02D[*]
[u'server274.mydomain.tld']

我通过以下方式解决了这个问题:

{%- for h in play_hosts %}
  {%- if 'master' in hostvars[h][h.split('.')[0] + '_alias'] %}
<remote protocol="remote" host="{{ hostvars[h]['ansible_default_ipv4']['address'] }}" port="9999" /> 
  {% endif %}
{% endfor %}
{%-用于播放中的h\u主机%}
{%-如果hostvars[h][h.split('.')[0]+'_别名']%}
{%endif%}
{%endfor%}
诀窍不是依赖于
ansible\u主机名
,而是依赖于迭代变量
h


幸运的是,我只用了两天时间就弄明白了

我用以下方式解决了这个问题:

{%- for h in play_hosts %}
  {%- if 'master' in hostvars[h][h.split('.')[0] + '_alias'] %}
<remote protocol="remote" host="{{ hostvars[h]['ansible_default_ipv4']['address'] }}" port="9999" /> 
  {% endif %}
{% endfor %}
{%-用于播放中的h\u主机%}
{%-如果hostvars[h][h.split('.')[0]+'_别名']%}
{%endif%}
{%endfor%}
诀窍不是依赖于
ansible\u主机名
,而是依赖于迭代变量
h


幸运的是,我只用了两天时间就弄明白了

jinja语法是{%…%}而不是{%-…%}jinja.pocoo.org/docs/dev/templates您确定
ansible\u hostname+'\u alias'
variable name吗?我非常确定ansible\u hostname+'\u alias'我在其他地方使用过这个变量。您能试着打印hostvars并查看它显示了什么吗?示例:debug:var=hostvarjinja语法是{%…%}而不是{%-…%}jinja.pocoo.org/docs/dev/templates您确定变量名是ansible_hostname+'_alias吗?我非常确定ansible_hostname+'_alias'我在其他地方使用过这个变量。您能试着打印hostvars并查看它显示了什么吗?示例:debug:var=hostvar