Событие отправки Saltstack во время подачи заявления - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь зарегистрировать своего миньона в центральном файле хостов, а затем отправить этот файл хостов всем моим подключенным миньонам.

Вот что я имею в виду:

  1. Миньон отправляет событие 'register' с его ip и именем хоста для регистрации в центральном файле хостов мастера
  2. Мастер прослушивает событие 'register' и реагирует с реактором /srv/reactor/register.sls
  3. Reactor вызывает состояние /srv/salt/register.sls для миньона, установленного на хосте мастера, чтобы изменить центральный файл и отправить событие 'hosts_modified' после завершения модификации
  4. Прослушивание мастерана событие '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

Кажется, это работает так.

1 Ответ

0 голосов
/ 06 марта 2019

Я наконец-то сделал это с помощью 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

Кажется, это работает так.

...