Jinja模板循环问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jinja模板循环问题相关的知识,希望对你有一定的参考价值。

我有一个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

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

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

data01
discovery.seed_hosts: []
答案

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

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

以上是关于Jinja模板循环问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jinja2 模板 Django 中计算循环“for in”中的所有元素

ansible-playbook模板化(jinja2)

如何在 jinja (django) 中使用 for 循环显示最新的 5 个订单

理解 JINJA 模板

Jinja for 循环不会填充选择下拉列表

将文件部署到管理主机 | jinja2模板