Как получить список всех солончаков в шаблоне?
В основном я создаю состояние Salt, описывающее конфигурацию сервера Munin, и мне нужно получить список всех миньонов, известных мастеру, примерно так:
{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
address {{ host.ip }}
use_node_name yes
{% endfor %}
Единственное различие заключается в том, что я не хочу использовать столп для этого, мне нужно, чтобы этот список был заполнен динамически. ret.get_minions
кажется актуальным, но я не могу заставить его работать по какой-то причине. Каковы мои варианты?
Ответы
Ответ 1
Мне удалось добиться этого, используя систему Salt Mine (благодаря членам группы пользователей Salt-users Google):
{% for host, hostinfo in salt['mine.get']('*', 'network.interfaces').items() %}
[{{ host }}]
address {{ hostinfo['eth0']['inet'][0]['address'] if hostinfo['eth0'].has_key('inet') else hostinfo['br0']['inet'][0]['address'] }}
use_node_name yes
{% endfor %}
Мне пришлось добавить
mine_functions:
network.interfaces: []
до конца /etc/salt/minion
на каждом node, чтобы включить солевую шахту.
Ответ 2
Алекс ответ велик. Соляная шахта даст вам список миньонов, которые исправляются с момента последнего разминирования.
Если вы хотите дожидаться до вторых данных, вы можете использовать одноранговый интерфейс, используя модуль публикации. Опубликовать документы модуля находятся здесь: http://docs.saltstack.com/ref/modules/all/salt.modules.publish.html#module-salt.modules.publish
{% for host in salt['publish.publish']('*', 'network.ip_addrs', 'eth0') %}
[{{ host.fqdn }}]
address {{ host.ip }}
use_node_name yes
{% endfor %}
Обязательно установите свою основную конфигурацию, чтобы позволить миньонам выполнять network.ip_addrs.
EDIT:
Чтобы ответить на вопрос ниже, вы должны разрешить хосту запрашивать другие миньоны через интерфейс публикации через peer. Чтобы разрешить всем миньонам запрашивать ip-адреса всех других миньонов, добавьте это в свой /etc/salt/master:
peer:
.*:
- network.ip_addrs
Ответ 3
Почему бы не использовать модуль minion.list?
В нашей среде столпов у нас есть столбец, который является приватным для каждого миньона (/srv/pillar/hosts/[server_A, server_B, server_C...]/some_pillar.sls).
Чтобы упростить задачу (поскольку некоторые люди забывают добавить новые столпы в верхний файл), наш главный файл столба выглядит следующим образом:
{{ saltenv }}:
{% for minion in salt['minion.list']()['minions'] -%}
{{ minion + '*' }}:
- hosts.{{ minion.split('.')[0] }}
{% endfor -%}
Таким образом, я могу получить список всех миньонов, известных хозяину, каждый раз, когда обновляется столб.