设为首页 收藏本站
查看: 1169|回复: 0

[经验分享] Python 结合Ansible 把管理资产信息自动插入到CMDB中

[复制链接]

尚未签到

发表于 2018-7-28 13:33:54 | 显示全部楼层 |阅读模式
资产管理对于任何公司来说都是件非常重要的事情,大家不用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[1],'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 i[0:2]  not 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542600-1-1.html 上篇帖子: How to Install Ansible AWX on CentOS 7-Arnold 下篇帖子: celery执行ansible任务时提示 "not attribute _config"
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表