在Jinja连接字符串?

时间:2018-01-22 11:31:39

标签: salt-stack

我试图在一个州连接字符串,而且我没有太多运气。我已经看过建议使用(| join)的帖子,但我的所有字符串都不在单个字典中。这是我的代码:

sshd_content:
  file.line:
{% set admin_groups = '' %}
{% for app in grains['application_groups'] %}
{% for group in pillar['admin_users'][app]['members'] %}
{% set admin_groups = admin_groups ~ ' ' ~ group ~ '@mydomain.com' %}
{% endfor %}
{% endfor %}
    - name: /etc/ssh/sshd_config
    - match: AllowGroups wheel fred
    - mode: replace
    - content: AllowGroups wheel fred bob {{ admin_groups }}

我尝试使用+代替〜而没有运气。

我做错了什么?

此状态正常:

sudoers_asmgroups_content:
  file.append:
    - name: /etc/sudoers.d/mygroups
    - text:
{% for app in grains['application_groups'] %}
  {% for group in pillar['admin_users'][app]['members'] %}
      - '%{{ group }}@mydomain.com ALL=(ALL) ALL'
  {% endfor %}
{% endfor %}

1 个答案:

答案 0 :(得分:1)

我通过修改解决方案here找到了可行的解决方案。

这似乎是admin_groups变量的范围问题。不确定为什么追加有效,但我不打算争辩。

对于上面OP中的示例,这里是代码:

sshd_content:
  file.line:
{% set admin_groups = [] %}
{% for app in grains['application_groups'] %}
{% for group in pillar['admin_users'][app]['members'] %}
{% do admin_groups.append(group) %}
{% endfor %}
{% endfor %}
    - name: /etc/ssh/sshd_config
    - match: AllowGroups wheel myadmin
    - mode: replace
    - content: AllowGroups wheel fred bob {{ admin_groups|join('@mydomain.com ') }}@mydomain.com 
{% endif %}

需要添加第二个@ domain.com,因为这些项是AD组名,而join只在有另一个值时才添加分隔符。