2017-10-17 43 views
0

我有一些主机/用户名册:状态文件从名册申请用户名作为变量,在盐状态

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> 

如何使用模板语言与我申请的状态到主机的实际用户ID来代替<user>

如果我能以某种方式直接从名册中获取信息,那会很好,但我没有发现任何可以在相关文档页面中工作的东西。

回答

1

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

如果你还没有很多用户最简单的办法是使用神社

{% 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

+0

感谢您的建议!理想情况下,我希望获得用于连接到名单中的机器的单个用户,但在此期间,您的第二种方法可能是一种有用的解决方法。 – centic

+0

@centic啊,对不起,我应该真的戴上眼镜。您是否尝试过使用支柱文件并循环播放内容?查看答案:https://stackoverflow.com/questions/27169509/saltstack-load-pillar-in-a-for-loop。我应该编辑我的问题来包含这一点 –