需求: 从CMDB数据库中,获取主机的状态及信息;并保存到Excel中
#!/usr/bin/env python
# encoding: utf-8
#
#curl -X GET http://:834/assets -d 'type=server&target=P@product:魔2 and P@status:在线' -H 'X-Auth-Token:'
import re
import sys
import eventlet
import requests
# import xlwt, xlutils
from openpyxl import Workbook, load_workbook
def get_assets(**kwargs):
url = kwargs.get('url', 'http://:8334/assets')
auth_token = kwargs.get('token', '')
server_name = kwargs.get('server', '魔记2')
server_status = kwargs.get('status', '在线')
sheet = kwargs.get('sheet', '')
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "text/json",
"X-Auth-Token": auth_token
}
target = 'P@product:{} and P@status:{}'.format(server_name, server_status)
data = {'type': 'server',
'target': target}
assets_list = requests.get(url, data=data,
headers=headers, verify=False)
assets_list_data = assets_list.json()
assets_data = {}
xlwt_list = []
for i in assets_list_data['servers']:
if i['created_at'].split(' ')[0] != i['updated_at'].split(' ')[0]:
mounth = i['updated_at'].split(' ')[0]
else:
mounth = \
i['created_at'].split(' ')[0]
ip = i['id']
_type = i['type']
#physical_host = assets_list_data['servers']['property']['physical_host']
print i['property']
mem_total = i['property']['mem_total']
portal_id =i['property']['portal_id']
# ipv4 = i['property']['ipv4']
launch_date = i['property']['launch_date']
product = i['property']['product']
division = i['property']['division']
server_type = i['property']['server_type']
#cpu_model = i['property']['cpu_model']
department = i['property']['division']
disk_total = i['property']['disk_total']
status = i['property']['status']
if [mounth, ip, _type, mem_total, status, product, server_type, department, disk_total] not in xlwt_list:
xlwt_list.append([mounth, ip, _type, mem_total, status, product, server_type, department, disk_total])
# assets_data['']=xlwt_list
r = 1
for _row in xlwt_list:
# sheet.append(_row)
this_row = xlwt_list.index(_row) +r +1
if this_row > 3:
this_row = xlwt_list.index(_row)+1
for j in range(0, len(_row)):
# ColNum = OffSet + r
# print(ColNum, j,(j+1), _row[j])
this_c = j + 1
sheet.cell(row=this_row, column=this_c).value = _row[j]
print(this_c, this_row, _row[j])
# sheet[this_c + this_row] = _row[j]
r = r + 1
def main(**params_data):
wb = Workbook()
sheet = wb.active
sheet.append(
['时间', 'id', '类型', '内存', '状态', '产品', '服务器类型', '部门', '硬盘'])
params_data['sheet'] = sheet
get_assets(**params_data)
wb.save(params_data['server_name']+ params_data['server_status']+'_assets.xlsx')
return
if __name__ == '__main__':
pool = eventlet.GreenPool()
urls = sys.argv[1] if sys.argv[1].endswith(',') else sys.argv[1] + ','
for i in range(len(urls.split(','))):
params_data = {'url': urls.split(',')[i],
'auth_token': sys.argv[2],
'server_name': sys.argv[3],
'server_status': sys.argv[4]}
if urls.split(',')[i]:
pool.spawn(main, **params_data)
pool.waitall()
# main(params_data)
print("--finish --GreenPool")
运行:
python get_assets.py 'http://:834/assets,' '' '魔xx' '在线'