Ansible:使用数组创建变量

Ansible: Use array to create a variable

要使用 Ansible 部署 ldap.conf,我必须从一个数组创建一个变量,用于模板 ldap.conf.j2:

nss_base_group          {{ ldap_base_group }}

变量数组:

---
ldap_groups: [ 'ORACLE', 'MY_SQL', 'POSTGR' ]

这必须产生一个参数,并使用大量静态字符进行增强:

ldap_base_group:"dc=foo,dc=com?sub?(&(|(memberof:1.2.654.123456.1.5.2468:=cn=ORACLE,ou=Groups,dc=foo,dc=com)(memberof:1.2.654.123456.1.5.2468:=cn=MY_SQL,ou=Groups,dc=foo,dc=com)(memberof:1.2.654.123456.1.5.2468:=cn=POSTGR,ou=Groups,dc=foo,dc=com))(!(userAccountControl:1.2.654.123456.1.5.654:=2)))"

这是可读的相同参数(由于换行符、空格等原因不可用):

ldap_base_group: "dc=foo,dc=com?sub?
(&
    (|
            (memberof:1.2.654.123456.1.5.2468:=cn=ORACLE,ou=Groups,dc=foo,dc=com)
            (memberof:1.2.654.123456.1.5.2468:=cn=MY_SQL,ou=Groups,dc=foo,dc=com)
            (memberof:1.2.654.123456.1.5.2468:=cn=POSTGR,ou=Groups,dc=foo,dc=com)
    )
    (!
            (userAccountControl:1.2.654.123456.1.5.654:=2)
    )
)"

有没有人在 Ansible 中找到了一个很好的解决方案来做到这一点?也许还有其他方法可以做到这一点,我也很想知道其他方法。

如果您对此进行模板化,您应该能够按照以下方式做一些事情:

ldap_base_group: "dc=foo,dc=com?sub?
(&
    (|
    {% for group in ldap_groups %}
            (memberof:1.2.654.123456.1.5.2468:=cn={{ group }},ou=Groups,dc=foo,dc=com)
    {% endfor %}
    )
    (!
            (userAccountControl:1.2.654.123456.1.5.654:=2)
    )
)"

如果您需要将所有内容都放在一行中,那么只需将其展平即可。