在saltstack

时间:2017-05-09 11:29:05

标签: salt-stack

我想添加一个获取小兵主机名的地雷函数。

pillar/custom.sls

mine_functions:
  custom:
    - mine_function: grains.get
    - nodename

我通过运行a来手动刷新支柱数据 salt '*' saltutil.refresh_pillar

并且在运行salt '*' mine.get '*' custom时输出正如预期的那样,显示了所有下面带有节点名数据的小兵列表。

问题是当我尝试在模板文件中执行以下操作时:

{%- set custom_nodes = [] %}
bootstrap.servers={% for host, custom in salt['mine.get']('role:foo', 'custom', expr_form='grain').items() %}
  {% do hosts.append(custom + ':2181') %}
{% endfor %}{{ custom_nodes|join(',') }}

我只是得到一个空的空间,我的服务器节点名列表应该是。

我希望有人能指出我出错的地方?

3 个答案:

答案 0 :(得分:3)

您似乎要将列表附加到hosts,然后将custom_nodes与联接一起使用?

这是故意的吗?

我认为你真正想要的是

{%- set custom_nodes = [] %}
bootstrap.servers={% for host, custom in salt['mine.get']('role:foo', 'custom', expr_form='grain').items() %}
  {% do custom_nodes.append(custom + ':2181') %}
{% endfor %}{{ custom_nodes|join(',') }}

答案 1 :(得分:0)

这对我来说很好用:

pillar/custom.sls

mine_functions:
  id_list:
    mine_function: grains.get
    key : nodename

templete.sls

{% for server in salt['mine.get']('*', 'id_list') | dictsort() %}
server {{ server }} {{ addrs[0] }}:80 check
{% endfor %}

答案 2 :(得分:0)

实际上答案很简单。在他们可以访问矿井数据之前,我没有意识到需要重新启动现有的奴才。