我试图让我的主人向一个支持数据库和一些文件的minion发送一个脚本。然后,我希望我的主人对从备份脚本创建的文件进行rsync,这样我就可以向主服务器发送备份已完成的事件。主服务器在Reactor中处理事件并启动执行rsync的Runner。
我希望我的小兵在报告状态“备份完成”之前等待Runner完成并返回。那是成功的。目前,minion只是报告状态执行成功而不等待Runner的响应。
我目前的设置是这样的:
从主人
运行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"}
主人有一个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
我一直在考虑让小兵等着,然后听一个&rs?rsync / complete'由主人触发的事件,但我找不到如何在minion上创建事件监视器,也不知道如何让它等待。我看过的另一个解决方案是“salt.modules.cp.push'虽然出于安全原因,文档再次警告使用它。
解决方案对我来说似乎过于复杂,所以也许我正在以错误的方式接近这一点。欢迎所有的想法。
答案 0 :(得分:0)
你可以在minion上运行一个反应堆,但我很确定它只能监听它自己的事件总线。我不相信有一个命令可以通过事件总线从Master向Minion发送消息。
我认为你最好的选择是让你的跑步者通过Salt的正常执行模块在Master上执行一次调用。