ansible获取主机信息并存入mysql数据库

该脚本演示了如何通过Ansible收集所有主机的详细信息,并将这些信息存储到MySQL数据库中。首先,它运行`ansible all -m setup`命令并将输出保存为JSON文件。然后,脚本遍历这些文件并读取每个主机的详细信息,如IP、主机名、网关、MAC地址、操作系统、内核等,并根据这些信息创建或更新数据库中的hosts表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值