如何通过在for-each语句中使用Ansible库存成员资格和变量来使用Jina模板

如何通过在for-each语句中使用Ansible库存成员资格和变量来使用Jina模板,ansible,Ansible,我正在努力实现的目标: 我想根据Ansible Inventory Groupmembership和variables使用Jinja模板填充一行(见下文) 通过使用下面描述的文件,我试图在当前主机是组1的成员时,使用ansible\u变量填充config.xml。或者当当前主机是第2组的成员时,它应该填充ansible_变量_2。等等 Jinja模板config.xml.j2: <activedFilters userFilter="(&amp;(sAMAccountName=%v

我正在努力实现的目标:

我想根据Ansible Inventory Groupmembership和variables使用Jinja模板填充一行(见下文)

通过使用下面描述的文件,我试图在当前主机组1的成员时,使用ansible\u变量填充config.xml。或者当当前主机第2组的成员时,它应该填充ansible_变量_2。等等

Jinja模板config.xml.j2:

<activedFilters userFilter="(&amp;(sAMAccountName=%v)(objectcategory=user)(|(ansible_variable_1/2/3)))"/>
可转帐存货:

[group 1]
Server1.hostname.com

[group 2]
Server2.hostname.com

[group 3]
Server3.hostname.com

我不明白你为什么要让生活更艰难。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 }})))"/>


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

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

{% 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 %}

谢谢你的反应。我们希望保持仓库尽可能干净,并尽可能使用集体厕所。在这种情况下不是这样吗?如果不使用组名,那么如何知道要定义哪个变量?因为在所有组上都有一个循环,然后匹配当前主机是否是组的一部分是很容易的,但是您如何决定是否需要定义变量1、2或3?请澄清bitHi TechMaster,您不能确定正确的变量是正确的。Techraf的示例解决了这个问题。在我的例子中,我通过在group_var中定义唯一的变量来修复它
{% 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 %}