我试图在一个州连接字符串,而且我没有太多运气。我已经看过建议使用(| 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 %}
答案 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只在有另一个值时才添加分隔符。