2016-10-13 22 views
11

我正在使用2.1。我有以下庫存主機文件和一個需要訪問主機文件變量的播放所調用的角色。如何訪問它的任何想法(目前收到的錯誤):在安全劇本中訪問庫存主機變量

主機文件

[test1] 
test-1 ansible_ssh_host=abc.def.ghi.jkl ansible_ssh_port=1212 

[test2] 
test2-1 ansible_ssh_host=abc.def.ghi.mno ansible_ssh_port=1212 

[test3] 
test3-1 ansible_ssh_host=abc.def.ghi.pqr ansible_ssh_port=1212 
test3-2 ansible_ssh_host=abc.def.ghi.stu ansible_ssh_port=1212 

[all:children] 
test1 
test2 
test3 

作用 我試圖訪問在以下時尚的作用:

{{ hostvars.ansible_ssh_host }} 

& &

{{ hostvars.test1.ansible_ssh_host }} 

我試圖訪問ansible_ssh_host在test1的部分。

錯誤

fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"} 

回答

15

你在正確的軌道約hostvars上。
magic variable用於訪問有關其他主機的信息。

hostvars與庫存主機名作爲關鍵字的哈希值。
要訪問的每個主機的字段,使用hostvars['test-1']hostvars['test2-1']

ansible_ssh_hostdeprecated贊成ansible_host自2.0。
所以,你應該首先從庫存主機參數去掉「_ssh」(即成爲「ansible_user」,「ansible_host」和「ansible_port」),然後在你的角色調用它:

{{ hostvars['your_host_group'].ansible_host }} 
+0

spaciba-我嘗試過這種語法,但我認爲它不工作,因爲我身邊有一個錯字 –

1

你應該能夠使用變量名直接

ansible_ssh_host 

或者你可以通過HOSTVARS,而無需使用magic variable​​

字面上指定主機