【问题标题】:salt mine for all network interfaces所有网络接口的盐矿
【发布时间】:2015-06-19 06:16:39
【问题描述】:

我在使用interface 插件通过salt 配置collectd.conf 时遇到困难。 collectd.conf 需要一个网络接口列表来监控,例如:

<Plugin interface>
  Interface "em1"
  Interface "em2"
</Plugin>

我发现我需要使用salt mine 将颗粒拉入主控器 - 这是通过如下所示的支柱 sls 实现的:

mine_functions:
  network.interfaces: []

在我的collectd.conf 我有:

<Plugin interface>
{% for host, info in salt['mine.get']('*','network.interfaces').items() %}
 {% if host == grains['id'] %}
  {% for interface in info %}
  Interface "{{ interface }}"
  {% endfor %}
 {% endif %}
{% endif %}
{% endfor %}
</Plugin>

但是,它似乎对我不起作用:(

【问题讨论】:

    标签: networking salt-stack collectd


    【解决方案1】:

    如果你正在寻找本地主机上的接口(我猜你是因为你正在过滤grains['id']),那么你不需要我的。您可以从 grains 获取本地主机上的接口名称:

    {%- for iface in grains['ip_interfaces'].keys() %}
    Interface "{{ iface }}"
    {%- endfor %}
    

    如果您想要本地机器的地址列表而不是接口名称,您可以循环遍历 grains['ipv4']。没有.keys();那个grain是一个简单的列表。

    如果您需要其他主机的接口信息,那么您使用我的。请注意,network.interfaces 返回一个嵌套字典,这可能就是它对您不起作用的原因——您正在循环遍历它,就好像它是一个列表一样,这(至少在我刚刚测试它时)会产生不可读的混乱。

    要从其他服务器获取接口名称,您实际上会使用类似的东西:

    {%- for minion, ifaces in salt['mine.get']('*', 'network.interfaces').items() %}
    {{ minion }}:
    {%-   for iface in ifaces.keys() %}
      - {{ iface }}
    {%-   endfor %}
    {%- endfor %}
    

    应该输出:

    minion1:
      - eth0
      - eth1
      - lo
    minion2:
      - eth0
      - eth1
      - lo
    ...and so on.
    

    这有点像你问的,但看起来不像你真正想要做的。

    【讨论】:

    • 如何识别安装了 salt-minion 的接口?
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2014-04-23
    • 2011-07-09
    • 1970-01-01
    • 2011-11-29
    • 2020-04-18
    相关资源
    最近更新 更多