我要完成的工作:
我想使用Jinja模板来填充一行(请参见下文),具体取决于Ansible库存组成员和变量。
通过使用下面描述的文件,我试图完成以下操作:当当前主机是组1的成员时,它应该填充 config.xml 和 ansible_variable_1 。或者,当当前主机是组2 的成员时,它应填充 ansible_variable_2 。等等...
Jinja模板config.xml.j2:
<activedFilters userFilter="(&(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
答案 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="(&(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 %}