为什么我的自定义Ansible模块失败了?

guy*_*abi 1 ansible ansible-playbook

我正在学习ansible所以我写了一本我能想到的最简单的剧本和模块,但它失败了.

我的剧本

---
- hosts: demo
  tasks:
    - name: install demo
      action: install
Run Code Online (Sandbox Code Playgroud)

我的模块

echo "changed=True msg=OK"
Run Code Online (Sandbox Code Playgroud)

以下似乎很好:

  • bash脚本模式是755
  • playbook正确链接到模块

这是输出:

FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "changed=True msg=OK\r\n", "msg": "MODULE FAILURE", "parsed": false}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我怎样才能做到这一点?

udo*_*dan 7

模块的输出必须是JSON.

试试这个:

echo "{\"changed\": false, \"msg\" : \"ok\"}"
Run Code Online (Sandbox Code Playgroud)

来自文档:

你也不应该在一个模块中这样做:

print "some status message"
Run Code Online (Sandbox Code Playgroud)

因为输出应该是有效的JSON.

和:

如果一个模块返回标准错误或以其他方式不能产生有效的JSON,实际输出仍将在Ansible显示,但该命令将不会成功.