Aliyun-ECS资源清单

  • 阿里云ECS资源清单获取
#!/usr/bin/env python
#coding=utf-8
import json
import os
import xlwt
import math
from datetime import datetime, timedelta
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
# from aliyunsdkcms.request.v20190101.DescribeMonitoringAgentHostsRequest import DescribeMonitoringAgentHostsRequest
# from aliyunsdkcms.request.v20190101.DescribeMetricDataRequest import DescribeMetricDataRequest
# from aliyunsdkcms.request.v20190101.DescribeMetricLastRequest import DescribeMetricLastRequest


def data_write(filepath, datas):
    f = xlwt.Workbook()
    sheet1 = f.add_sheet(u'InstanceEcs', cell_overwrite_ok=True)
    line_01 = ['HostName', 'InstanceId', 'OperatingSystem', 'Region', 'CreateTime', 'OSType', 'Status', 
        'Cpu', 'Memory', 'InstanceChargeType', 'PrimaryIpAddress', 'MacAddress', 'Administrator','Project']
    for x in range(len(line_01)):
        sheet1.write(0, x, line_01[x], setStyle("宋体"))
    i = 1  # i 值为excel从第几行开始写
    for data in datas:
        for j in range(len(data)):
            sheet1.write(i, j, data[j])
        i = i + 1
    f.save(filepath)


def setStyle(name):
    style = xlwt.XFStyle()
    font = xlwt.Font()
    pattern = xlwt.Pattern()
    alignment = xlwt.Alignment()
    font.colour_index = 1  # 字体颜色
    font.name = name  # 字体
    font.bold = True    # 加粗
    alignment.horz = 2   # 对齐方式,居中
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    pattern.pattern_fore_colour = 23  # 背景颜色
    style.alignment = alignment
    style.pattern = pattern
    style.font = font
    return style

def get_start_timestamp(time):
    start_datetime = datetime.now() - timedelta(days=time)
    start_timestamp = int(start_datetime.timestamp()*1000)
    return  start_timestamp


def get_connect_with_ecs():
    Regions = ['cn-shenzhen', 'cn-hongkong', 'ap-south-1', 'eu-central-1']
    for region in Regions:
        client = AcsClient('xxx', 'xxx', region)
        # return client
        GetInstanceForEcs(client) # 调用ecs获取函数


def GetInstanceForEcs(client):
    request = DescribeInstancesRequest.DescribeInstancesRequest()
    request.set_PageSize(100)
    # request.set_PageNumber(2)
    request.set_protocol_type('https')
    request.set_accept_format('json')
    response = client.do_action_with_exception(request)
    data = (str(response, encoding='utf-8'))
    # print(data)
    data_dict = json.loads(data)
    print(data_dict.get('TotalCount')) # 该区域总数
    pagenum = math.ceil(int(data_dict.get('TotalCount')) / 100)  # 获取页码数
    for page in range(1, pagenum + 1):
        request.set_PageNumber(page)
        response = client.do_action_with_exception(request)
        page_data = (str(response, encoding='utf-8'))
        page_data_dict = json.loads(page_data)
        InstancesDataClean(page_data_dict) #  调用instance 数据清洗


def InstancesDataClean(data):
    global ecs_lists
    instances = data.get('Instances').get('Instance')
    for ecs in instances:
        ecs_list = []
        ecs_list.append(ecs.get('HostName')) # 主机名
        ecs_list.append(ecs.get('InstanceId')) # instanceid
        ecs_list.append(ecs.get('OSNameEn')) # "CentOS  7.5 64 bit"
        ecs_list.append(ecs.get('RegionId')) # 区域
        ecs_list.append(ecs.get('CreationTime')) # 创建时间
        ecs_list.append(ecs.get('OSType'))
        ecs_list.append(ecs.get('Status'))
        ecs_list.append(ecs.get('Cpu'))
        ecs_list.append(ecs.get('Memory'))
        ecs_list.append(ecs.get('InstanceChargeType')) # 付费类型
        for net in ecs.get('NetworkInterfaces').get('NetworkInterface'):
            ecs_list.append(net.get('PrimaryIpAddress'))
            ecs_list.append(net.get('MacAddress'))
        if ecs.get('Tags') is not None:
            for tag in ecs.get('Tags').get('Tag'):
                if tag.get('TagKey') == "负责人":
                    ecs_list.append(tag.get('TagValue')) # 负责人
                elif tag.get('TagKey') == "系统":
                    ecs_list.append(tag.get('TagValue')) # 项目名
    #    print(ecs_list)
        ecs_lists.append(ecs_list)
    # return ecs_lists



if __name__ == '__main__':
    try:
        # base_dir = os.path.dirname(os.path.abspath(__file__))
        html_dir = "/var/www/html/prod/Alicloudecs"
        finall_file = os.path.join(html_dir, "%s.xlsx" % (datetime.now().strftime("%Y-%m-%d")))
        ecs_lists = []
        get_connect_with_ecs() 
        data_write(finall_file, ecs_lists)
    except ServerException as e:
        print(e)

    except ClientException as e:
        print(e)

posted @ 2021-03-24 11:42  独孤云翔  阅读(73)  评论(0)    收藏  举报