Ansible "msg":“这个模块需要 key=value arguments echo

Ansible "msg": "this module requires key=value arguments echo

我刚刚开始学习 ansible,并且一直在关注文档。我是 运行 命令,我还没有详细介绍剧本之类的东西。 我能够通过

成功 ping
ansible --private-key ../key.pem  -vvvv all -m ping -u root 

我在主机文件中有 IP。所以我只是 运行 文档中指定的另一个命令。

ansible --private-key ../key.pem  -vvvv all -m ping -u root  -a "/bin/echo batmaan"

哪个returns

x.x.x.x | FAILED >> { "failed": true, "msg": "this module requires key=value arguments (['/bin/echo', 'batmaan'])" }

有什么想法吗?

更新

我在 -a 参数之前使用了 -m shell 并且它起作用了。我的 ansible 版本是 1.4.4。告诉完整路径为什么要传'shell'?甚至 docs 也没有说什么。它是特定于版本的问题吗? 请帮帮我。

这是 ansible 二进制文件的内容:

  -a MODULE_ARGS, --args=MODULE_ARGS
                        module arguments

  -m MODULE_NAME, --module-name=MODULE_NAME
                        module name to execute (default=command)

所以当你执行 ansible localhost -m ping 时,ansible 调用 ping 模块来测试与主机(本例中为 localhost)的连接。

当你尝试 ansible localhost -m ping -a "/bin/echo batmaan" 时,你要求 ansible 使用 /bin/echo, batmaan 参数调用 ping 模块,这是错误的。

有一个shell模块在远程主机上执行命令,所以当你执行ansible localhost -m shell -a "/bin/echo batmaan"时,你要求ansible用你的参数调用shell模块,它执行/bin/sh"/bin/echo batmaan".

注意默认调用的模块是command(与shell模块有点不同),它接受第一个参数并将其作为一个命令执行,后面有参数(但是不要通过 shell) 处理它们,所以执行 ansible localhost -a "/bin/echo batmaan" 将以 batmaan 作为参数执行 /bin/echo