SaltStack - 使用我的柱子来动态构建基于粒度匹配的主机名列表

时间:2016-05-18 21:39:53

标签: salt-stack

我在柱子中使用盐矿时无法根据粒度值匹配动态创建主机列表。我没有收到任何错误,我没有得到所有主机的输出。实际上,即使使用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:
    ----------

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

2 个答案:

答案 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来获取该主机列表。我认为没有必要通过支柱数据传递它。