Ansible“msg”:“此模块需要key = value参数echo

时间:2016-06-30 04:23:14

标签: command ansible

我刚刚开始学习ansible,并且正在关注文档。我正在运行命令,我还没有详细介绍过剧本和东西。 我能够用

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

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

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

返回

  

x.x.x.x |失败>> {       “失败”:是的,       “msg”:“此模块需要key = value参数(['/ bin / echo','batmaan'])”   }

有什么想法吗?

更新

我在-a参数之前使用了 -m shell 并且它有效。我的ansible版本是1.4.4。当我们告诉完整路径时,为什么要通过'shell'?即使docs也没有说什么。它是特定于版本的问题吗? 请帮帮我。

1 个答案:

答案 0 :(得分:0)

这里的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使用ping参数调用/bin/echo, batmaan模块,这是错误的。

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

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