SaltStack - 在 pillar 中使用我的基于粒度匹配动态构建主机名列表

SaltStack - using mine in pillar to dynamically build list of host names based on grain match

我在使用支柱中的盐矿基于谷物值匹配动态创建主机列表时遇到问题。我没有收到任何错误,我没有收到所有主机的输出。实际上,即使使用盐文档中的示例,我也根本无法从支柱获得任何输出。我知道这不是我的顶级文件的问题,因为我可以访问所有其他支柱值。我的测试小兵的 mine.interval 设置为 5。我刷新了支柱数据,并且 运行 mine.update.

这是我的支柱的一个例子:

mine_functions:
  network.ip_addrs: []
  grains.item:
    - host
    - role

访问我的函数的模板文件:

#I know this is writing the same list for each match, I'm just doing this for testing and I'll concat the results into a string when I know it works:
    {% for host in salt['mine.get']('roles:web', 'grains.items:host', expr_form='grain') | dictsort() %}
        serverList= {{ host }}
    {% endfor %}

CLI 的输出:

salt "server.domain.com" mine.get "*" "*"
server.domain.com:
    ----------

我如何让它工作?我没有错误,没有输出,它运行顺利,但文件中没有任何内容,我从命令行中也没有得到任何信息。我的目标是能够动态构建匹配特定粒度的服务器列表,以在配置模板中设置配置值。我是不是走错路了,还有更好的方法吗?

我建议直接在您的 sls 文件中使用 mine.get 来获取该主机列表。我认为没有必要通过支柱数据传递它。

@Utah_Dave,非常感谢您在这里和 IRC 中的帮助。

将此作为答案发布,以便其他搜索此内容的人获得一个很好的例子...

支柱:

mine_functions:
  grains.items: []

模板文件:

  {% set ft_hosts = [] %}
  {% for grain_vals in salt['mine.get']('role:ps:ft:True', 'grains.items', expr_form='grain').items() %}
    {% do ft_hosts.append(grain_vals[1]['host']) %}
  {% endfor %}

  ft.ps.server.hosts={{ ft_hosts|join('|') }}