def get_instance_description(self, instance_list): """ :param instance_list: must be of type list :return: returns the json response """ request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(50) request.set_InstanceIds(json.dumps(instance_list)) response = self.client.do_action_with_exception(request) result = json.loads(response) total_instances = float(result["TotalCount"]) if total_instances > 50: pages = math.ceil(total_instances / 50) page = 2 while (page <= pages): request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageNumber(page) request.set_PageSize(50) response = self.client.do_action_with_exception(request) jsonify = json.loads(response) result["Instances"]["Instance"] = result["Instances"][ "Instance"] + jsonify["Instances"]["Instance"] page = page + 1 return result
def get_host(): # 创建request,并设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(10) # 发起API请求并显示返回值 response = client.do_action_with_exception(request) return response
def DescribeInstancesPerzone(zoneid): clt = client.AcsClient(accesskey['accesskeyid'],accesskey['accesskeysecret']) request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId', zoneid) response = clt.do_action_with_exception(request) return response
def getecsconf(ecs_id): global name,ecsid,inIP,outIP,networktype,CPU,memory,osname clt = client.AcsClient('这里填写ak','这里填写sk','对应地域') # 设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId', '对应地域') request.add_query_param('InstanceIds', ecs_id) # 发起请求 response = clt.do_action(request) #print(response) data = str(response, encoding = "utf-8") ecs = json.loads(data) name = str(ecs['Instances']['Instance'][0]['InstanceName']) ecsid = str(ecs['Instances']['Instance'][0]['InstanceId']) inIP = str(ecs['Instances']['Instance'][0]['VpcAttributes']['PrivateIpAddress']['IpAddress'])[1:-1] outIP = str(ecs['Instances']['Instance'][0]['PublicIpAddress']['IpAddress'])[1:-1] networktype = str(ecs['Instances']['Instance'][0]['InstanceNetworkType']) CPU = int(ecs['Instances']['Instance'][0]['Cpu']) memory = int(ecs['Instances']['Instance'][0]['Memory']) osname = str(ecs['Instances']['Instance'][0]['OSName'])
def aliyun_list(self): """ 获取阿里云主机SN列表 :return: """ page_size = 100 page_number = 1 true = True false = False all_ali = [] while 1: request = DescribeInstancesRequest.DescribeInstancesRequest() connect = self.aliyun_connect(request, page_size, page_number) page_number += 1 req = eval(connect) connect = '' if req['Instances']['Instance'] != []: all_ali += req['Instances']['Instance'] # tmplist = req['Instances']['Instance'] # for info in tmplist: # all_ali.append(info['SerialNumber']) else: break return all_ali
def describe_instances(self): request = DescribeInstancesRequest.DescribeInstancesRequest() key_list = ["InstanceName", "InstanceIds"] self.vm_params.setdefault("InstanceName", self.vm_params["InstanceName"]) request = self._add_params(request, key_list, self.vm_params) return self._send_request(request)
def getAliyunEcsInfo(self): # 获取ecs实例信息,利用迭代器,可直接遍历函数得到ecs实例信息 # for a in get_aliyun_ecs(ali_key, ali_secret, region_ids): # for ecs in a: # print(ecs['InstanceId'], ecs['HostName'], ecs['ZoneId'], ecs['PublicIpAddress']['IpAddress'], ecs['InnerIpAddress']['IpAddress'], ecs['StartTime']) # ecs instance各字段解释:https://help.aliyun.com/document_detail/25656.html?spm=a2c4g.11186623.2.2.a0TLxW#InstanceAttributesType # 设置初始页码 pageNumber = 1 # 创建request,并设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(10) request.set_PageNumber(pageNumber) # request.set_ response = self.client.do_action_with_exception(request) # 发起API请求并显示返回值 response_dict = json.loads(response) # 生成生成器 while response_dict['Instances']['Instance']: yield response_dict['Instances']['Instance'] pageNumber += 1 request.set_PageNumber(pageNumber) response = self.client.do_action_with_exception(request) response_dict = json.loads(response)
def get_aliyun_ecs(region_id): """ 获取某个可用区的完整服务器信息列表 :param region_id: :return: """ ecs_instances = [] page_number = 1 page_size = 10 aliyun_client = get_aliyun_client(region_id=region_id) # 获取完整的Instances列表 while True: aliyun_request = DescribeInstancesRequest.DescribeInstancesRequest() aliyun_request.set_accept_format('json') aliyun_request.set_PageSize(page_size) aliyun_request.add_query_param('PageNumber', page_number) aliyun_request.add_query_param('RegionId', region_id) aliyun_response = aliyun_client.do_action_with_exception( aliyun_request) response_data = json.loads(aliyun_response) ecs_instances.extend(response_data['Instances']['Instance']) total_count = response_data['TotalCount'] page_size = response_data['PageSize'] if total_count < page_number * page_size: break page_number += 1 return ecs_instances
def get_ecs_pubilcIP(self, regions_id): page = 1 errornum = 0 while True: if errornum == 5: break try: clt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, regions_id) request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(100) request.set_PageNumber(page) # 设置页数 json_response = json.loads( clt.do_action_with_exception(request)) if json_response['TotalCount'] > 0 and len( json_response['Instances']['Instance']) > 0: for instance in json_response['Instances']['Instance']: if len(instance['PublicIpAddress']['IpAddress']) > 0: for IpAddress in instance['PublicIpAddress'][ 'IpAddress']: self.ip_list.append(IpAddress) elif len(instance['EipAddress']) > 0: if instance['EipAddress']['IpAddress']: self.ip_list.append( instance['EipAddress']['IpAddress']) else: break page += 1 except: errornum += 1 continue return
def delete_all_test_ecs_instance(client): mylogger.info("list all ecs instances") request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageNumber(1) request.set_PageSize(30) content = client.do_action_with_exception(request) response = json.loads(content) mylogger.info("success! TotalCount = %s", response.get('TotalCount')) instances = response.get('Instances').get('Instance') for instance in instances: instance_name = instance.get('InstanceName') if instance_name.startswith('SdkIntegrationTestInstance'): create_time = int(instance_name[26:len(instance_name)]) current_time = int(time.time()) if create_time - current_time < 3600: mylogger.info( "found undeleted ecs instance(%s) but created in 60 minutes, try to delete next time" % instance_name) else: mylogger.info( "found undeleted ecs instance(%s), status=%s, try to delete it." % instance_name, instance['Status']) if instance['Status'] == "Running": # running -> stopped TestEcsIntegration.stop_instance( client, instance['InstanceId']) if instance['Status'] == "Stopped": # stopped -> deleted TestEcsIntegration.delete_instance( client, instance['InstanceId']) # wait TestEcsIntegration.wait_for_instance( client, instance['InstanceId'], 'Deleted')
def list_ecs(self, name_only=False, **kwargs): """ 获取实例列表信息 https://help.aliyun.com/document_detail/25506.html?spm=a2c4g.11186623.6.941.2b453215sQTZIS :param name_only: :param kwargs: :return: """ result_list = [] request = DescribeInstancesRequest.DescribeInstancesRequest() regions = self.get_regions(id_only=True) for region in regions: request.set_PageSize(100) request.set_PageNumber(1) for k, v in kwargs.items(): request.add_query_param(k, v) request.add_query_param('RegionId', region) result = self.client.do_action(request) result_list.extend(result.get('Instances', {}).get('Instance')) total_count = float(result.get('TotalCount', 0)) if not total_count: continue page_count = float(result.get('PageSize', 1)) _p = total_count / page_count if _p > 1: for _p_num in range(2, int(_p) + 2): request.set_PageNumber(_p_num) result = self.client.do_action(request) result_list.extend(result.get('Instances').get('Instance')) if name_only: result_list = [i['InstanceName'] for i in result_list] return result_list
def get_id_name(): id_name_address = {"cn-beijing": [], "cn-hangzhou": []} request = DescribeInstancesRequest.DescribeInstancesRequest() for region in region_list: request.add_query_param('RegionId', region) request.add_query_param('PageSize', 50) request.add_query_param('PageNumber', 1) response_id_name = get_do_action(request) #获取实例数据的总个数和总页数 totalcount = response_id_name["TotalCount"] page = response_id_name["PageSize"] total = int(totalcount) // int(page) + 2 #获取所有实例的完整信息 if total > 1: for t in range(1, total): request.add_query_param('PageNumber', t) response = get_do_action(request) instance = response["Instances"]["Instance"] for inst in instance: ip_address = inst.get("EipAddress").get("IpAddress") instanceid = inst.get("InstanceId") instancename = inst.get("InstanceName") #如果绑定公网ip if ip_address: id_name_address[region].append({ "instancename": instancename, "instanceid": instanceid, "ipaddress": ip_address }) return id_name_address
def selectecsinfo(self,ecsip): """查询ecs实例Id""" request = DescribeInstancesRequest.DescribeInstancesRequest() values = {'RegionId':"cn-hangzhou","InnerIpAddresses":[str(ecsip)]} info = self.request_aliyun_api(request,values) for i in info["Instances"]["Instance"]: return i["InstanceId"]
def desc_instance_status(instance_ids): """ 检测实例状态 Running Starting Stopping Stopped :param instance_ids: :return: """ request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_InstanceIds(instance_ids) response = client.do_action_with_exception(request) result = json.loads(response) # print(result.keys()) # print(result) status = result["Instances"]["Instance"][0]["Status"] desc = "" if status == "Running": desc = "实例运行中... 实例状态: %s" elif status == "Starting": desc = "实例启动中... 实例状态: %s" elif status == "Stopping": desc = "实例停止中... 实例状态: %s" elif status == "Stopped": desc = "实例已停止... 实例状态: %s" elif status == "Pending": desc = "实例初始化中... 实例状态: %s" print(desc % status) return status
def ecs_info(self) -> GaugeMetricFamily: req = DescribeECS.DescribeInstancesRequest() nested_handler = { 'InnerIpAddress': lambda obj: try_or_else(lambda: obj['IpAddress'][0], ''), 'PublicIpAddress': lambda obj: try_or_else(lambda: obj['IpAddress'][0], ''), 'VpcAttributes': lambda obj: try_or_else(lambda: obj['PrivateIpAddress']['IpAddress'][0], ''), } return self.info_template(req, 'aliyun_meta_ecs_info', nested_handler=nested_handler)
def get_instance(region): client = AcsClient(aliAccessKeyID, aliAccessKeySecret, region) request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(10) # 发起 API 请求并打印返回 response = client.do_action_with_exception(request) res_info = json.loads(response.decode('utf-8')) return res_info['Instances']['Instance']
def get_instances(self): # Create a request and set parameters request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(10) # Initiate an API request and display the response value response = client.do_action_with_exception(request) response = json.loads(response) return response['Instances']['Instance']
def InfoList(self): request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(100) request.set_accept_format('json') response = json.loads( self.acs_client.do_action_with_exception(request).decode('utf-8')) info_list = response.get('Instances').get('Instance') return info_list
def get_total_server(self): """ :return: 服务器总数量 """ request = DescribeInstancesRequest.DescribeInstancesRequest() response = self.client.do_action_with_exception(request) ecs_info = json.loads(response.decode("utf-8")) total_num_count = ecs_info["TotalCount"] return total_num_count
def get_instanceid(self, ip): request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_InstanceNetworkType('classic') request.set_InnerIpAddresses(ip) response = self.client.do_action_with_exception(request) response_dic = json.loads(response) instance_id = response_dic.get('Instances').get('Instance')[0].get( 'InstanceId') return instance_id
def get_sys_info(): clt = client.AcsClient('xxx','xxx','cn-hangzhou') request = DescribeInstancesRequest.DescribeInstancesRequest() #request.set_PageNumber(1) #设置页数 request.set_PageSize(50) #设置每页返回多少,默认为10条 request.set_accept_format('json') result = json.loads(clt.do_action(request)).get('Instances').get('Instance') #result = clt.do_action(request) return result
def GetInfo(self, TotalPage): data = [] for PageNum in range(1, TotalPage + int(1)): request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageNumber(PageNum) response = json.loads(self.client.do_action_with_exception(request)) for i in response["Instances"]["Instance"]: PublicIp = i["PublicIpAddress"]["IpAddress"] EipAddress = i["EipAddress"]["IpAddress"] if len(PublicIp) == 0: PublicIpAddress = EipAddress else: PublicIpAddress = PublicIp[0] try: tagsValues = i["Tags"]["Tag"][0]["TagValue"] except KeyError: tagsValues = i["InstanceName"] text = "{} 没有打标签,请登录{} 账号检查。".format(tagsValues, self.Account) slack_send.alert(text) print(text) try: tagsKey = i["Tags"]["Tag"][0]["TagKey"] except KeyError: tagsKey = i["InstanceName"] text = "{} 没有打标签,请登录{} 账号检查。".format(tagsKey, self.Account) slack_send.alert(text) print(text) info = ( i["RegionId"], i["ZoneId"], i["InstanceId"], i["InstanceName"], tagsValues, tagsKey, i["NetworkInterfaces"]["NetworkInterface"][0]["PrimaryIpAddress"], PublicIpAddress, i["InternetMaxBandwidthOut"], i["InstanceType"], i["Cpu"], i["Memory"], i["OSType"], i["OSName"], i["Status"], self.Account, i["CreationTime"], i["ExpiredTime"] ) data.append(info) return data
def query_ecs_info(instanceids): # 设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId', 'cn-hangzhou') request.add_query_param('InstanceIds', instanceids) # 发起请求 response = clt.do_action(request) json_response = json.loads(response) print json_response # 获取实例区域 RegionId = json_response['Instances']['Instance'][0]['RegionId'] # 获取过期时间 ExpiredTime = json_response['Instances']['Instance'][0]['ExpiredTime'] # 获取内存大小 Memory = json_response['Instances']['Instance'][0]['Memory'] # 获取系统类型 OSType = json_response['Instances']['Instance'][0]['OSType'] # 获取实例状态 Status = json_response['Instances']['Instance'][0]['Status'] # 获取网络类型 NetworkType = json_response['Instances']['Instance'][0][ 'InstanceNetworkType'] # 获取内网IP InnerIpAddress = json_response['Instances']['Instance'][0][ 'InnerIpAddress']['IpAddress'][0] # 获取实例名称 InstanceName = json_response['Instances']['Instance'][0]['InstanceName'] # 获取CPU核数 Cpu = json_response['Instances']['Instance'][0]['Cpu'] # 获取公网IP try: PublicIpAddress = json_response['Instances']['Instance'][0][ 'PublicIpAddress']['IpAddress'][0] except: PublicIpAddress = '' # 获取操作系统版本 OSName = json_response['Instances']['Instance'][0]['OSName'] # 存入字典 dict = {} dict['RegionId'] = RegionId dict['ExpiredTime'] = ExpiredTime.replace("Z", "").replace("T", " ") dict['Memory'] = Memory dict['OSType'] = OSType dict['Status'] = Status dict['NetworkType'] = NetworkType dict['InnerIpAddress'] = InnerIpAddress dict['InstanceName'] = InstanceName dict['Cpu'] = Cpu dict['PublicIpAddress'] = PublicIpAddress dict['OSName'] = OSName return dict
def list_vms(region, ids=None): client = create_acs_client(region=region) request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_action_name('DescribeInstances') # request.add_query_param('RegionId', region) response = client.do_action_with_exception(request) r = json.loads(response.decode()) log.debug(r) return r
def getinstance(ids): describeInstancesRequest = DescribeInstancesRequest.DescribeInstancesRequest( ) describeInstancesRequest.set_accept_format('json') describeInstancesRequest.set_InstanceIds(ids) describeInstancesRequest.set_PageNumber(1) describeInstancesRequest.set_PageSize(100) result = clt.do_action_with_exception(describeInstancesRequest) # print result return json.loads(result)
def get_sys_info(self): clt = client.AcsClient(self.accessKey, self.accessSecret, self.region) request = DescribeInstancesRequest.DescribeInstancesRequest() # request.set_PageNumber(1) #设置页数 request.set_PageSize(50) # 设置每页返回多少,默认为10条 request.set_accept_format('json') self.result = json.loads( clt.do_action(request)).get('Instances').get('Instance') # result = clt.do_action(request) return self.result
def get_aliyun_instanceId(): request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format("JSON") total_count = json.loads( client.do_action_with_exception(request)).get("TotalCount") pagesize = 10 page_number = get_page_number(total_count, pagesize) datas = [] for num in range(1, page_number + 1): data = [] req = DescribeInstancesRequest.DescribeInstancesRequest() req.set_accept_format("JSON") request.set_PageSize(pagesize) req.set_PageNumber(num) instances = json.loads(client.do_action_with_exception(req)).get( "Instances").get("Instance") data = Conversion_format(instances) datas.extend(data) return datas
def import_alito_dbandzabbix(clt, instance_names): describeInstancesRequest = DescribeInstancesRequest.DescribeInstancesRequest( ) #获取详细信息 describeInstancesRequest.set_accept_format('json') #describeInstancesRequest.set_InstanceIds(ids) #describeInstancesRequest.set_Tags(tags) describeInstancesRequest.set_InstanceName(instance_names) describeInstancesRequest.set_PageNumber(1) describeInstancesRequest.set_PageSize(100) result = clt.do_action_with_exception(describeInstancesRequest) Ins = json.loads(result) zabbix = ZabbixOperate() invdb = InventoryDB_Operate(conn, dbtable) for ins in Ins["Instances"].get("Instance"): #.get? _instance_id = str(ins["InstanceId"]) _instance_name = ins["InstanceName"] _instance_name_format = _instance_name.replace('-', '_') _instance_type = str(ins["InstanceTypeFamily"]) try: _instance_innerip = str(ins["VpcAttributes"].get( "PrivateIpAddress").get("IpAddress")[0]) except IndexError: _instance_innerip = str(ins["InnerIpAddress"].get("IpAddress")[0]) try: _instance_outterip = (str(ins["EipAddress"]["IpAddress"]) if ins["EipAddress"]["IpAddress"] else str( ins["PublicIpAddress"]["IpAddress"][0])) except IndexError: _instance_outterip = "" try: _project_name = _instance_name_format.split('_')[0] _region_alias = _instance_name_format.split('_')[1] except Exception, e: _project_name = "other" _region_alias = "unknown" #import to db print(_project_name, _region_alias, _instance_id, _instance_name, _instance_innerip, _instance_outterip, _instance_type) invdb.import_instance(_project_name, _region_alias, _instance_id, _instance_name, _instance_innerip, _instance_outterip, _instance_type) #add to zabbix if '_SG_Ali_' in _instance_name: proxytype = "alisg" zabbix.host_add_viaproxy(_instance_name, _instance_innerip, proxytype) elif '_FK_Ali_' in _instance_name: proxytype = "alifk" zabbix.host_add_viaproxy(_instance_name, _instance_innerip, proxytype)
def update_ecs_info(instance_id): # 设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId', 'cn-hangzhou') request.add_query_param('InstanceIds', instance_id) # 发起请求 response = clt.do_action(request) json_response = json.loads(response) # 获取实例区域 region_id = json_response['Instances']['Instance'][0]['RegionId'] # 获取过期时间 expire_time = json_response['Instances']['Instance'][0]['ExpiredTime'] # 获取内存大小 memory = json_response['Instances']['Instance'][0]['Memory'] # 获取系统类型 os_type = json_response['Instances']['Instance'][0]['OSType'] # 获取实例状态 status = json_response['Instances']['Instance'][0]['Status'] # 获取网络类型 network_type = json_response['Instances']['Instance'][0][ 'InstanceNetworkType'] # 获取内网IP inner_ip_address = json_response['Instances']['Instance'][0][ 'InnerIpAddress']['IpAddress'][0] # 获取实例名称 instance_name = json_response['Instances']['Instance'][0]['InstanceName'] # 获取CPU核数 cpu = json_response['Instances']['Instance'][0]['Cpu'] # 获取公网IP try: public_ip_address = json_response['Instances']['Instance'][0][ 'PublicIpAddress']['IpAddress'][0] except: public_ip_address = '' # 获取操作系统版本 os_name = json_response['Instances']['Instance'][0]['OSName'] # 存入字典 dict = {} dict['RegionId'] = region_id dict['ExpiredTime'] = expire_time.replace("Z", "").replace("T", " ") dict['Memory'] = memory dict['OSType'] = os_type dict['Status'] = status dict['NetworkType'] = network_type dict['InnerIpAddress'] = inner_ip_address dict['InstanceName'] = instance_name dict['Cpu'] = cpu dict['PublicIpAddress'] = public_ip_address dict['OSName'] = os_name return dict
def ecs_instance_list_request(region=DEFAULT_CONFIG['region_id'],zone_id=''): """ECS封装API-获取主机列表 """ # 创建 request,并设置参数 request = DescribeInstancesRequest.DescribeInstancesRequest() request.set_PageSize(PAGE_SIZE) request.set_PageNumber(PAGE_NUM) if zone_id: request.set_ZoneId(zone_id) # 发起 API 请求并返回数据 return _do_action(_get_config(region), request)