Как мне передать зерна одного миньона другому?
Я использую Солт для настройки нескольких серверов. Два из них назначены на роль DNS-сервера и настроены с использованием dnsmasq-formula
, Другие имеют различные роли, такие как gitlab-server
, которые определены в столбе.
Вот как это настроено:
/srv/salt/top.sls
---
base:
'roles:dns-server':
- match: pillar
- dnsmasq
'roles:gitlab-server'
- gitlab
/srv/pillar/top.sls
---
{% import_yaml "roles.yaml" as r %}
base:
{% if 'dns-server' in r[grains['id']] %}
- dns.dnsserv
{% endif %}
/srv/pillar/dns/dnsserv.sls
---
dnsmasq:
...
hosts:
domain.name:
git: <GIT_SERVER_IP>
...
/srv/pillar/roles.yaml
---
'minion1-id':
- role1
- role2
'minion2-id':
- role3
- role4
# and so on
Сейчас <GIT_SERVER_IP>
жестко закодировано. Я бы предпочел опрашивать миньонов, найти человека с нужной ролью и программно извлечь его IP-адрес.
когда /srv/pillar/dns/dnsserv.sls
обрабатывается, обрабатывается информация, доступная миньону с ролью "dns-сервер". При загрузке roles.yaml
Внутри dnsserv.sls
Мне удается получить идентификатор миньона gitlab-сервера (с некоторым очень уродливым кодом). Но как я могу получить его IP из этого файла?
Я видел упоминания о соляной шахте, но на самом деле не нашел полного примера, как использовать эту функциональность.
Этот вопрос вполне может быть примером проблемы XY. Если это так, пример "правильного пути" будет высоко ценится.
1 ответ
Чтобы передать зерно или столб от одного миньона другому, вам нужно использовать "соляную шахту" ( https://docs.saltstack.com/en/latest/topics/mine/). Тема не простая, но вкратце:
- определить новую функцию mine_function, доступную вашим миньонам, например
mine_functions:
grains:
grains.items: []
- затем используйте его в вашем штате с помощью mine.get https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.mine.html
Я рекомендую вам сначала попробовать mine.get в командной строке, чтобы увидеть, сможете ли вы получить ваши данные, прежде чем начинать писать состояние.