ansible通过cmdb资产接口动态创建hosts列表
时间:2022-03-10 17:20
前言:
在自动化、批量化操作主机的时候,有时候咱们需要定义主机组。 比如,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,然后执行。
(这里打个广告,这两天通过朋友了解了猎豹那边的技术氛围,还不错,人虽然不多,因为是面向国外业务的团队,能力真心牛叉,那边运维研发的水平最少不比我差,欢迎牛人去猎豹面试,祝好运 !!! )
好了,正题!
原文:http://rfyiamcool.blog.51cto.com/1030776/1416808
我觉得官网有些太实在了,一些例子说的简单点就行,好让我们自己去扩展思维。 官网一上来就是cobbler和ec2的实例,谁看都有点麻。。。 我是真麻。
来一个比较完整的例子:
#!/usr/bin/env python import sqlite3 import sys try: import json except ImportError: import simplejson as json dbname = ‘/etc/inv.db‘ def grouplist(conn): inventory ={} inventory[‘local‘] = [ ‘127.0.0.1‘ ] cur = conn.cursor() cur.execute("SELECT type, name FROM hosts ORDER BY 1, 2") for row in cur.fetchall(): group = row[‘type‘] if group is None: group = ‘ungrouped‘ if not group in inventory: inventory[group] = { ‘hosts‘ : [] } inventory[group][‘hosts‘].append(row[‘name‘]) cur.close() print json.dumps(inventory, indent=4) def hostinfo(conn, name): vars = {} cur = conn.cursor() cur.execute("SELECT COUNT(*) FROM hosts WHERE name=?", (name, )) row = cur.fetchone() if row[0] == 0: print json.dumps({}) sys.exit(0) # Inject some variables for all hosts vars = { ‘admin‘ : ‘Jane Jolie‘, ‘datacenter‘ : 1 } #从ldap重组数据 if ‘ldap‘ in name.lower(): vars[‘baseDN‘] = ‘dc=mens,dc=de‘ print json.dumps(vars, indent=4) if __name__ == ‘__main__‘: con = sqlite3.connect(dbname) con.row_factory=sqlite3.Row if len(sys.argv) == 2 and (sys.argv[1] == ‘--list‘): grouplist(con) elif len(sys.argv) == 3 and (sys.argv[1] == ‘--host‘): hostinfo(con, sys.argv[2]) else: print "Usage: %s --list or --host <hostname>" % sys.argv[0] sys.exit(1) con.close()
单纯的看只是格式不一样罢了。好了,就这么着了 ,ansible的中文的文档有些少,真的希望我的这些个小文,能为大家在工作中提高效率及一些实现的思路。
本文出自 “” 博客,谢绝转载!
ansible通过cmdb资产接口动态创建hosts列表,布布扣,bubuko.com