ansible获取主机信息并存入mysql数据库
2016-07-18 16:46
579 查看
#!/usr/bin/python
# -*- coding:UTF-8 -*-
import os
import sys
import commands
import MySQLdb
import json
#获取全部的fact并以主机名为文件名存到某个路径下
(status, output) = commands.getstatusoutput('ansible all -m setup --tree /root/hosts')
#print status,'++++++++++++++'
#为/root/hosts下文件加入.json后缀
def rename_file(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path,file)) == True:
if file.find('.json') < 0:
newname = file + '.json'
os.rename(os.path.join(path,file),os.path.join(path,newname))
print file,'ok'
else:
continue
else:
continue
print rename_file('/root/hosts')
#获取主机facts并存入数据库
if ~status:
#获取文件列表
(status,output) = commands.getstatusoutput('ls /root/hosts > /root/host_list')
# print status,'-------------'
if ~status:
# 打开数据库连接
db = MySQLdb.connect("localhost","ansible","R00t@123","ansible" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 创建hosts数据表
flag = cursor.execute(" show tables like 'hosts' ")
# print flag,'!!!!!!!!!!!!!!!!!'
if flag == 0:
create_hosts_table = ''' CREATE TABLE hosts (
IP CHAR(20) PRIMARY KEY NOT NULL,
hostname CHAR(50),
gateway CHAR(20),
mac CHAR(30),
distribution CHAR(20),
distribution_version CHAR(20),
architecture CHAR(20),
kernel CHAR(30),
processor CHAR(100),
processor_cores CHAR(20),
processor_count CHAR(20))'''
cursor.execute(create_hosts_table)
file = open("/root/host_list","r")
if file:
for line in file:
fact = line.strip('\n')
print fact
#获取每个主机的facts
file_fact = open("/root/hosts/"+fact,"r")
if file_fact:
data = json.loads(file_fact.read())
hostname = data['ansible_facts']['ansible_hostname']
IP = data['ansible_facts']['ansible_default_ipv4']['address']
gateway = data['ansible_facts']['ansible_default_ipv4']['gateway']
mac = data['ansible_facts']['ansible_default_ipv4']['macaddress']
distribution = data['ansible_facts']['ansible_distribution']
distribution_version = data['ansible_facts']['ansible_distribution_version']
architecture = data['ansible_facts']['ansible_architecture']
kernel = data['ansible_facts']['ansible_kernel']
processor = data['ansible_facts']['ansible_processor'][1]
processor_cores = data['ansible_facts']['ansible_processor_cores']
processor_count = data['ansible_facts']['ansible_processor_count']
print hostname,architecture,distribution,distribution_version,kernel,IP,gateway,mac,processor
#检查主机数据是否存在,
check_host = "select * from hosts where IP = '%s' " % (IP)
flag = cursor.execute(check_host)
#
print (flag,type(flag))
#如果主机已经存在,更新主机信息
if flag != 0L:
sql = "update hosts set IP = '%s',hostname = '%s',gateway = '%s',mac = '%s',distribution = '%s',distribution_version = '%s',architecture = '%s',kernel = '%s',processor = '%s',processor_cores =
'%s',processor_count = '%s' where IP = '%s' " % (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count,IP)
#如果主机不存在,插入主机信息
else:
sql = "insert into hosts (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count) values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')
" % (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count)
try:
# 执行sql语句
#
print (sql,'******************')
cursor.execute(sql)
# 提交到数据库执行
db.commit()
print (" '%s' update successfully !") % (hostname)
except:
# 发生错误时回滚
db.rollback()
print 'Something is wrong !!! '
file_fact.close #关闭文件"/root/hosts/"+fact
db.close()
# -*- coding:UTF-8 -*-
import os
import sys
import commands
import MySQLdb
import json
#获取全部的fact并以主机名为文件名存到某个路径下
(status, output) = commands.getstatusoutput('ansible all -m setup --tree /root/hosts')
#print status,'++++++++++++++'
#为/root/hosts下文件加入.json后缀
def rename_file(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path,file)) == True:
if file.find('.json') < 0:
newname = file + '.json'
os.rename(os.path.join(path,file),os.path.join(path,newname))
print file,'ok'
else:
continue
else:
continue
print rename_file('/root/hosts')
#获取主机facts并存入数据库
if ~status:
#获取文件列表
(status,output) = commands.getstatusoutput('ls /root/hosts > /root/host_list')
# print status,'-------------'
if ~status:
# 打开数据库连接
db = MySQLdb.connect("localhost","ansible","R00t@123","ansible" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 创建hosts数据表
flag = cursor.execute(" show tables like 'hosts' ")
# print flag,'!!!!!!!!!!!!!!!!!'
if flag == 0:
create_hosts_table = ''' CREATE TABLE hosts (
IP CHAR(20) PRIMARY KEY NOT NULL,
hostname CHAR(50),
gateway CHAR(20),
mac CHAR(30),
distribution CHAR(20),
distribution_version CHAR(20),
architecture CHAR(20),
kernel CHAR(30),
processor CHAR(100),
processor_cores CHAR(20),
processor_count CHAR(20))'''
cursor.execute(create_hosts_table)
file = open("/root/host_list","r")
if file:
for line in file:
fact = line.strip('\n')
print fact
#获取每个主机的facts
file_fact = open("/root/hosts/"+fact,"r")
if file_fact:
data = json.loads(file_fact.read())
hostname = data['ansible_facts']['ansible_hostname']
IP = data['ansible_facts']['ansible_default_ipv4']['address']
gateway = data['ansible_facts']['ansible_default_ipv4']['gateway']
mac = data['ansible_facts']['ansible_default_ipv4']['macaddress']
distribution = data['ansible_facts']['ansible_distribution']
distribution_version = data['ansible_facts']['ansible_distribution_version']
architecture = data['ansible_facts']['ansible_architecture']
kernel = data['ansible_facts']['ansible_kernel']
processor = data['ansible_facts']['ansible_processor'][1]
processor_cores = data['ansible_facts']['ansible_processor_cores']
processor_count = data['ansible_facts']['ansible_processor_count']
print hostname,architecture,distribution,distribution_version,kernel,IP,gateway,mac,processor
#检查主机数据是否存在,
check_host = "select * from hosts where IP = '%s' " % (IP)
flag = cursor.execute(check_host)
#
print (flag,type(flag))
#如果主机已经存在,更新主机信息
if flag != 0L:
sql = "update hosts set IP = '%s',hostname = '%s',gateway = '%s',mac = '%s',distribution = '%s',distribution_version = '%s',architecture = '%s',kernel = '%s',processor = '%s',processor_cores =
'%s',processor_count = '%s' where IP = '%s' " % (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count,IP)
#如果主机不存在,插入主机信息
else:
sql = "insert into hosts (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count) values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')
" % (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count)
try:
# 执行sql语句
#
print (sql,'******************')
cursor.execute(sql)
# 提交到数据库执行
db.commit()
print (" '%s' update successfully !") % (hostname)
except:
# 发生错误时回滚
db.rollback()
print 'Something is wrong !!! '
file_fact.close #关闭文件"/root/hosts/"+fact
db.close()
相关文章推荐
- 浅谈MySQL中优化sql语句查询常用的30种方法
- MySQL两种存储引擎MyISAM于InnoDB对比
- 解决 MySQL Cluster 通过 某一个MySqld节点新建表时,其他 MySqld节点 看不到表内容的问题
- ubuntu下mysql中my.cnf配置文件参数解释
- MySQL基础
- ubuntu14.04 彻底重装mysql
- Mysql 安装-操作-备份
- 查询产生临时表的调优
- mysql的查询、子查询及连接查询
- Ubuntu 12 安装 MySQL 5.6.26 及 问题汇总
- 表的查询(一)
- mysql 快速复制数据库
- mysql用户密码修改,用户添加、删除及设置权限
- 从mysql数据库中导出sql文件
- MySQL 5.6 Warning: Using a password on the command line interface can be insecure
- 通过SQL语句查看MySQL数据库的表空间状态
- mysql解压版配置
- SQL语句里怎么获得当前年份(MySQL数据库)
- mysql数据库基础
- mysql中root用户的密码问题