Ansible中是否有任何adhoc命令在远程节点上运行远程命令?

时间:2017-05-02 13:42:46

标签: ansible

我试图在主节点上执行此操作

ansible all -m shell -a "/bin/ping -c3 `hostname`"

而不是ping远程主机名,它正在ping主节点

例如,主节点主机名=主

远程节点hostname = Slave

以上命令执行此操作

/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)

请在Ansible中建议如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

如果你反复引用这样的hostname`hostname` 那么它就是一个将在localhost上执行的命令。如果您确实想在远程主机上执行它,请使用inventory_hostname

尝试:

ansible all -m shell -a "/bin/ping -c3 {{inventory_hostname}}"

如果要在目标主机中执行hostname,请转义backquote,以便本地计算机上的shell不会解释它。

ansible all -m shell -a "/bin/ping -c3 \`hostname\`"

答案 1 :(得分:0)

添加到helloV回答,虽然从您的广告资源文件中获取inventory_hostname,但您可能还需要查看

  • {{ ansible_nodename }} - 系统报告的主机名
  • {{ ansible_hostname }} - 在第一个句点(。)
  • 之前显示字符串的非限定主机名

如果你真的想使用hostname命令的输出而不是ansible收集的事实,你应该在命令中使用单引号,比如

ansible all -m shell -a '/bin/ping -c3 `hostname`'

单引号将保留要传递给远程主机的确切语法,而当您使用双引号时,表达式将在主节点上进行评估,然后再传递给托管主机

请参阅Difference between single and double quotes in Bash以供将来参考。

另外,请使用$(command)语法代替`command`,请参阅https://unix.stackexchange.com/questions/126927/have-backticks-i-e-cmd-in-sh-shells-been-deprecated