绝望的理由
我目前不会依赖 Salt 的 CLI 退出代码(版本2014.7.5
) - 还有很多问题未解决 https://github.com/saltstack/salt/issues/18510来解决这个问题。
获取有效的 JSON 输出
有--static http://docs.saltstack.com/en/2014.7/ref/cli/salt-call.html#cmdoption-salt-call--out修复 JSON 输出的选项:
如果使用--out=json
,你可能会想要--static
以及。如果没有 static 选项,您将获得每个 Minion 的 JSON 字符串。
否则上面 Salt 给出的输出包含multiple无效的对象(每个小兵一个)JSON http://www.json.org/(JSON 需要single每个文档的对象、数组或值)以及通过标准 JSON 解析器加载整个输出的简单方法将会失败。甚至在文档 http://docs.saltstack.com/en/latest/ref/output/all/salt.output.json_out.html (as of 5188d6c https://github.com/saltstack/salt/blob/43e69d2842c34cfb49b8997c7c3d5b378b43406a/salt/output/json_out.py#L20):
一些 JSON 解析器可以猜测一个对象何时结束以及新对象何时开始,但许多解析器不能。
除此之外,还有一些盐选项(例如show_jid
)还将字符串发送到 STDOUT,后者将其与执行报告混合并使 JSON 输出格式无效。选项--static
也解决了这个问题。
更新:解析器检测 Salt 执行失败
这个问题给我带来了很大的压力,所以我很快就生了这个Python脚本@75e42af https://github.com/uvsmtid/common-salt-states/blob/75e42afb04cbd7d82722c9793c1c9be6637b8bbd/states/bootstrap/bootstrap.dir/modules/utils/check_salt_output.py with 示例如何使用@ b819961d https://github.com/uvsmtid/common-salt-states/blob/b819961dbb683285329084952f24dab6f30d07c6/states/common/jenkins/configure_jobs_ext/build_bootstrap_package.xml#L57.
注意:这不会解决任意 Salt 命令的输出(包括test.ping
上面),但涵盖了与状态执行输出相关的问题。还是有办法解决的test.ping
上面的问题 - 它可以从状态运行,然后可以通过脚本分析输出。了解如何从状态内调用执行模块或*.sls
file 在这个答案中 https://stackoverflow.com/a/20788572/441652.
Features(代码本身的详细信息):
- 处理两者的输出
highstate
and orchestrate
跑步者。
- 处理多个 Minion 和任意数量命令的输出。
- 报告总结“N”和总体结果。
- 可用作脚本和模块的独立文件。
唯一的限制是它需要 JSON 输出(Salt 选项--out json
)只是因为在将其提供给解析器之前很容易解决所讨论的问题。