hhnf333 发表于 2018-1-2 10:48:16

如何利用ansible callback插件对执行结果进行解析

#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()
  ip_unreachable.append(ip)
  flag=0
  elif re.search('FAILED',line):
  ip = line.split()
  ip_failed.append(ip)
  flag=0
  elif re.search('SUCCESS',line):
  ip = line.split()
  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)
  column_name= 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]
查看完整版本: 如何利用ansible callback插件对执行结果进行解析