首页 文章

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

提问于
浏览
15

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

{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
    address {{ host.ip }}
    use_node_name yes
{% endfor %}

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

3 回答

  • 9

    我设法使用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 %}
    

    我不得不补充一下

    mine_functions:
      network.interfaces: []
    

    在每个节点上的 /etc/salt/minion 结束时启用Salt Mine .

  • 3

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

    如果要实现第二个数据,可以使用发布模块使用对等接口 . 发布模块文档在这里: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 %}
    

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

    编辑:

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

    peer:                                                                          
      .*:
        - network.ip_addrs
    
  • 15

    为什么不使用minion.list模块?

    在我们的支柱环境中,我们拥有每个minion私有的支柱(/ srv / pillar / hosts / [server_A,server_B,server_C ...] / some_pillar.sls) .

    为了使事情变得更容易(因为有些人一直忘记在顶部文件中添加新的支柱),我们的支柱顶部文件如下所示:

    {{ saltenv }}:
      {% for minion in salt['minion.list']()['minions'] -%}
      {{ minion + '*' }}:
        - hosts.{{ minion.split('.')[0] }}
      {% endfor -%}
    

    通过这种方式,每次更新支柱环境时,我都可以获得主人知道的所有爪牙的列表 .

相关问题