利用Ansible api建立运维资产库

在日常运维管理中,随着公司业务壮大,运维可能需要管理的机器越来越多,一旦机器数量到了一定规模,机器的属性信息如果没有集中管理好,就会很容易造成人为事故的发生, 所以能否建立一个完善的运维信息资产库对运维人员来说至关重要,那如何建立一个运维资产库?如何能让资产库信息实时同步线上机器信息?带着疑问,我们接下来看如何利用ansible api来做一个简单的运维资产库,这个脚本主要是利用了ansible api来进行对客户机信息的收集,然后将收集的信息insert 到db库中,我这里例子是采用的sqlite数据库,其它不多说了,看代码:

脚本逐行解释,前几行是导入需要的模块,get_info()函数是获取ansible返回的信息,其中ansible.runner.Runner()是ansible的标准api,,传入的三个参数分别是模块名称,模块参数,匹配的主机,并发数;save_db()函数作用是将采集的数据放到数据库中,thread_save()函数是调用前2个函数,主要是给thread用的,因为用Thread来创建线程,一般有三种方法:第一是创建Thread实例时,传给它一次函数(我们脚本采用的这种方法),第二是创建Thread实例时,传给它一个可调用的类对象,最后是用Thread派生出一个子类,然后创建这个子类的实例,说远了,我们回来接着说脚本,脚本主题部分就是创建线程列表,然后运行,join()函数是等待所有线程结束,脚本基本就这些了。

最后提供下创建数据库表的sql语句:

以上就是全部内容了,另外此脚本只收集了关键信息,如果想采集更多的信息,可以根据这个脚本进行自行扩展,希望能对大家有所帮助。

写在最后:

虽然这个脚本主要是来收集资产信息,但我个人是更重要的是学会用这种方式去处理问题,因为ansible本身有非常丰富的模块,我们可以通过调用其它模块来实现更为复杂的运维操作。