阿里云获取所有实例信息 API 应用

应用前需装置依赖的sdk模块,能够在阿里云后盾查问相干API应用形式:

示例代码:

#! /usr/bin/env python# -\*- coding: utf-8 -\*-# \_\_author\_\_ = "shuke"# Date: 2017/9/26import json, yamltry:    from aliyunsdkcore.client import AcsClient    from aliyunsdkcore import client    from aliyunsdkecs.request.v20140526 import DescribeInstancesRequestexcept ImportError as e:    print("Error: ", e)    exit()class AliCloudApi(object):    """    阿里云API获取数据    """    # 实例编号    hid = 1    # 所有region的主机    all\_instances\_dic = {}    def \_\_init\_\_(self, key, secret, zone="cn-beijing"):        self.key = key        self.secret = secret        self.zone = zone        self.client = AcsClient(self.key, self.secret, self.zone)    def instances\_count(self, page\_size=10):        """        返回页码数量        :param page\_size:        :return:        """        # 创立 request,并设置参数        request = DescribeInstancesRequest.DescribeInstancesRequest()        request.set\_PageSize(page\_size)        # 发动 API 申请并打印返回        response = self.client.do\_action\_with\_exception(request)        ret = json.loads(response, encoding='utf-8')        # 页码        total\_page, b = divmod(ret\['TotalCount'\], page\_size)        if b:            total\_page = total\_page + 1        return total\_page    def queryinstances(self):        """        获取各region的实例信息        :return: region下所有的实例信息        """        per\_region\_instances = \[\]        try:            total\_page = self.instances\_count()            for page\_num in range(1, total\_page + 1):                num = " 第%d页 " % page\_num                print(num.center(100, "\*"))                # 创立 request,并设置参数                request = DescribeInstancesRequest.DescribeInstancesRequest()                request.set\_PageNumber(page\_num)                # 发动 API 申请并打印返回                response = self.client.do\_action\_with\_exception(request)                ret = json.loads(response, encoding='utf-8')                # print(json.dumps(ret), indent=4, ensure\_ascii=False))                instances = ret\['Instances'\]\['Instance'\]                for item in instances:                    ele = {}                    ele\['ZoneId'\] = item\['ZoneId'\]                    ele\['InstanceId'\] = item\['InstanceId'\]                    ele\['InstanceType'\] = item\['InstanceType'\]                    ele\['HostName'\] = item\['HostName'\]                    ele\['InstanceName'\] = item\['InstanceName'\]                    # 公网IP                    if item\['PublicIpAddress'\]\['IpAddress'\]:                        ele\['PublicIpAddress'\] = item\['PublicIpAddress'\]\['IpAddress'\]\[0\]                    else:                        ele\['PublicIpAddress'\] = ""                    # 私网IP                    if item\['InnerIpAddress'\]\['IpAddress'\]:                        ele\['InnerIpAddress'\] = item\['InnerIpAddress'\]\['IpAddress'\]\[0\]                    else:                        ele\['InnerIpAddress'\] = item\['VpcAttributes'\]\['PrivateIpAddress'\]\['IpAddress'\]\[0\]                    print(AliCloudApi.hid, ele\['ZoneId'\], ele\['InstanceId'\], ele\['InstanceType'\], ele\['HostName'\],                          ele\['InstanceName'\], ele\['PublicIpAddress'\], ele\['InnerIpAddress'\])                    AliCloudApi.hid += 1                    # 每个实例放入列表中                    # print(ele)                    per\_region\_instances.append(ele)                page\_num += 1        except Exception as e:            print("ERROR: ", e)        return per\_region\_instances    def get\_all\_instances(self, region\_li):        """        取得所有region实例        :param region\_li: region列表        :return:        """        for zone in region\_li:            self.zone = zone            print("\\033\[0;32mNow,start query %s region\\033\[0m" % zone)            obj = AliCloudApi(self.key, self.secret, zone)            per\_region\_instances = obj.queryinstances()            AliCloudApi.all\_instances\_dic\[zone\] = per\_region\_instances        return AliCloudApi.all\_instances\_dicif \_\_name\_\_ == '\_\_main\_\_':    # 加载阿里云拜访key    key\_pair = yaml.load(open('aliyun.yml'))    key = key\_pair\['key'\]    secret = key\_pair\['secret'\]    zones = \["cn-qingdao", "cn-hangzhou", "cn-beijing"\]    # for zone in zones:    #     print("\\033\[1;32mNow,start query %s region\\033\[0m" % zone)    #     obj = AliCloudApi(key, secret, zone)    #     per\_region\_instances = obj.queryinstances()    #     all\_instances\_li\[zone\] = per\_region\_instances    obj = AliCloudApi(key, secret)    ret = obj.get\_all\_instances(zones)