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编辑:张雄,审核员:逄增宝

相关文章
相关标签/搜索