首页 文章

如何在每个语句中使用Ansible库存成员资格和变量来使用Jina模板

提问于
浏览
0

我想要完成的事情:

我想使用Jinja模板填写单行(见下文),具体取决于Ansible Inventory GroupMembership&variables .

通过使用下面描述的文件我试图完成,当 current hostgroup 1 的成员时,它应该用 ansible_variable_1 填充 config.xml . 或者当 current hostgroup 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 %} 但是我不想使用a语句(?)来匹配正确的组到正确的变量 .

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

Group_vars:

ansible_variable_1: 
ansible_variable_2:
ansible_variable_3:

Ansible库存:

[group 1]
Server1.hostname.com

[group 2]
Server2.hostname.com

[group 3]
Server3.hostname.com

2 回答

  • 0

    我不明白为什么你想让你的生活更加艰难 . 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

    如果你想要一个循环而不是解决方案,它应该是:

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

相关问题