我有一个Ansible清单文件有点像这样:
[es-masters]
host1.my-network.com
[es-slaves]
host2.my-network.com
host3.my-network.com
[es:children]
es-masters
es-slaves
我还有一个Jinja2模板文件,需要将某个值设置为" true"如果主持人属于" es-masters"基。
我确信这是一种简单的方法,但经过一些谷歌搜索和阅读文档后,我已经画了一个空白。
我正在寻找像Jinja2模板这样简单且程序化的东西:
{% if hostvars[host][group] == "es-masters" %}
node_master=true
{% else %}
node_master=false
{% endif %}
有什么想法吗?
答案 0 :(得分:14)
你反过来做。 您检查标识符(主机名或IP或库存中的任何内容)是否在定义的组中。如果该组属于hostvars,则不会。
{% 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
答案 1 :(得分:2)
如果您的库存无法识别带有ansible_fqdn,ansible_hostname等的主机,您还可以使用group_names
检查当前主机是否具有“es-masters”作为其组之一。
{% if 'es-masters' in group_names %}
node_master=true
{% else %}
node_master=false
{% endif %}
答案 2 :(得分:0)
为了避免非现有组出错,您应首先检查该组是否存在:
{% if 'es-masters' in group_names and ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}
答案 3 :(得分:0)
{% if ansible_fqdn in groups['es-masters'] %}
{% set node_master=true %}
{% else %}
{% set node_master=false %}
{% endif %}
大概是这样?更改名为 node_master
的 var,而不是使用 txt