Возникли проблемы с пользовательскими функциями mine_functions в saltstack

Я хочу добавить мою функцию, которая получает имя хоста миньона.

pillar/custom.sls

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

Я вручную обновляю данные столба, запустив 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(',') }}

Я просто получаю пустое место, где должен быть мой список имен узлов сервера.

Я надеялся, что кто-нибудь сможет указать, где я ошибаюсь?


person grinferno    schedule 09.05.2017    source источник


Ответы (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(',') }}
person gtmanfred    schedule 18.05.2017

Это отлично работает для меня:

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 %}
person chaitu kopparthi    schedule 15.05.2017

На самом деле ответ был довольно прост. Я не знал, что нужно перезапустить существующих миньонов, прежде чем они смогут получить доступ к данным шахты.

person grinferno    schedule 16.05.2017