阿里云获取所有实例信息 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)