mersap 发布时间: 2019-02-11 10:37:49 浏览 40 评论 0
云栖社区
python
ECS
摘要: 使用 python 获取帐号下 ecs 信息
ecs API 概览传送门 Openapi
- # -*- 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
- 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.10.10.10","10.10.10.11"')
- """
- 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
- """
- 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()
来源: https://yq.aliyun.com/articles/689889