elasticsearch Jinja模板循环问题,elasticsearch,ansible,elasticsearch,Ansible" /> elasticsearch Jinja模板循环问题,elasticsearch,ansible,elasticsearch,Ansible" />

elasticsearch Jinja模板循环问题

elasticsearch Jinja模板循环问题,elasticsearch,ansible,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 %}] 我的主人 [sample] master0

我有一个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 %}]
我的主人

[sample]
master01 type=master
data01 type=data
当我复制在master 01上同时具有master01和data01的模板时,即使我只在数据节点中查找master type而不查找任何类型

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

data01
discovery.seed_hosts: []

您的if条件被包装在整个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 %}]

抱歉,它的行为仍然相同,在更改之后,现在文件如下所示
master01-主节点发现.seed_主机:[“master01”,“data01”]data01-数据节点发现.seed_主机:[,]
我想要的是
master01发现.seed_主机:[“master01”]data01发现.seed_主机:[“master01”]
啊,我想我看到了问题所在。在循环的if条件中使用inventory_hostname,使得当前配置的主机类型为master时,循环的所有迭代都为true。我在上面编辑了我的文章,对其进行了更改,以便它检查循环中当前正在迭代的主机是否为测试条件。试试看它是否有效。