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),组之间的包含,如下图:
如果以上部分想要,通过脚本获取实现,实现后返回的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文件,也可以是其他脚本输出的结果,这里做了个简单的测试:
[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 介绍的详细内容,更多请关注慧达安全导航其它相关文章!
免责 声明
1、本网站名称:慧达安全导航
2、本站永久网址:https//www.huida178.com/
3、本站所有资源来源于网友投稿和高价购买,所有资源仅对编程人员及源代码爱好者开放下载做参考和研究及学习,本站不提供任何技术服务!
4、本站所有资源的属示图片和信息不代表本站的立场!本站只是储蓄平台及搬运
5、下载者禁止在服务器和虚拟机下进行搭建运营,本站所有资源不支持联网运行!只允许调试,参考和研究!!!!
6、未经原版权作者许可禁止用于任何商业环境,任何人不得擅作它用,下载者不得用于违反国家法律,否则发生的一切法律后果自行承担!
7、为尊重作者版权,请在下载24小时内删除!请购买原版授权作品,支持你喜欢的作者,谢谢!
8.若资源侵犯了您的合法权益,请持 您的版权证书和相关原作品信息来信通知我们!QQ:1247526623我们会及时删除,给您带来的不便,我们深表歉意!
9、如下载链接失效、广告或者压缩包问题请联系站长处理
10、如果你也有好源码或者教程,可以发布到网站,分享有金币奖励和额外收入!
11、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需
12、因源码具有可复制性,一经赞助,不得以任何形式退款。
13、本文内容由网友自发贡献和站长收集,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系1247526623@qq.com
转载请注明出处: 慧达安全导航 » Ansible Dynamic Inventory 介绍
发表评论 取消回复