Я пытаюсь зарегистрировать своего миньона в центральном файле хостов, а затем отправить этот файл хостов всем моим подключенным миньонам.
Вот что я имею в виду:
- Миньон отправляет событие 'register' с его ip и именем хоста для регистрации в центральном файле хостов мастера
- Мастер прослушивает событие 'register' и реагирует с реактором /srv/reactor/register.sls
- Reactor вызывает состояние /srv/salt/register.sls для миньона, установленного на хосте мастера, чтобы изменить центральный файл и отправить событие 'hosts_modified' после завершения модификации
- Прослушивание мастерана событие 'hosts_modified' и реагирует с реактором /srv/reactor/deploy_hosts.sls, который применяет состояние /srv/salt/hosts.sls ко всем подключенным миньонам, чтобы выдвинуть новый модифицированный файл хостов
Первые 3 шага работают нормально, но мастер не реагирует на последнее событие 'hosts_modified'.
Команда для запуска регистра на minion:
salt-call event.send register minion_host=somehostname minion_ip=1.1.1.1
Конфигурация главного реактора (/etc/salt/master.d/reactor.conf):
reactor:
- salt/beacon/*/inotify//etc/hosts:
- /srv/reactor/revert.sls
- 'deployment':
- /srv/reactor/deployment.sls
- 'register':
- /srv/reactor/register.sls
- 'hosts_modified':
- /srv/reactor/deploy_hosts.sls
/srv/reactor/register.sls
{% set forwarded_data = data.data %}
test:
local.state.sls:
- tgt: 'master'
- args:
- mods: register
- pillar:
forwarded_data: {{ forwarded_data | json() }}
/ srv / salt / register.sls
{% set data = salt.pillar.get('forwarded_data') %}
add_host:
cmd.run:
- name: /srv/scripts/hosts-manage.sh {{ data.minion_ip }} {{ data.minion_host }}
event_host_modified:
event.send:
- name: hosts_modified
- require:
- cmd: add_host
/ srv / реактор/deploy_hosts.sls
deploy_hosts:
local.state.sls:
- tgt: '*'
- name: hosts
/ srv / salt / hosts.sls
# Hosts file management
/etc/hosts:
file.managed:
- source: salt://repo/conf/hosts
Я делаю это неправильно?
Разве невозможно обрабатывать события, отправленные при применении состояний?
РЕДАКТИРОВАТЬ
Я наконец-то сделал это с помощью Orchestrate Runner.
/ srv /реактор / register.sls:
{% set forwarded_data = data.data %}
register:
runner.state.orch:
- args:
- mods: orch.register
- pillar:
forwarded_data: {{ forwarded_data | json() }}
/ srv / salt / orch / register.sls:
{% set data = salt.pillar.get('forwarded_data') %}
add_host:
cmd.run:
- name: /srv/scripts/hosts-manage.sh {{ data.minion_ip }} {{ data.minion_host }}
- stateful: True
refresh hosts on minions:
salt.state:
- tgt: '*'
- sls: hosts
- watch:
- cmd: add_host
/ srv / salt / hosts.sls:
# Hosts file management
/etc/hosts:
file.managed:
- source: salt://repo/conf/hosts
Кажется, это работает так.