sanhutrees 发表于 2018-7-28 13:33:54

Python 结合Ansible 把管理资产信息自动插入到CMDB中

资产管理对于任何公司来说都是件非常重要的事情,大家不用cmdb都有点不好意思出来见人了,上了CMDB之后基础就是资产这块,为了不苦逼似的一个个往里边录入,于是用python 结合Ansible 写了个自动收集资产信息,然后拿出自己需要关注的字段,自动insert 到cmdb 数据库里边去。  

  我们的cmdb 是开源改的,前端自定义好之后,后端的数据库需要自己创建个表,创建表语句如下:
  CREATE TABLE ansible_host (
  id int(11) NOT NULL AUTO_INCREMENT,
  hostname varchar(200) COLLATE utf8_bin DEFAULT NULL,
  manufacturer varchar(200) COLLATE utf8_bin DEFAULT NULL,
  os varchar(200) COLLATE utf8_bin DEFAULT NULL,
  cpu_model varchar(200) COLLATE utf8_bin DEFAULT NULL,
  cpu_count varchar(10) COLLATE utf8_bin DEFAULT NULL,
  cpu_core varchar(255) COLLATE utf8_bin DEFAULT NULL,
  memory_totally varchar(255) COLLATE utf8_bin DEFAULT NULL,
  swap_totally varchar(255) COLLATE utf8_bin DEFAULT NULL,
  disk varchar(200) COLLATE utf8_bin DEFAULT NULL,
  ip varchar(255) COLLATE utf8_bin DEFAULT NULL,
  mac_address varchar(255) COLLATE utf8_bin DEFAULT NULL,
  sn varchar(20) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (id)
  ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  python 代码:
  #gobal_fun 辅助模块,时间和数据定义在这里边,正式程序直接import
  #!/usr/bin/env python
  import datetime
  import time
  import sys
  import MySQLdb as mysql
  d1=datetime.datetime.now()
  #input=open(sys.argv,'r')
  d2=(d1-datetime.timedelta(days=1)).strftime('%Y-%m-%d')
  d3=(d1-datetime.timedelta(days=1)).strftime('%d/%b/%Y')
  day = time.strftime("%Y")
  #outpu=open(d2+'__hourpv.csv','a+')
  #outip=open('ip'+d2+'.csv','a+')
  dk=time.strftime("%d/%b/%Y",time.localtime())+':00'
  da=time.strftime("%d/%b/%Y",time.localtime())
  conn= mysql.connect(user="root", passwd="vivame",db="falcon", charset="utf8")
  cur = conn.cursor()
  主程序
  #!/usr/bin/env python

coding=utf-8

author :wosun
  gro=raw_input("pls input ansible group:")
  import ansible.runner as arun
  import gobal_fun
  def get_info():
  ass_list=[]
  runner = arun.Runner(
  module_name='setup',
  module_args='',
  pattern='%s'%gro,
  forks=10
  )
  results=runner.run()
  INFO=results['contacted']
  for host,val in INFO.items():
  for i in val['ansible_facts']["ansibledevices"]:
  if inot in ("sr"):
  dis=str(i+''+val['ansible_facts']['ansible_devices']['size'])
  ass=host,str(val['ansible_facts']["ansible_product_name"]),str(val['ansible_facts']["ansibledistribution"])+""+st)
  ass_list.append(ass)
  #for i in ass_list:

print i
  Msql="INSERT INTO ansible_host (hostname,manufacturer,os,cpu_model,cpu_count,cpu_core,memory_totally,`swa"
  try:
  gobal_fun.cur.executemany(Msql,ass_list)
  gobal_fun.conn.commit()
  gobal_fun.cur.close()
  gobal_fun.conn.close()
  print "success insert "
  except Exceptioin,e:
  conn.rollback()
  print e
  if name == "main":
  get_info()
页: [1]
查看完整版本: Python 结合Ansible 把管理资产信息自动插入到CMDB中