Ansible Dynamic Inventory 介紹

Ansible Inventory其實是包含靜態Inventory和動態Inventory兩部分,靜態Inventory指的是在文件/etc/ansible/hosts中指定的主機和組,Dynamic Inventory指經過外部腳本獲取主機列表,並按照ansible 所要求的格式返回給ansilbe命令的。這部分通常會結合CMDB資管系統、zabbix 監控系統、crobble安裝系統、雲計算平臺等獲取主機信息。因爲主機資源通常會動態的進行增減,而這些系統通常會智能更新。咱們能夠經過這些工具提供的API 或者接入庫查詢等方式返回主機列表。html

1、最簡單示例python

因爲Ansible在接受腳本動態獲取主機信息時支持的是json格式,這裏我也不從其餘系統中取了,向經過一段代碼打印一個段json格式的主機信息:linux

#!/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)

注:git

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

二、hostdata行,其中的"hosts" 部分能夠省略,但若是使用時,必須是"hosts" ,不能是其餘如‘‘hostlist’’ 等字符串。json

省略後能夠這樣寫:api

hostdata = {group:host1ip,group2:host2ip}

直接執行該段代碼結果以下:bash

[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.25二、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

2、複雜示例測試

在靜態主機配置文件示例中,會有組變量(vars),組之間的包含,以下圖:

Ansible Dynamic Inventory 介紹Ansible Dynamic Inventory 介紹

若是以上部分想要,經過腳本獲取實現,實現後返回的json格式應該以下圖:

Ansible Dynamic Inventory 介紹Ansible Dynamic Inventory 介紹

像上面這種複雜的返回格式,通常不會用在ad-hoc環境中,多數會用在ansible-playbook 中,應爲playbook文件中有時假會涉及到vars 參數的傳參。

3、從第三方平臺獲取主機示例

這個在本篇一開頭就提到了,咱們從如cobbler、cmdb等平臺上獲取的示例。因爲ansible 的發起者(做者)同時又是cobbler軟件的建立者,因此官方文檔給了咱們cobbler的示例,同時給出了一個從AWS 去上獲取主機信息的示例 。以下:

cobbler 上獲取主機信息代碼

aws 雲上獲取主機信息代碼

關於如何從aws上獲取主機信息併入庫,這個我以前也寫過相關的篇章,具體也能夠參看我以前的博文----AWS主機資產管理  (該篇也是純python實現的)。

經過zabbix api 獲取主機信息,我也寫過一篇zabbix小結(八)Zabbix api ,想要經過zabbix平臺上獲取主機列表信息也能夠參考下。

4、其餘

一、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

二、-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`?

原文來自:http://www.361way.com/ansible-dynamic-inventory/4403.html

本文地址:https://www.linuxprobe.com/ansible-dynamic-inventory.html編輯:張雄,審覈員:逄增寶

相關文章
相關標籤/搜索