首頁 > 系統教程 > Linux > Ansible Dynamic Inventory 介紹

Ansible Dynamic Inventory 介紹

王林
發布: 2024-08-24 10:44:02
原創
923 人瀏覽過

Ansible Inventory實際上是包含靜態Inventory和動態Inventory兩部分,靜態Inventory指的是在文件/etc/ansible/hosts中指定的主機和群組,Dynamic Inventory指透過外部腳本獲取主機列表,並按照ansible 所要求的格式傳回給ansilbe指令的。這部分一般會結合CMDB資管系統、zabbix 監控系統、crobble安裝系統、雲端運算平台等取得主機資訊。由於主機資源一般會動態的進行增減,而這些系統一般會智慧更新。我們可以透過這些工具提供的API 或存取庫查詢等方式傳回主機清單。

一、最簡單範例

由於Ansible在接受腳本動態取得主機資訊時支援的是json格式,這裡我也不從其他系統中取了,向透過一段程式碼列印一個段json格式的主機資訊:

#!/usr/bin/env python
# coding=utf-8
import json
host1ip = ['10.212.52.252','10.212.52.14']
host2ip = ['10.212.52.16']
group = 'test1'
group2 = 'test2'
hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}}
print json.dumps(hostdata,indent=4)
登入後複製

註:

1、主機部分必須是列表格式的;

2、hostdata行,其中的"hosts" 部分可以省略,但如果使用時,必須是"hosts" ,不能是其他如‘‘hostlist’’ 等字串。

省略後可以這樣寫:

hostdata = {group:host1ip,group2:host2ip}
登入後複製

直接執行該段程式碼結果如下:

[root@361way.com ~]# python twogroup.py
{
"test1": {
"hosts": [
"10.212.52.252",
"10.212.52.14"
]
},
"test2": {
"hosts": [
"10.212.52.16"
]
}
}
登入後複製

上面定義了兩個主機群組,test1群組內包含主機10.212.52.252、10.212.52.14,test2群組內包含主機10.212.52.16 。 ansible可以透過以下方法呼叫:

[root@361way.com ~]# ansible -i twogroup.py test1 -m command -a 'uptime' -k
SSH password:
10.212.52.252 | success | rc=0 >>
23:01pm up 24 days 8:24, 2 users, load average: 0.21, 0.35, 0.39
10.212.52.14 | success | rc=0 >>
23:08pm up 332 days 5:23, 2 users, load average: 0.00, 0.01, 0.05
[root@361way.com ~]# ansible -i twogroup.py test2 -m command -a 'uptime' -k
SSH password:
10.212.52.16 | success | rc=0 >>
23:09pm up 332 days 6:00, 2 users, load average: 0.08, 0.06, 0.05
登入後複製
二、複雜例子

在靜態主機設定檔範例中,會有群組變數(vars),群組之間的包含,如下圖:

Ansible Dynamic Inventory 介绍

如果以上部分想要,透過腳本取得實現,實現後回傳的json格式應該如下圖:

Ansible Dynamic Inventory 介绍

像上面這種複雜的返回格式,一般不會用在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檔,也可以是其他腳本輸出的結果,這裡做了個簡單的測試:

[root@361way.com yaml]# ansible -i group.sh test1 -m command -a 'uptime' -k
SSH password:
10.212.52.16 | success | rc=0 >>
00:18am up 332 days 7:10, 2 users, load average: 0.00, 0.01, 0.05
10.212.52.14 | success | rc=0 >>
00:17am up 332 days 6:32, 2 users, load average: 0.01, 0.03, 0.05
10.212.52.252 | success | rc=0 >>
00:11am up 24 days 9:33, 2 users, load average: 0.49, 0.42, 0.41
[root@localhost yaml]# cat group.sh
#!/bin/bash
groups='''
{
"test1": {
"hosts": [
"10.212.52.252",
"10.212.52.14",
"10.212.52.16"
]
}
}
'''
echo $groups
登入後複製

2、-i 參數指定的腳本需要有可執行權限 ,不然會報錯,如下:

[root@361way.com yaml]# ansible -i hostjson.py AA -a 'uptime'
ERROR: The file hostjson.py looks like it should be an executable inventory script, but is not 
marked executable. Perhaps you want to correct this with `chmod +x hostjson.py`?
登入後複製

以上是Ansible Dynamic Inventory 介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:linuxprobe.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板