返回 JSON 并遵循 changed 约定
遵循模块结果协议
返回 JSON 并遵循 changed 约定 是 CoddyKit 上的免费 Ansible Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ansible Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ansible Academy 课程共包含 4 节课。
模块使用 JSON 进行通信
模块完成工作后,必须向 Ansible 返回一个 JSON 结果。控制器正是通过它了解主机上发生了什么。
使用 exit_json 退出
成功时请调用 module.exit_json。它会将结果打印为 JSON,并以正确的退出代码干净地结束模块。
module.exit_json(changed=True, name='web')changed 键很重要
请始终如实报告 changed。它会告诉 Ansible 您是否修改了系统,从而决定输出中显示 ok 还是 changed。
module.exit_json(changed=False)修改前先检查状态
要正确处理 changed,请先读取当前状态。如果状态已经符合目标,就设置 changed=False,不要执行任何操作。
if current == desired:
module.exit_json(changed=False)返回额外数据
您可以向 exit_json 添加任意键,它们会出现在任务结果中。用户之后可以注册并重新使用这些数据。
module.exit_json(changed=True, user_id=42)使用 fail_json 处理失败
出现问题时,请调用 module.fail_json 并提供清晰的消息。Ansible 会将任务标记为失败,并显示您的文本。
module.fail_json(msg='API request timed out')不要直接打印
不要使用 print 或原始 stdout。Ansible 只期待最后那个 JSON 对象,因此多余的 print 会破坏结果并导致任务失败。
只能调用一次退出函数
每个模块恰好以一个 exit_json 或 fail_json 结束。两者都会引发 SystemExit,因此它们之后的内容都不会运行。
有用的消息很重要
请在结果中加入友好的 msg,说明您执行了什么操作。好的消息可以将令人困惑的运行过程变成易读的信息。
module.exit_json(changed=True, msg='Created user web')匹配内置模块的行为
让您的输出表现得像核心模块一样:报告 changed,返回有意义的字段,并在失败时明确说明原因。保持一致性才能建立信任。
结果决定一切
处理程序、条件语句和已注册的变量都会读取您的 JSON。正确设置 changed,才能让您的模块成为合格的 Ansible 模块。
快速检查
请想一想,在没有修改任何内容时,您的模块应该报告什么。
回顾
成功时以 exit_json 结束,出错时使用 fail_json,如实报告 changed,并且绝不要打印原始输出。这就是模块结果协议。📦
常见问题解答
「返回 JSON 并遵循 changed 约定」课时是免费的吗?
是的 — 「返回 JSON 并遵循 changed 约定」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ansible Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ansible Academy 课程共包含 4 节课。
「返回 JSON 并遵循 changed 约定」这节课中我会学到什么?
遵循模块结果协议 你通过在浏览器中直接运行的动手代码来练习 Ansible Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ansible Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ansible Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「返回 JSON 并遵循 changed 约定」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ansible Academy 课中编写并运行代码吗?
能。每节 Ansible Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 何时构建自定义模块
- AnsibleModule 与参数规范
- 返回 JSON 并遵循 changed 约定
- 在您的模块中支持 Check Mode