2017-01-10 39 views
0

說我是路過的主機名到Ansible劇本,像這樣:如何獲得主機的IP地址作爲extra-vars在Ansible中傳遞?

ansible-playbook ansible/db-playbook.yml --extra-vars "master=mydb-master, slave=mydb-slave" 

在劇本我要訪問的mydb-slave主機的實際IP地址:

- name: Copy ssh key to Slave 
    command: ... "{{ mydb-slave }}" 

在這種情況下,輸出是字符串字面值mydb-slave,但我需要完整的ip地址。

+0

你能否提供更多的上下文?您將字符串文字(推測爲主機名)轉換爲IP所做的任何操作都將是DNS查找或搜索本地/ etc/hosts或類似的東西。由於你的任務名稱被標記爲「將ssh密鑰複製到奴隸」,爲什麼不編寫一個可靠的複製/ rsync /任何內容並讓它正常解析IP? –

+0

「完整的IP地址」是什麼意思?什麼實體應該解析名稱? – techraf

+0

對於上下文,在'hosts'文件中我有'[mydb-slave] 123.456.78.91'。我想使用'--extra-vars'參數傳入'mydb-slave' var,但我不想在主頁中對主機進行硬編碼。基本上我只想從劇本中的'mydb-slave' var獲得ip'123.456.78.91'。 –

回答

0

確保Python模塊dnspython被安裝在主機上正在運行ansible,那麼下面應該工作(如果給出的主機是DNS名稱):

- name: Lookup slave IP 
    set_fact: slave_ip="{{ lookup('dig', '{{ slave }}')}}" 

- name: Copy ssh key to Slave 
    command: ... "{{ slave_ip }}" 

如果主機在ansible庫存,以下應該工作:

- name: Copy ssh key to Slave 
    command: ... "{{ hostvars[slave]['ansible_eth0']['ipv4']['address'] }}" 
+0

使用這種方法'{{slave_ip}}''var作爲'NXDOMAIN'輸出。 –

+0

這個「完整的IP」在那裏記錄? Ansible需要從中學習。 –

+0

每個組的ip地址都在'/ etc/ansible/hosts'文件中。 –