2015-08-18 19 views
1

Ansible allows devs 編寫將返回描述當前主機的動態「快照」的JSON的程序(以任何語言)。我使用vSphere,目前Ansible OSS不支持vSphere,因此我需要編寫這樣的「定製庫存插件」。Ansible中的自定義動態庫存腳本/插件

我可以處理查詢vSphere的主機列表,以及構建與Ansible預期兼容的JSON。

當文檔完全(貌似)落在單位是:

  • 我如何用我的庫存應用程序「連接」 Ansible?也就是說,我的庫存應用程序是一個簡單的bash腳本(inventory.sh)。如何配置Ansible調用bash inventory.sh並從中獲取JSON?實際上,這個應用程序可能是一個Java可執行文件(inventory.jar),但我認爲,如果我能弄清楚如何使用bash工作,我可以推斷爲Java;和
  • Ansible如何從應用程序實際捕獲/獲取JSON? STDOUT?這一切都應該發生在HTTP連接上嗎?例子? inventory.shinventory.jar如何將JSON傳回給Ansible?

回答

1

庫存腳本必須位於Ansible運行的同一臺機器上。它不通過http進行通信,Ansible將簡單地解析你的程序的STDOUT。位置不事可言,你當你調用Ansible的路徑傳遞到Ansible:

ansible-playbook ... -i /path/to/your/inventory.sh 

要避免每次你可以add this to you ansible.cfg時間的推移庫存位置:

inventory = /path/to/your/inventory.sh 

你也可以複製腳本/etc/ansible/hosts,這是默認位置Ansible會查找清單文件/腳本,但我寧願保持東西放在一起,所以我建議把它靠近你的劇本/角色等

(3)有沒有記錄在任何地方?不要看到Ansible文檔什麼...

它不Developing Dynamic Inventory Sources網頁上提到,但它是在Dynamic Inventory頁面上的一些例子中可以看出。文檔是社區管理的,時間不多,結構不整齊,缺乏重要信息。

順便說一句,有一個VMware inventory腳本包括在內。通過查看源代碼,我看到它導入了一些vSphere的東西。我對VMware很少有經驗,所以我不能判斷這是否真的是你需要的,不需要自己寫。

+0

真棒,完美答案@udondan!謝謝! – smeeb

1

這是完全由用戶定義的。通常,您可以使用Python編寫動態庫存並使用輸出的json轉儲來創建庫存。

這裏是你提到的使用情況的一個例子(的vSphere):在創建它像一個正常的Python文件並創建選項(如他在主要那樣),有選擇地執行https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py

簡而言之基於哪些選項被傳遞的函數。這些將進行REST調用,並以JSON轉儲的形式返回輸出,Ansible可以解析該轉儲以用於清單。

+0

感謝@kcrumpto(+1) - 該腳本絕對有幫助,但仍然沒有解決我主要關注的問題:(1)如何配置Ansible使用此Python腳本/應用程序獲取動態主機列表? (2)這個腳本/應用程序如何傳遞JSON?你提到了JSON轉儲,我認爲你的意思是[this](https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py#L73)?如果是這樣,它看起來像腳本只是發送JSON轉儲到'STDOUT',那麼這意味着Ansible掛鉤'STDOUT'?除了'STDOUT'之外,還有其他的選擇嗎? – smeeb

+0

和(3)是否有*這種文件,*任何地方*?在Ansible文檔中看不到任何內容...... – smeeb