如何通过在每个语句中使用Ansible库存成员身份和变量来使用Jina模板

时间:2018-07-31 15:00:45

标签: ansible

我要完成的工作:

我想使用Jinja模板来填充一行(请参见下文),具体取决于Ansible库存组成员和变量。

通过使用下面描述的文件,我试图完成以下操作:当当前主机组1的成员时,它应该填充 config.xml ansible_variable_1 。或者,当当前主机组2 的成员时,它应填充 ansible_variable_2 。等等...

Jinja模板config.xml.j2:

<activedFilters userFilter="(&amp;(sAMAccountName=%v)(objectcategory=user)(|(ansible_variable_1/2/3)))"/>

我尝试使用{% if inventory_hostname in groups['group 1'] %} {{ ansible_variable_1 }} {% elif inventory_hostname in groups['group 2'] %} {{ ansible_variable_2 }} {% endif %},但是我不想对组名进行“硬编码”,我想对每个语句使用一个(?)将正确的组与正确的变量进行匹配。

有人能指出我正确的方向吗?

Group_vars:

ansible_variable_1: 
ansible_variable_2:
ansible_variable_3:

可用库存:

[group 1]
Server1.hostname.com

[group 2]
Server2.hostname.com

[group 3]
Server3.hostname.com

2 个答案:

答案 0 :(得分:1)

我不明白为什么你想让自己的生活更艰难。 Ansible为您提供了组变量的机制,因此请使用它:

[group1]
Server1.hostname.com

[group2]
Server2.hostname.com

[group3]
Server3.hostname.com

[group1:vars]
ansible_variable=value1

[group2:vars]
ansible_variable=value2

[group3:vars]
ansible_variable=value3

在模板中:

<activedFilters userFilter="(&amp;(sAMAccountName=%v)(objectcategory=user)(|({{ ansible_variable }})))"/>

或任何您想要输出的样子。

答案 1 :(得分:0)

如果您想要一个循环解决方案,它应该像:

{% for gname in groups -%}
{% for host in groups[gname] %}
{% if hostvars[host].ansible_host == ansible_host %}
## now you got your current host
## here you can do some conditions or variable defining
{% endif %}
{%- endfor %}
{%- endfor %}