8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

利用Ansible api建立运维信息库

来源:本站原创 浏览:86次 时间:2022-09-03

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


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

#!/usr/local/evn python


#autor:mindg.cn

#date:2016.3.3


import ansible.runner

from threading import Thread


def get_info(ip):

    data = []

    runner = ansible.runner.Runner(module_name='setup', module_args='', pattern='all', forks=2)

    datastructure = runner.run()

    sn = datastructure['contacted'][ip]['ansible_facts']['ansible_product_serial']

    sysinfo = datastructure['contacted'][ip]['ansible_facts']['ansible_system']

    cpu = datastructure['contacted'][ip]['ansible_facts']['ansible_processor'][1]

    cpu = ''.join(cpu.split())

    mem = datastructure['contacted'][ip]['ansible_facts']['ansible_memtotal_mb']

    ipadd_pub = datastructure['contacted'][ip]['ansible_facts']['ansible_all_ipv4_addresses'][1]

    ipadd_in = datastructure['contacted'][ip]['ansible_facts']['ansible_all_ipv4_addresses'][0]

    disk = datastructure['contacted'][ip]['ansible_facts']['ansible_devices']['sda']['size']

    data.append((sn,sysinfo,cpu,mem,disk,ipadd_pub,ipadd_in))

    return data


def save_db(data):

    import sqlite3

    conn = sqlite3.connect('info.db')

    cu = conn.cursor()

    sql = '''

         insert into INFO values (?,?,?,?,?,?,?)

         '''

    cu.execute(sql, data[0])

    conn.commit()


def thead_save(i):

    data = get_info(i)

    save_db(data)

if __name__ == '__main__':

    threads = []

    fi = open('hosts', 'r')

    fline = fi.readlines()

    fi.close()

    for i in fline:

        i = i.strip()

        threads.append(Thread(target=thead_save, args=(i,)))

    for thread in threads:

        thread.start()

    for thread in threads:

        thread.join()



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

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

CREATE TABLE INFO (

        SN VARCHAR(9) NOT NULL PRIMARY KEY,

        SYSINFO VARCHAR(50) NOT NULL,

        CPU_TYPE VARCHAR(15) NOT NULL,

        MEM VARCHAR(15),

        DISK VARCHAR(30) NOT NULL,

        IPADD_PUB VARCHAR(15) NOT NULL,

        IPADD_IN VARCHAR(15) NOT NULL

);


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




  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net