Reactor-vRA-SaltStack Config集成:如何查询事件触发状态执行结果
前提假设
- vRA与SaltStack Config集成运行正常
- SaltStack Config可正常接收Minion的密钥
场景说明
创建新虚拟机时将从vRA侧触发事件,需明确用户获知事件触发状态、执行结果的方式,相关配置示例如下:
- Reactor配置:
reactor: - 'my/custom/event': - salt://reactor/custom.sls
/srv/salt/reactor/custom.sls文件配置:
test_df: local.cmd.run: - tgt: "role:MyServer" - tgt_type: grain - arg: - df -h > /tmp/test_df.txt
- Cloud-init执行命令:
salt-call event.send 'my/custom/event'
事件执行状态确认方法
顺着事件流转的链路从发端到落地逐层排查即可,全链路的执行状态都可以覆盖:
第一步:确认事件是否成功发送到SaltStack Master
首先在运行Cloud-init的新虚拟机上,直接查看salt-call event.send命令的返回结果:
- 发送成功会直接返回
True,附带对应事件的tag信息;返回False就是发送失败,优先排查Minion和Master的网络连通性、Minion密钥是否通过Master认证。 - 需要交叉验证的话,直接在Master上开启实时事件监听:执行
salt-run state.event pretty=True,触发事件后如果能刷出tag为my/custom/event的事件条目,就证明事件已经成功送达Master。
第二步:确认Reactor规则是否正常触发
事件送达Master后,直接查看Master端运行日志即可,日志默认路径为/var/log/salt/master,搜索关键词my/custom/event或reactor:
- 正常触发的日志会明确记录事件匹配过程、对应sls文件加载结果、执行指令下发的全流程记录。
- 如果日志提示找不到对应sls文件、YAML语法错误,就是Reactor本身配置问题,检查sls文件存放路径、YAML缩进格式即可。
第三步:确认目标节点的任务执行结果
配置中Reactor触发的local.cmd.run是异步下发给所有匹配role:MyServer grain标签的节点的,有两种校验方式:
- 逐台登录目标节点校验:先检查
/tmp/test_df.txt文件是否存在、内容是否符合df -h的正常输出预期;再查看Minion端日志/var/log/salt/minion,搜索cmd.run关键词,可以看到命令执行返回码、标准输出、错误输出内容,返回码为0即为执行成功,非0即为执行报错,日志中会直接标注具体报错原因,比如权限不足、命令不存在等。 - 批量在Master端查询:先在Master日志中找到Reactor触发时生成的作业ID(即jid字段),执行
salt-run jobs.lookup_jid <替换为实际查到的jid>,即可拉取所有匹配节点的任务执行返回结果,每台节点的执行状态、返回内容、报错信息都会明确列出,无需逐台登录。
如果需要在vRA侧直接查看结果,可以在Cloud-init的salt-call命令后增加简单轮询逻辑,定期查询对应作业的执行状态,拿到明确的成功/失败结果后再同步给vRA部署流程,即可直接在vRA的部署详情页查看最终执行状态,无需每次登录服务器排查。
内容的提问来源于stack exchange,提问作者Megazord
相关产品推荐
相关产品推荐

