我試圖在主節點執行此Ansible中是否有任何adhoc命令在遠程節點上運行遠程命令?
ansible all -m shell -a "/bin/ping -c3 `hostname`"
而不是操作遠程主機,它的查驗主節點
例如,主節點的主機名=主
遠程節點的主機名=從屬
上面的命令此
/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)
請建議如何在Ansible中實現這一點。
我試圖在主節點執行此Ansible中是否有任何adhoc命令在遠程節點上運行遠程命令?
ansible all -m shell -a "/bin/ping -c3 `hostname`"
而不是操作遠程主機,它的查驗主節點
例如,主節點的主機名=主
遠程節點的主機名=從屬
上面的命令此
/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)
請建議如何在Ansible中實現這一點。
如果你反引用這樣的hostname
:`主機名`那麼它是一個將在本地主機上執行的命令。如果你真的要執行它的遠程主機上,然後用
嘗試:
ansible all -m shell -a "/bin/ping -c3 {{inventory_hostname}}"
如果你想在目標主機執行hostname
,然後逃離backquote
,使其不被解釋本地機器上的shell。
ansible all -m shell -a "/bin/ping -c3 \`hostname\`"
添加到helloV答案,而從你的清單文件拍攝,你可能也想看看
{{ 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
ansible all -m shell -a'/ bin/ping -c3'hostname''正在保存命令就是這樣。 ping:未知主機'hostname' –
http://www.grymoire.com/Unix/Quote.html有關於單引號和雙引號的詳細信息 –
確定嗎?你的目標系統是什麼?在centos6和opensuse上分別命令 ansible -i 10.0.8.82,127.0。1 -m殼-a '/ bin中/平-c3 $(主機名)' 出品期望的結果 – Andrew
所以沒有辦法使用反引號\執行遠程節點上的命令'some_commad \' 是否有可能通過劇本? –
@v_i_s_h檢查我的更新。 – helloV
FYI ansible all -m shell -a「/ bin/ping -c3 \\'hostname \\'」不起作用 –