使用p3 統計阿里雲帳號下ECS信息
aliyun python sdk : https://github.com/aliyun/aliyun-openapi-python-sdk
ecs api 概覽: https://help.aliyun.com/document_detail/25485.html?spm=a2c4g.11186623.2.10.31a41f3coiyi2F#AvailableActions
OpenApi : https://api.aliyun.com/?spm=a2c4g.11186623.2.15.31a41f3coiyi2F#/?product=Ecs
# -*- coding: utf-8 -*-
'''
Copyright (c) 2018, mersap
All rights reserved.
摘 要: base aliyun ecs api.py
創 建 者: mersap
創建日期: 2019-01-30
'''
import json
from aliyunsdkcore import client
from aliyunsdkcore.request import CommonRequest
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
from key import KEYS
KEYS = client.AcsClient(
"aaaaaaaa",
"bbbbbbbbbbbbb",
"cn-beijing")
class AliyunEcsHandler(object):
"""docstring for Ali"""
def DescribeInstances(self, client, page_num=1, innerip='', instanceids=''):
"""
:DescribeInstances(client=KEYS,innerip='"10.171.28.214","10.171.6.221"')
"""
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageNumber(page_num)
request.set_PageSize(100)
if not len(innerip) == 0:
request.set_InnerIpAddresses('[{}]'.format(innerip))
if not len(instanceids) == 0:
request.set_InstanceIds('[{}]'.format(instanceids))
response = client.do_action_with_exception(request)
return json.loads(response)
def Instances_Details(self, client):
"""獲取帳號下所有主機信息: 所有
:params client:阿里雲accesskey
"""
cpus = 0
memorys = 0
ecs_details = self.DescribeInstances(client)
totalcount = ecs_details['TotalCount']
for num in range(2, int(totalcount/100)+2):
ecs_detail = self.DescribeInstances(client=client, page_num=num)
for ecs in ecs_detail["Instances"]["Instance"]:
ecs_details["Instances"]["Instance"].append(ecs)
return ecs_details
def test_ecs():
"""ecs信息彙總
"""
ecs = AliyunEcsHandler()
ecs_details = ecs.Instances_Details(KEYS)
cpus , memorys = 0, 0
for ecs in ecs_details['Instances']['Instance']:
cpus += ecs['Cpu']
memorys += ecs['Memory']
print('ECS總數: {} 臺,共{} Cpus、 {} GB '.format(
ecs_details['TotalCount'],
cpus ,
memorys/1024)
)
if __name__ == '__main__':
test_ecs()