从资产系统获取主机信息并保存到Excel

178 阅读1分钟

需求: 从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' '在线'