【发布时间】:2014-09-24 08:46:52
【问题描述】:
我正试图让我的主人发送一个脚本给一个备份数据库和一些文件的仆从。然后,我希望我的 Master 同步从备份脚本创建的文件,因此我向 Master 触发备份完成的事件。 master 在 Reactor 中处理事件并启动执行 rsync 的 Runner。
我希望我的仆从等待 Runner 完成并返回,然后再报告状态“备份完成”成功。目前,minion 只是简单地报告状态执行成功,而无需等待 Runner 的响应。
我当前的设置是这样的:
从 master 上运行 minion 上的备份脚本
salt 'minion' state.sls backup
minion 触发备份完成的事件(并立即返回)
backup-complete:
module.run:
- name: 'event.fire_master'
- fun: fire_master
- tag: backup/complete
- data: {"status":"Backup complete"}
master 有一个 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
我一直在考虑让 minion 等待并侦听 master 触发的“rsync/complete”事件,但我找不到如何在 minion 上创建事件侦听器,也找不到如何让它等待。我看过的另一个解决方案是“salt.modules.cp.push”,尽管出于安全原因,文档再次警告使用它。
解决方案对我来说似乎过于复杂,所以也许我以错误的方式接近这个问题。欢迎所有想法。
【问题讨论】:
标签: salt-stack