我试着在主节点上执行这个
ansible all -m shell -a "/bin/ping -c3 `hostname`"而不是敲击远程主机名,而是敲击主节点
主节点主机名=主节点
远程节点主机名=从节点
上面的命令执行以下操作
/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)请建议如何在Ansible中实现这一点。
发布于 2017-05-02 14:47:57
如果您像这样回引hostname:hostname,那么它是一个将在本地主机上执行的命令。如果您真的想在远程主机上执行它,请使用inventory_hostname
尝试:
ansible all -m shell -a "/bin/ping -c3 {{inventory_hostname}}"如果要在目标主机中执行hostname,则转义backquote,使其不被本地计算机上的shell解释。
ansible all -m shell -a "/bin/ping -c3 \`hostname\`"发布于 2017-05-02 15:31:55
添加到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
https://stackoverflow.com/questions/43739483
复制相似问题