我在柱子中使用盐矿时无法根据粒度值匹配动态创建主机列表。我没有收到任何错误,我没有得到所有主机的输出。实际上,即使使用salt docs中的示例,我也无法从支柱中获得任何输出。我知道这不是我的顶级文件的问题,因为我可以访问所有其他支柱值。我的测试minion的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:
----------
我如何让它工作?我没有错误,没有输出,它只是运行顺利,但文件中没有写任何内容,我从命令行得不到任何东西。我的目标是能够动态构建与特定粒度匹配的服务器列表,以在配置模板中设置配置值。我在这里走错了道路,还有更好的方法吗?
答案 0 :(得分:1)
@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('|') }}
答案 1 :(得分:0)
我建议您直接在sls文件中使用mine.get
来获取该主机列表。我认为没有必要通过支柱数据传递它。