Ansible Dynamic Inventory 介紹
Ansible Inventory實際上是包含靜態Inventory和動態Inventory兩部分,靜態Inventory指的是在文件/etc/ansible/hosts中指定的主機和組,Dynamic Inventory指通過外部腳本獲取主機列表,並按照ansible 所要求的格式返回給ansilbe命令的。這部分一般會結合CMDB資管系統、zabbix 監控系統、crobble安裝系統、雲計算平台等獲取主機信息。由於主機資源一般會動態的進行增減,而這些系統一般會智能更新。我們可以通過這些工具提供的API 或者接入庫查詢等方式返回主機列表。
一、最簡單示例
由於Ansible在接受腳本動態獲取主機信息時支持的是json格式,這裡我也不從其他系統中取了,向通過一段代碼列印一個段json格式的主機信息:
註:
1、主機部分必須是列表格式的;
2、hostdata行,其中的"hosts" 部分可以省略,但如果使用時,必須是"hosts" ,不能是其他如『『hostlist』』 等字元串。
省略後可以這樣寫:
直接執行該段代碼結果如下:
上面定義了兩個主機組,test1組內包含主機10.212.52.252、10.212.52.14,test2組內包含主機10.212.52.16 。ansible可以通過如下方法調用:
二、複雜示例
在靜態主機配置文件示例中,會有組變數(vars),組之間的包含,如下圖:
如果以上部分想要,通過腳本獲取實現,實現後返回的json格式應該如下圖:
像上面這種複雜的返回格式,一般不會用在ad-hoc環境中,多數會用在ansible-playbook 中,應為playbook文件中有時假會涉及到vars 參數的傳參。
三、從第三方平台獲取主機示例
這個在本篇一開頭就提到了,我們從如cobbler、cmdb等平台上獲取的示例。由於ansible 的發起者(作者)同時又是cobbler軟體的創建者,所以官方文檔給了我們cobbler的示例,同時給出了一個從AWS 去上獲取主機信息的示例 。如下:
cobbler 上獲取主機信息代碼
aws 雲上獲取主機信息代碼
關於如何從aws上獲取主機信息併入庫,這個我之前也寫過相關的篇章,具體也可以參看我之前的博文----AWS主機資產管理 (該篇也是純python實現的)。
通過zabbix api 獲取主機信息,我也寫過一篇zabbix小結(八)Zabbix api ,想要通過zabbix平台上獲取主機列表信息也可以參考下。
四、其他
1、ansible -i 參數後調用的腳本並非一定是py文件,也可以是其他腳本輸出的結果,這裡做了個簡單的測試:
2、-i 參數指定的腳本需要有可執行許可權 ,不然會報錯,如下:
?
TAG:Linux資訊速推 |