Как мне передать зерна одного миньона другому?

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

Другие вопросы по тегам