我想添加一个获取小兵主机名的地雷函数。
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(',') }}
我只是得到一个空的空间,我的服务器节点名列表应该是。
我希望有人能指出我出错的地方?
答案 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)
实际上答案很简单。在他们可以访问矿井数据之前,我没有意识到需要重新启动现有的奴才。