如何获取模板中所有盐爪的列表?

Ale*_*lex 15 configuration-management salt-stack

基本上我正在创建一个描述Munin服务器配置的Salt状态,我需要得到一个已知给主人的所有小兵的列表,如下所示:

{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
    address {{ host.ip }}
    use_node_name yes
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

唯一的区别是我不想使用支柱,我需要动态填充此列表.ret.get_minions似乎是相关的,但由于某种原因我不能使它工作.我有什么选择?

Ale*_*lex 15

我设法使用Salt Mine系统实现了这一点(感谢Salt-users Google group的成员):

{% for host, hostinfo in salt['mine.get']('*', 'network.interfaces').items() %}
[{{ host }}]
    address {{ hostinfo['eth0']['inet'][0]['address'] if hostinfo['eth0'].has_key('inet') else hostinfo['br0']['inet'][0]['address'] }}
    use_node_name yes
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我不得不补充一下

mine_functions:
  network.interfaces: []
Run Code Online (Sandbox Code Playgroud)

/etc/salt/minion在每个节点的末尾启用S​​alt Mine.

  • 只是一个建议:您可以使用salt部署/etc/salt/minion.d/mine.conf文件,并使用salt进行管理. (4认同)

Uta*_*ave 9

亚历克斯的答案很棒.盐矿将为您提供上次矿井执行时正确的爪牙清单.

如果要实现第二个数据,可以使用发布模块使用对等接口.发布模块文档在这里:http://docs.saltstack.com/ref/modules/all/salt.modules.publish.html#module-salt.modules.publish

{% for host in salt['publish.publish']('*', 'network.ip_addrs', 'eth0') %}
[{{ host.fqdn }}]
    address {{ host.ip }}
    use_node_name yes
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

确保设置主配置以允许minions执行network.ip_addrs.

编辑:

要回答下面的问题,您必须使主机能够通过对等发布接口查询其他小部件.要允许所有小兵查询所有其他小兵的IP地址,请将其添加到/ etc/salt/master:

peer:                                                                          
  .*:
    - network.ip_addrs
Run Code Online (Sandbox Code Playgroud)