elasticsearch - 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 %}]
我的主机.yml
[sample]
master01 type=master
data01 type=data
当我复制在 master 01 上同时具有 master01 和 data01 的模板时,即使我只在数据节点中寻找 master 类型而没有。
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 %}]
推荐阅读
- react-native - Google 地图未使用新的 API 密钥加载
- reactjs - 位跟踪 React 组件的全局上下文
- html - 使用 moment.js 来指示 mongoDB/mongoose 上次更新的时间?
- notepad++ - 如何用记事本++中的一个共同点替换所有单词
- javascript - 如何使用 javaScript 文件作为其他 JavaScript 文件的高阶包装器
- r - 将向量列表转换为数据框
- node.js - 如何使用 NodeJS 13 和 Typescript 3.8 导入 esm 模块?
- dart - 如何删除字符串中的前导0
- css - 如何在 tornado fx 中制作带圆角的文本字段?(科特林)
- c# - 如何在 UserManager CreateAsync 中查看控制器中出现的错误?