Jinja模板循环问题

时间:2019-10-11 18:09:12

标签: elasticsearch ansible

我有一个Jinja模板,用于根据主机文件中定义的变量添加弹性搜索主机名,但是该模板无法满足该条件。

我的模板

discovery.seed_hosts: [{% for es_host in ansible_play_hosts if hostvars[inventory_hostname].type == 'master' %} "{{ es_host }}" {%- if not loop.last %},{% endif %}{% endfor %}]

我的host.yml

[sample]
master01 type=master
data01 type=data

当我复制同时在master 01上同时具有master01和data01的模板时,即使我只在寻找master类型而在数据节点中都没有。

master01
discovery.seed_hosts: [ "master01", "data01"]

data01
discovery.seed_hosts: []

1 个答案:

答案 0 :(得分:0)

您的条件语句是否包含在整个for语句中,而不是放在循环中。因此,除非您当前正在运行的主机类型是“ master”,否则循环将不会运行,如果运行,它将对所有主机运行。尝试以下方法:

discovery.seed_hosts: [{% for es_host in ansible_play_hosts %} {% if hostvars[es_host].type == 'master' %} "{{ es_host }}"{% endif%}{%- if not loop.last %},{% endif %}{% endfor %}]