templates - 根据组更改 Ansible 模板中的变量

标签 templates jinja2 ansible

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

相关文章:

ansible - 警告 : Ansible evaluating bare variable. 如何正确实现?

ansible - 关于ansible,尝试执行脚本时权限被拒绝

c++ - 模拟模板化数据成员是否合适?

c++ - 部分模板特化错误

loops - ansible 模板循环 jinja2 “我需要用 分隔行,但最后一个条目没有 ,

python - 如何正确导入jinja2.ext.loopcontrols到Flask?

c++ - 使用 auto 和 decltype 从模板类中的函数返回引用

c++ - 具有非类型模板参数的通用打印机

jinja2 - 如何在 dbt 中使用与 dbt_utils.dateadd 中的字符串连接的变量?

ruby - Rake 和 Ansible 有什么区别?