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