我刚刚开始学习ansible,并且正在关注文档。我正在运行命令,我还没有详细介绍过剧本和东西。 我能够用
成功pingansible --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也没有说什么。它是特定于版本的问题吗? 请帮帮我。
答案 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
。