Я использую Salt для настройки нескольких серверов.Два из них назначены на роль 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.Если это так, пример «правильного пути» был бы очень признателен.