Заставьте миньона ждать, пока мастер-бегун завершит свою работу.

Я пытаюсь, чтобы мой мастер отправил скрипт миньону, который создает резервную копию базы данных и некоторых файлов. Затем я хочу, чтобы мой мастер выполнил rsync файлы, созданные из сценария резервного копирования, поэтому я запускаю событие о завершении резервного копирования для мастера. Мастер обрабатывает событие в Reactor и запускает Runner, который выполняет rsync.

Я хочу, чтобы мой миньон дождался завершения и возвращения Бегуна, прежде чем он сообщит, что состояние «резервное копирование завершено» было успешным. В настоящее время миньон просто сообщает, что состояние выполнено успешно, не дожидаясь ответа Бегуна.

Моя текущая установка работает следующим образом:

Запустите скрипт резервного копирования на миньоне с мастера

salt 'minion' state.sls backup

Миньон инициирует событие завершения резервного копирования (и немедленно возвращается)

backup-complete:
  module.run:
     - name: 'event.fire_master'
     - fun: fire_master
     - tag: backup/complete
     - data: {"status":"Backup complete"}

У мастера есть Reactor, который перехватывает событие и вызывает Runner.

backup_complete:
  runner.sync-backup.sync:
    - status: {{ data['data']['status'] }}

Затем Runner выполняет команду rsync для синхронизации файлов и каталогов и возвращает код выхода.

def sync(status):
  command = "myrsyncscript.sh arg0 arg1"
  result = os.system(command) >> 8
  return result

Я думал о том, чтобы миньон ждал и прослушивал событие «rsync/complete», инициированное мастером, но я не могу найти, как создать прослушиватели событий на миньоне и как заставить его ждать. Еще одно решение, которое я рассмотрел, — это «salt.modules.cp.push», хотя документация предупреждает об использовании этого по соображениям безопасности.

Решение кажется мне слишком сложным, поэтому, возможно, я подхожу к этому неправильно. Все мысли приветствуются.


person span    schedule 22.09.2014    source источник


Ответы (1)


Вы можете запустить реактор на миньоне, но я уверен, что он слушает только свою собственную шину событий. Я не верю, что есть команда для отправки сообщения от Мастера к Миньону по шине событий.

Я думаю, что вам лучше всего сделать так, чтобы ваш бегун на Мастере выполнял вызов Миньона через обычные исполнительные модули Salt.

person Utah_Dave    schedule 24.09.2014