前言:

        在自动化、批量化操作主机的时候,有时候咱们需要定义主机组。 比如,saltstack的group组,及salt -N参数 ,在ansible下的自己搞定ansible的主机组。有些麻烦,要知道,你既然选择了用saltstack、ansible这类的集群操作工具,如果你再选择把几十个多到几百个手动地,一个个地把主机组及相关联的主机写入配置,是不是显得很1+1。 


    这里简单说下我的一些个方法,首先可以避免这些个配置的写入,在产生minion的id的时候,就给他一个完美又规范的主机域名。 比如,bj-zw-nginx,很容易定位到北京,兆维,nginx机组。 其实主要你的主机域名相当的规范了,啥都好办了。 如果一些难搞的主机,非要自定义group,可以通过cmdb资产接口,来取值,然后复写到配置文件里面,这个方法很有效,在没有了解到ansible有动态inventory的功能前,我一直在用这个方法,间隔性的会从cmdb接口拿到最新的主机及配置信息,复写到类hosts文件里面。

其实我上面说的功能,已经算是可以实现动态的hosts功能,看了沈灿和金山小伙的晓聪的讨论,才知道有个叫 Dynamic Inventory 的东西,这个功能其实是我上面讲解第二个方法的集成版,他省略了这一步,直接调用一个有inventory功能的脚本,然后取出相关的主机list,然后执行。


(这里打个广告,这两天通过朋友了解了猎豹那边的技术氛围,还不错,人虽然不多,因为是面向国外业务的团队,能力真心牛叉,那边运维研发的水平最少不比我差,欢迎牛人去猎豹面试,祝好运 !!! )

好了,正题!


我觉得官网有些太实在了,一些例子说的简单点就行,好让我们自己去扩展思维。 官网一上来就是cobbler和ec2的实例,谁看都有点麻。。。 我是真麻。

原文:http://rfyiamcool.blog.51cto.com/1030776/1416808

模拟从cmdb资产接口获取数据,然后返回json的脚本  getcmdb.py的内容



脚本后面都是官网的cobbler的,大家可以直接摘出来。只需要上面的good函数就可以了。

不仅可以返回hosts的主机列表,还可以获取vars的变量,然后引用。 我这边用了最简单的例子,直接echo {{ vars }}。  一般来说,可以用 -m template模块,来推送配置。  其实我个人觉得 inventory动态信息和自定义模块的facts在某种程度有些功能重复了。   就我个人的看法,比如 我在操作一个nginx的vhosts和upstream信息组,这个时候用inventory动态和模块都可以从cmdb资产系统里面取出相关的信息来,只是inventory更能精确的返回,需要在那些target主机执行,这些指令!


引用vars变量:

话说,我这里的例子相当的简单,具体的从接口取数据,大家用urllib2 搞就是了。



大家注意下ansible inventory的返回格式,web相当于/etc/ansible/hosts里面的[web]标题,hosts相当于[web]下面的主机list,vars相当于变量。 当然这些变量是供应给hosts主机,通过jinja2引用的。  一般来说,返回不能正确的执行,原因在于格式不对,如果格式对了,没道理不行!(this is 废话)

原来的hosts的例子:

这是ansible能通过inventory返回的json信息。



单纯的看只是格式不一样罢了。好了,就这么着了 ,ansible的中文的文档有些少,真的希望我的这些个小文,能为大家在工作中提高效率及一些实现的思路。



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

4则回应给“ansible调用cmdb资产api动态获取inventory”

  1. study说道:

    调用good()函数是什么样的,good()和官方的CobblerInventory()什么关系?他们之间靠什么联系的

  2. wing2ofsky说道:

    写的真不错,学习

发表评论