我试图在主节点上执行此操作
ansible all -m shell -a "/bin/ping -c3 `hostname`"
而不是ping远程主机名,它正在ping主节点
例如,主节点主机名=主远程节点hostname = Slave
以上命令执行此操作
/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)
请在Ansible中建议如何实现这一目标。
答案 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