从名册中应用用户名作为盐状态的变量

时间:2017-10-17 13:22:31

标签: jinja2 salt-stack

我有一些主机/用户的名单:

myhos1:
  host: 192.168.1.1
  user: foouser

myhost2:
  host: 192.168.1.2
  user: bazuser

现在在状态文件中我想使用名册中的用户名来做事情,例如

Install VNC script:
  file.managed:
    - name: /home/<user>/test.sh
    - source: salt://files/test.sh
    - user: <user>
    - group: <user>

如何使用模板语言将<user>替换为我将状态应用到的主机的实际用户ID?

如果我能以某种方式直接访问名册中的信息会很好,但我没有找到任何可以在相关文档页面中起作用的内容。

1 个答案:

答案 0 :(得分:1)

你有两个我能想到的选择。

如果您的用户不多,最简单的选择就是使用jinja循环遍历列表

{% for user in ['foouser', 'bazuser'] %}
/home/{{ user }}/test.sh:
  file.managed:
    - source: salt://files/test.sh
    - user: {{ user }}
    - group: {{ user }}
{% endfor %}

或者您应该能够使用cmd.run来获取用户列表:

 {% for user in salt['cmd.run']('ls /home/').split('\n') %}
    ... snipped
 {% endfor %}

我已经测试了上述内容,它对我有用。

cmd.run in jinja - google salt-users forum

Useful reading if you're unsure about using Jinja with Salt