解释在 salt-state 中使用 mine.get

Explain using mine.get inside a salt-state

谁能给我一个白痴解释以下是如何工作的:

{% for server, addrs in salt['mine.get']('roles:web', 'network.ip_addrs', expr_form='grain') | dictsort() %}
server {{ server }} {{ addrs[0] }}:80 check
{% endfor %}

支柱文件如下所示:

mine_functions:
  network.ip_addrs: [eth0]

salt 为前两个值 serveraddrs 分配了什么? 您将如何在上面使用多个地雷选项?也就是说,如果你的 pillar 文件有一个额外的 mine 函数,就像这样:

mine_functions:
     network.ip_addrs: [eth0]
      role:
        - mine_function: grains.get
        - role

然后您如何访问第一个代码片段中的角色函数?

希望这是有道理的

我的

在你的 pillar 中定义的 mine 函数告诉 minions 将一些关于它们的信息推送给 salt master。然后你可以使用 mine.get 从任何 minion 访问它。这记录在 this page.

mine.get

首先,你可以自己看看mine.get结果:

salt 'minion0' mine.get 'roles:web' 'network.ip_addrs' expr_form='grain'
minion0:
    ----------
    minion1:
        - ip1
        - ip2
    minion2:
        - ip

所以你得到了一个字典,键是 minions id,值是网络 ip 地址列表。 dictsort() 函数在传递给循环变量之前对键进行排序。

你最终得到 server 包含 minion id 和 addrs 它的 IP 地址列表。

第一个参数过滤你想要获取哪些minions数据,第三个参数(expr_form)是这个过滤器的过滤类型。您可以使用 globgraincompound,基本上任何 salt targeting.

现在,要访问 role 挖掘的数据,您只需将 network.ip_addrs 替换为 role