Я пытаюсь, чтобы мой мастер отправил скрипт миньону, который создает резервную копию базы данных и некоторых файлов. Затем я хочу, чтобы мой мастер выполнил 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», хотя документация предупреждает об использовании этого по соображениям безопасности.
Решение кажется мне слишком сложным, поэтому, возможно, я подхожу к этому неправильно. Все мысли приветствуются.