2015-05-19 67 views
1

我使用ansible(ansible 1.9.0.1)。ansible - 如何通過本地DNS服務器運行ansible-playbook來解析主機名

我正在運行ansible-playbook,使用它的主機名對目標/遠程機器執行一些操作。

我的庫存文件有一個主機名的條目即appserver01.newdomainname.com

當我運行ansible,劇本只是做一個簡單的(Hello World示例),它不能解決主機名。如果在清單文件中,我有x.x.x.x IP,那麼它的工作原理!

所以,好像在我的源機器的/etc/resolv.conf中的域名服務器或搜索不解決與遠程主機使用它的完全限定域名即appserver01.newdomainname.com

有什麼辦法我可以調用ansible-playbook並傳遞新的/本地DNS服務器,這樣人們可以首先從該DNS解析主機名(在清單文件中)(而不是從/etc/resolv.conf中讀取/解析它)。

PS:我無法將這個新的/本地DNS名稱服務器xx.xx.yy.zz添加到/etc/resolv.conf中。

+0

我不認爲這是可能的,因爲我沒有在這個ssh中看到一個選項。除了在Ansible清單或'.ssh/config'中定義IP之外,我唯一能想到的就是一個ssh隧道('ProxyCommand')。如果您通過可解析目標主機的主機委託所有任務,則主機名不需要在本地解析。 – udondan

+0

當你只是從你的主人'ssh appserver01.newdomainname.com',這是否工作? – Mxx

+0

@Mxx no。因爲/etc/resolv.conf沒有名稱服務器條目來解析newdomain.com。我們也不想在每臺服務器上更新/ etc/hosts文件(我們將在其中運行安全操作手冊),而且我們每天都會不斷創建新的域(DEV團隊中的任何主體都可以創建mynewdomain.com或myname .com域,同時在VCloud中創建VM/Vapp)。如果我可以選擇安全/可操作的劇本來傳遞額外的DNS服務器,這樣如果生產/服務器無法解析您的域名,那麼它會非常有幫助,那麼我們將使用我們通過命令行傳遞的DNS服務器來解析它。 –

回答

1

解決此問題的一種方法是在清單文件中使用屬性ansible_ssh_host。這與連接到本地DNS不同,但它有點像運輸DNS記錄和清單一樣。這樣,您仍然可以通過主機名引用服務器,並且不必將任何內容放入服務器主機文件中。因此,它應該是這樣的:

[myservers] appserver01.newdomainname.com ansible_ssh_host=x.x.x.x

你甚至可以將這些映射出到host_vars文件,並保留IP地址的不同列表中爲每個部署環境。

相關問題