Ansible:使用数组创建变量

时间:2015-12-07 16:05:38

标签: arrays ansible ansible-playbook

要使用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找到了一个很好的解决方案吗?也许还有另外一种方法可以做到这一点,我也很想知道替代方案。

1 个答案:

答案 0 :(得分:2)

如果您对此进行模板设计,您应该可以按照以下方式执行操作:

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)
    )
)"

如果您需要一行中的所有内容,那么将其展平应该可以正常工作。