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

[经验分享] 如何利用ansible callback插件对执行结果进行解析

[复制链接]

尚未签到

发表于 2018-1-2 10:48:16 | 显示全部楼层 |阅读模式
#coding: utf8  
import re,json,sqlite3
  
def get_ip_success():
  with open(r'C:\Users\Administrator\Desktop\2.txt') as f:
  ip_unreachable = []
  ip_failed = []
  ip_success=[]
  line_num=0
  for line in f.readlines():
  if re.search('UNREACHABLE', line):
  ip=line.split()[0]
  ip_unreachable.append(ip)
  flag=0
  elif re.search('FAILED',line):
  ip = line.split()[0]
  ip_failed.append(ip)
  flag=0
  elif re.search('SUCCESS',line):
  ip = line.split()[0]
  flag=1
  line_num=1
  elif flag == 1 and line_num == 7:
  line= line.strip(" ").replace("'",'"').strip('\n').strip('"')
  stdout_lines= '{"'+ip+'":'+line+'}'
  stdout_lines_with_ip = json.loads(stdout_lines)
  ip_success.append(stdout_lines_with_ip)
  line_num =line_num + 1
  return ip_success
  

  
def os_status_generator(ip_success):
  for os_status in ip_success:
  for key,value in os_status.iteritems():
  yield (key,value['uptime'],float(value['cpu_usr']),float(value['cpu_sys']),float(value['cpu_iowait']),
  float(value['cpu_idle']), float(value['load_average_1']), float(value['load_average_5']), float(value['load_average_15']),
  int(value['mem_total']), float(value['mem_util']),int(value['swap_total']),int(value['swap_used']),int(value['swap_in']),
  int(value['swap_out']), int(value['numa'])
  )
  

  
class OsStatus():
  def __init__(self,ip_success):
  try:
  self.conn = sqlite3.connect(":memory:")
  self.cursor = self.conn.cursor()
  self.cursor.execute('''CREATE TABLE os_status
  (ip varchar(20) primary key, uptime varchar(20),cpu_usr DECIMAL,cpu_sys DECIMAL,cpu_iowait DECIMAL,cpu_idle DECIMAL,
  load_average_1 DECIMAL,load_average_5 DECIMAL,load_average_15 DECIMAL,mem_total INTEGER,mem_util DECIMAL,
  swap_total INTEGER,swap_used INTEGER,swap_in INTEGER,swap_out INTEGER,numa TINYINT)''')
  self.cursor.executemany("insert into os_status values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",os_status_generator(ip_success) )
  except Exception as e:
  print e;
  

  def query(self,sql):
  self.cursor.execute(sql)
  results=self.cursor.fetchall()
  column_size=len(results[0])
  column_name= [column[0] for column in self.cursor.description]
  for i in range(column_size):
  print column_name.ljust(15),
  print
  for each_result in results:
  for i in range(column_size):
  print str(each_result).ljust(15),
  print
  

  def quit(self):
  try:
  self.cursor.close()
  self.conn.close()
  except Exception as e:
  print e;
  

  
ip_success=get_ip_success()
  
os_status=OsStatus(ip_success)
  
sql = "select * from os_status"
  
os_status.query(sql)

运维网声明 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-430756-1-1.html 上篇帖子: Ansible快速入门 下篇帖子: Ansible Inventory
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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