我有一个 Ansible 库存文件,有点像这样:
[es-masters]
host1.my-network.com
[es-slaves]
host2.my-network.com
host3.my-network.com
[es:children]
es-masters
es-slaves
我还有一个 Jinja2 模板文件,如果主机属于“es-masters”组,则需要将某个值设置为“true”。
我确信有一种简单的方法可以做到这一点,但经过一些谷歌搜索和阅读文档后,我一片空白。
我正在寻找像这样简单且程序化的东西来放入 Jinja2 模板中:
{% if hostvars[host][group] == "es-masters" %}
node_master=true
{% else %}
node_master=false
{% endif %}
有什么想法吗?
最佳答案
反之亦然。 您检查标识符(主机名或 IP 或 list 中的任何内容)是否在定义的组中。如果该组位于主机变量中则不会。
{% if ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}
但是,你最好应该这样做:
在模板中提供默认值
# role_name/templates/template.j2
node_master={{ role_name_node_master | default(true) }}
比 group_vars 中的覆盖
# group_vars/es-masters.yml
role_name_node_master: false
关于templates - 根据组更改 Ansible 模板中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25552766/