如何在模板文件中嵌入Ansible事实?

时间:2017-03-22 16:25:14

标签: jinja2 ansible-2.x

我有一个看起来像这样的库存文件

[elk-master-nodes]
10.22.123.123
10.22.234.234
10.22.111.222

[elk-data-nodes]
10.22.111.111
10.22.222.222

[elk-client-nodes]
10.22.111.234

我的模板文件中有这个

{% if "{{ ansible_default_ipv4.address }}" in groups['elk-master-nodes'] %}
node.master: true
node.data: false
{% elif "{{ ansible_default_ipv4.address }}" in groups['elk-data-nodes'] %}
node.master: false
node.data: true
{% else %}
node.master: false
node.data: false
{% endif %}

但是,生成的文件总是有" else" if语句的子句,也就是说,我在所有节点中看到了这一点

node.master: false
node.data: false

我猜测我在这种情况下没有正确嵌入Ansible事实,ansible_default_ipv4.address?什么是正确的语法?删除""导致语法错误。

1 个答案:

答案 0 :(得分:0)

由于jinja2代码内部基本上是Python,只需执行

{% if ansible_default_ipv4.address in groups['elk-master-nodes'] %}
node.master: true
node.data: false
{% elif ansible_default_ipv4.address in groups['elk-data-nodes'] %}
node.master: false
node.data: true
{% else %}
node.master: false
node.data: false
{% endif %}