我还编写了一个简单的 ansible 任务模块,它的功能与 相同shell
,但会将 stdout 和 stderr 作为其 diff 结果的一部分,因此如果您使用 ,就可以看到它--diff
。但是,如果您使用 运行 ansible--diff
并且任务失败,它不会显示 diff 输出。
如果任务失败,ansible 将只打印整个任务详细信息的原始 JSON,并将 stdout 和 stderr 显示为 JSON 结果的一部分。阅读大型多行 JSON 输出字符串有点烦人。
即使任务失败,有没有办法格式化并显示差异输出?
python 2.7 上的 ansible 2.9.6。
答案1
当您编写自己的 Ansible 模块时,您可以自行决定如何处理任务错误。我预计,如果底层 shell 执行失败,您的模块将检查返回代码并以编程方式失败。您的代码返回一个包含 stdout 和 stderr 的字典。但您可以在失败状态下返回任何您想要的内容。
在这种情况下,Ansible 的默认行为是启动和停止该过程,显示其拥有的任何内容,忽略任何格式等。
由于您没有发布任何内容,因此很难帮助您,除非以元形式进行解释。
- 在这种情况下,当您想要 diff 时,模块是否应该返回失败状态?或者返回一些您可以注册的 dict key:value 是否有用,并使用它来检查,如果在显示 diff 后播放失败
- 失败状态是否应该包含 stdout/stderr 或者您是否可以仅输出所需的格式(请注意,失败的 shell 命令 - 差异是什么,您可以使用它来查找差异)
另外 - 不是问题 - 但使用 diff 工具实现非幂等 shell 模块听起来很奇怪。当您有一个“之前的值”(无论它是什么)时,您如何看待“之后的值”是什么以产生差异?