def get_all_vm_list(self): request = DescribeInstancesRequest() request.set_PageSize(100) request.set_PageNumber(1) try: response = self.client.do_action_with_exception(request) print(str(response, encoding='utf-8')) response = json.loads(self.client.do_action_with_exception(request), encoding='utf-8') # print(response) print(response['PageNumber']) print(response['TotalCount']) print(response['PageSize']) page_num=int(response['PageNumber']) total_count=int(response['TotalCount']) page_size=int(response['PageSize']) if total_count <= page_size: self.get_vm_list(response['Instances']['Instance']) else: import math for page in range(1,math.floor(total_count/page_size)+1): request.set_PageSize(page_size) request.set_PageNumber(page+1) response = self.client.do_action_with_exception(request) print(str(response, encoding='utf-8')) response = json.loads(self.client.do_action_with_exception(request), encoding='utf-8') self.get_vm_list(response['Instances']['Instance']) return response except ServerException as e: print(e) except ClientException as e: print(e)
def describe_instances(self, instance_ids=None): """ 描述实例 :param instance_ids: 实例ID列表 :return: 实例信息列表 """ instances = [] page_size = 10 page_number = 1 total_count = None request = DescribeInstancesRequest() request.set_InstanceIds(json.dumps(instance_ids or self.instance_ids)) request.set_PageNumber(page_number) request.set_PageSize(page_size) while total_count is None or page_number * page_size < total_count: body = self.client.do_action_with_exception(request) data = json.loads(body) instances.extend(data['Instances']['Instance']) total_count = data['TotalCount'] page_number += 1 request.set_PageNumber(page_number) return instances
def _get_instance_info(self, region): c = client.AcsClient(self._AK, self._AKS, region) req = DescribeInstancesRequest() req.set_PageSize(100) req.set_accept_format('json') page_number = 0 try: response = c.do_action(req) instances = json.loads(response) total = instances['TotalCount'] page_size = instances['PageSize'] if total / page_size > total // page_size: page_number = total // page_size + 1 else: page_number = total // page_size except Exception as e: print e for p_n in range(1, page_number + 1): req.set_PageNumber(p_n) response = c.do_action(req) instances = json.loads(response) for host_info in instances['Instances']['Instance']: region_id = host_info['RegionId'] eip = host_info['EipAddress']['IpAddress'] pip = host_info['PublicIpAddress']['IpAddress'] instance_name = host_info['InstanceName'] instance_id = host_info['InstanceId'] host_name = host_info['HostName'] if eip != "": self._instances.append( [region_id, instance_name, eip, instance_id]) elif len(pip) >= 1: self._instances.append( [region_id, instance_name, pip[0], instance_id])
def get_ecs_instances(): client = AcsClient( ECS_ACCESS_KEY_ID, ECS_ACCESS_SECRET, ECS_REGION_ID ); #ecs实例空字典 instances = {} page_size = 10 page_number = 1 total_count = None request = DescribeInstancesRequest() request.set_PageNumber(page_number) request.set_PageSize(page_size) #以{privateIP:InstanceName}的形式将实例的名字和私网ip添加到ecs实例字典里 while total_count is None or page_number * page_size < (total_count + page_size) : body = client.do_action_with_exception(request) data = json.loads(body) for instance in data['Instances']['Instance']: instances.update( { instance['VpcAttributes']['PrivateIpAddress']['IpAddress'][0] : instance['InstanceName'] }) total_count = data['TotalCount'] page_number += 1 request.set_PageNumber(page_number) print("获取阿里云ecs数据....共获取 %s 条数据。" %(len(instances)) ) return instances
def describe_instances(self): """ 获取实例信息 :return: 实例信息列表 """ offset = 0 total_count = len(self.instance_ids) instances = [] while offset < total_count: ids = self.instance_ids[offset:min(offset + self.page_size, total_count)] request = DescribeInstancesRequest() request.set_PageSize(self.page_size) request.set_InstanceChargeType(self.instance_charge_type) request.set_InstanceIds(ids) body = self.client.do_action_with_exception(request) data = json.loads(body) ins = data['Instances']['Instance'] ret_instance_ids = [instance['InstanceId'] for instance in ins] invalid_instance_ids = set(ids) - set(ret_instance_ids) if invalid_instance_ids: raise InvalidInstanceId('Fail. Invalid InstanceIds: {}'.format( ', '.join(invalid_instance_ids))) instances.extend(ins) offset += self.page_size return instances
def get_ali_ecs_info(): Page_Number = get_page_numbers() start_step = 1 end_step = Page_Number + 1 for number in range(start_step, end_step): client = AcsClient(accessKeyId, accessSecret, regionId) request = DescribeInstancesRequest() request.set_accept_format('json') PageSize = Page_Size request.set_PageNumber(number) request.set_PageSize(PageSize) response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) # print(res["Instances"]["Instance"][0].keys()) instance_id = res["Instances"]["Instance"][0]["InstanceId"] # print(instance_id) disks_info = get_instance_disk_info(instance_id) for instance in res["Instances"]["Instance"]: instance['disk_infos'] = disks_info data.append(instance) # print(len(data)) # instance_number = len(data) # return instance_number return data
def getEcsCount(): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(1) response_str = clt.do_action(request) response_total = json.loads(response_str) TotalCount = response_total['TotalCount'] return TotalCount
def list_instance(): request = DescribeInstancesRequest() request.set_PageSize(100) request.set_PageNumber(1) response = _send_request(request) if response is not None: instance_list = response.get('Instances').get('Instance') result = map(_print_instance_info, instance_list) return result
def InstanceSync(regionId, pageSize, pageNum): client = AcsClient(accesskeyId, accessSecret, regionId) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(int(pageSize)) request.set_PageNumber(int(pageNum)) response = client.do_action_with_exception(request) data = json.loads(str(response, encoding='utf-8')) return data
def get_region_ecs_list(region, pageSize=50): request = DescribeInstancesRequest() for num in range(1, get_total_page_num(region) + 1): request.set_PageSize(pageSize) request.set_PageNumber(num) request.set_accept_format('json') response = get_client(region).do_action_with_exception(request) data = json.loads(str(response, encoding='utf-8')) for instance in data['Instances']['Instance']: save_Instance(instance)
def get_total_page_num(self, PageNum=1, PageSize=50): request = DescribeInstancesRequest() request.set_PageNumber(PageNum) request.set_PageSize(PageSize) response = self.get_action(request) if response['TotalCount'] % PageSize != 0: TotalPageNum = (response['TotalCount'] % PageSize) + 1 else: TotalPageNum = response['TotalCount'] % PageSize return TotalPageNum
def get_instance_id_by_ip(ip): logging.info("Check ip %s", ip) request = DescribeInstancesRequest() request.set_PageSize(100) ipaddr = json.dumps([ip]) request.set_PrivateIpAddresses(ipaddr) response = _send_request(request) instance_id = response.get("Instances").get("Instance")[0].get( "InstanceId") return instance_id
def get_instance_ip_by_id(instance_id): logging.info("Check instance_id %s", instance_id) request = DescribeInstancesRequest() request.set_PageSize(100) id = json.dumps([instance_id]) request.set_InstanceIds(id) response = _send_request(request) ip = response.get("Instances").get("Instance")[0].get("VpcAttributes").get( "PrivateIpAddress").get("IpAddress")[0] return ip
def get_ecs_info(self): page_num = self.get_total_page_num() for i in range(1, page_num + 1): request = DescribeInstancesRequest() request.set_PageNumber(i) request.set_PageSize(50) response = self.get_action(request) ins_obj = response['Instances']['Instance'] self.instance_list_total.extend( self.formart_ins_info(x) for x in ins_obj)
def get_total_page_num(region, pageSize=50): request = DescribeInstancesRequest() request.set_PageNumber(1) request.set_PageSize(1) request.set_accept_format('json') response = get_client(region).do_action_with_exception(request) data = json.loads(str(response, encoding='utf-8')) pageNum = data['TotalCount'] // pageSize if data['TotalCount'] % pageSize != 0: pageNum += 1 return pageNum
def get_ecsinstances_info(self, format, page, limit): from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest request = DescribeInstancesRequest() request.set_accept_format(format) request.set_PageNumber(page) request.set_PageSize(limit) try: response = self.client.do_action_with_exception(request) except: return False return response
def get_aliyun_hosts(self, register_prefix='', default_re='', extend_re='dev', project=''): client = AcsClient(self.accessKeyID, self.accessKeySecret, self.region) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageNumber(1) request.set_PageSize(50) response = client.do_action_with_exception(request) data = json.loads(response) PageNumber = int(data['TotalCount'] / 50 + 2) list = [] search_shard = extend_mesage(project) for Number in range(1, PageNumber): request.set_PageNumber(Number) request.set_PageSize(50) response = client.do_action_with_exception(request) data = json.loads(response) for host in data['Instances']['Instance']: dict = {} id = re.split(r'-', host['SerialNumber']) id = ''.join(str(i) for i in id) dict['id'] = id dict['ip'] = host['NetworkInterfaces']['NetworkInterface'][0][ 'PrimaryIpAddress'] if register_prefix: dict['hostname'] = str( register_prefix) + host['InstanceName'] else: dict['hostname'] = host['InstanceName'] dict['is_active'] = 'true' dict['platform'] = "Linux" try: dict['comment'] = search_shard[dict['ip']] except KeyError: if 'Tags' in host: comment = host['Tags']['Tag'][0]['TagValue'] dict['comment'] = "[%s]" % comment else: dict['comment'] = "[123]" # if host['InstanceName'].startswith('G') or host['InstanceName'].startswith('c'): final_re = '|'.join( default_re.split('|') + extend_re.split('|')).strip('|') if re.search(final_re, host['InstanceName']): dict['group'] = ['dev'] else: dict['group'] = ['base'] list.append(dict) Log.debug(list) return list
def ecs_detail(page_number=1): """ ecs实例详细信息 :param page_number: ecs页面页数 :return: """ request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(100) request.set_PageNumber(page_number) response = client().do_action_with_exception(request) response = json.loads(response) return response
def get_nodes_list(conn, options): result = {} request = DescribeInstancesRequest() request.set_PageSize(100) response = _send_request(conn, request) instance_status = None if response is not None: instance_list = response.get('Instances').get('Instance') for item in instance_list: instance_id = item.get('InstanceId') instance_name = item.get('InstanceName') result[instance_id] = (instance_name, None) return result
def _ecs_filter_request(self): request = DescribeInstancesRequest() request.set_PageSize(100) if ECS_ZONE_ID: request.set_ZoneId(ECS_ZONE_ID) if ECS_VPC_ID: request.set_VpcId(ECS_VPC_ID) if ECS_VSWITCH_ID: request.set_VSwitchId(ECS_VSWITCH_ID) if ECS_SECURITY_GROUP_ID: request.set_SecurityGroupId(ECS_SECURITY_GROUP_ID) if ECS_RESOURCE_GROUP_ID: request.set_ResourceGroupId(ECS_RESOURCE_GROUP_ID) if ECS_INSTANCE_IDS: request.set_InstanceIds(json.dumps(ECS_INSTANCE_IDS.split())) return request
def get_nodes_list(conn, options): logging.debug("start to get nodes list") result = {} request = DescribeInstancesRequest() request.set_PageSize(100) response = _send_request(conn, request) if response is not None: instance_list = response.get('Instances').get('Instance') for item in instance_list: instance_id = item.get('InstanceId') instance_name = item.get('InstanceName') result[instance_id] = (instance_name, None) logging.debug("get nodes list: %s" % result) return result
def get_ecs_instance(ip): request = DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId','cn-beijing') request.add_query_param('PrivateIpAddresses',[str(ip)]) request.set_PageSize(100) try: response = client.do_action_with_exception(request) info = json.loads(response)['Instances']['Instance'] if info: return [instance_info['InstanceId'] for instance_info in info] #print(info) except Exception as e: print "Get Inner IP Address Faild." sys.exit()
def show_ecs_instances_in_region(self, region: dict): request = DescribeInstancesRequest() request.set_PageSize(100) detail = Template( 'ID: $instance_id, Name: $name, Status: $status, NetworkType: $network_type, IP: $ip($nip), OS: $os_name, CPU: $cpu($cpu_core_count x $threads_per_core), Memory: $memory' ) region_id = region.get('RegionId', '') has_more = True instances = [] while has_more: result = self.send_aliyun_request(request, region_id) instances += result.getex('Instances.Instance', []) total_count = result.get('TotalCount', 0) page_size = result.get('PageSize', 10) page_number = result.get('PageNumber', 1) if page_number * page_size >= total_count: has_more = False print(f'{region_id}'.center(100, '-')) for instance in instances: item = JsonWrapper(instance) instance_network_type = item.get('InstanceNetworkType', 'classic') instance_ip = { 'classic': '/'.join(item.getex('PublicIpAddress.IpAddress', [])), 'vpc': item.getex('EipAddress.IpAddress', '') } instance_nip = { 'classic': '/'.join(item.getex('InnerIpAddress.IpAddress', [])), 'vpc': '/'.join( item.getex('VpcAttributes.PrivateIpAddress.IpAddress', [])) } line = detail.substitute( instance_id=item.get('InstanceId', ''), name=item.get('InstanceName', ''), status=item.get('Status', ''), network_type=instance_network_type, ip=instance_ip.get(instance_network_type, ''), nip=instance_nip.get(instance_network_type, ''), os_name=item.get('OSName', ''), cpu=item.get('Cpu', 0), cpu_core_count=item.getex('CpuOptions.CoreCount', item.get('Cpu', 0)), threads_per_core=item.getex('CpuOptions.ThreadsPerCore', 1), memory='{}G'.format(int(item.get('Memory', 0)) / 1024)) print(line)
def get_page_numbers(): client = AcsClient(accessKeyId, accessSecret, regionId) request = DescribeInstancesRequest() request.set_accept_format('json') PageSize = Page_Size request.set_PageSize(PageSize) response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) Page_Number = res['TotalCount'] / PageSize #3.77 if type(Page_Number) is float: Page_Number = res['TotalCount'] // PageSize # 3 Page_Number += 1 else: Page_Number = Page_Number return Page_Number
def get_instance_by_name(name): request_describe_instances = DescribeInstancesRequest() request_describe_instances.set_InstanceName(name) request_describe_instances.set_PageSize(100) response = sendrequest(request_describe_instances) if response is None: logger.error( f"Failed to get ECS by name({name}), please check above log") return None logger.info( f"Successfully get {response.get('TotalCount')} ECS(s) by name({name})." ) #[{"ResourceGroupId":"","Memory":2048,"InstanceChargeType":"PostPaid","Cpu":2,"OSName":"CentOS 7.8 64位","InstanceNetworkType":"vpc","InnerIpAddress":{"IpAddress":[]},"ExpiredTime":"2099-12-31T15:59Z","ImageId":"centos_7_8_x64_20G_alibase_20200622.vhd","EipAddress":{"AllocationId":"","IpAddress":"","InternetChargeType":""},"HostName":"main","VlanId":"","Status":"Running","MetadataOptions":{"HttpTokens":"","HttpEndpoint":""},"InstanceId":"i-uf6ddw7sm2rjqzk6kt5a","StoppedMode":"Not-applicable","CpuOptions":{"ThreadsPerCore":2,"Numa":"ON","CoreCount":1},"StartTime":"2020-07-31T17:26Z","DeletionProtection":false,"SecurityGroupIds":{"SecurityGroupId":["sg-uf6isrfirr1cm5t11h81"]},"VpcAttributes":{"PrivateIpAddress":{"IpAddress":["192.168.7.1"]},"VpcId":"vpc-uf6o8756puxsi6yrtukv5","VSwitchId":"vsw-uf6eb8cjpyi92lzkx4il0","NatIpAddress":""},"InternetChargeType":"PayByBandwidth","InstanceName":"main","DeploymentSetId":"","InternetMaxBandwidthOut":1,"SerialNumber":"abe536e8-5d76-47ba-9f77-7ae1fc999660","OSType":"linux","CreationTime":"2020-07-13T05:45Z","AutoReleaseTime":"","Description":"","InstanceTypeFamily":"ecs.t6","DedicatedInstanceAttribute":{"Tenancy":"","Affinity":""},"PublicIpAddress":{"IpAddress":["106.14.188.212"]},"GPUSpec":"","NetworkInterfaces":{"NetworkInterface":[{"PrimaryIpAddress":"192.168.7.1","NetworkInterfaceId":"eni-uf6i39kqgewm4ud72b9g","MacAddress":"00:16:3e:10:9d:df"}]},"SpotPriceLimit":0.0,"DeviceAvailable":true,"SaleCycle":"","InstanceType":"ecs.t6-c1m1.large","OSNameEn":"CentOS 7.8 64 bit","SpotStrategy":"NoSpot","IoOptimized":true,"ZoneId":"cn-shanghai-g","ClusterId":"","EcsCapacityReservationAttr":{"CapacityReservationPreference":"","CapacityReservationId":""},"DedicatedHostAttribute":{"DedicatedHostId":"","DedicatedHostName":""},"GPUAmount":0,"OperationLocks":{"LockReason":[]},"InternetMaxBandwidthIn":80,"Recyclable":false,"RegionId":"cn-shanghai","CreditSpecification":"Standard"}] return response.get('Instances').get('Instance')
def getAliCloundEcsList(self,RegionId='cn-shenzhen',PageSize=15,Page=1,Tags=[]): client=AcsClient(self.secreyKey,self.accesssecret,RegionId) req=DescribeInstancesRequest() req.set_PageSize(PageSize) req.set_PageNumber(Page) if len(Tags)>0: req.set_Tags(Tags) req.set_accept_format('json') try: data=client.do_action_with_exception(req) if data: return data else: return False except Exception as e: logger.error(e) return False
def get_ecses(self, instance_ids=[], page_num=1, page_size=20): request = DescribeInstancesRequest() request.set_accept_format('json') if instance_ids: request.set_InstanceIds(instance_ids) request.set_PageNumber(page_num) request.set_PageSize(page_size) data = self._request(request) total = data.get('TotalCount') data = data.get('Instances') data_list = data.get('Instance') data = { 'total': total, 'data_list': data_list, } return data
def getInstances(region): id=[] shellStatus={} client = AcsClient(ak, sk, region) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(50) response = json.loads(client.do_action_with_exception(request)) instances = response['Instances']['Instance'] if bool(instances): print(region) for ins in instances: id.append(ins['InstanceId']) status = cloudAssistantStatus(id,region) for i in status: shellStatus[i['InstanceId']] = i['CloudAssistantStatus'] for ins in instances: print("Id: %s\tName: %s\t%s\t%s\t%s\tPublicIp: %s\tInnerIp: %s"%(ins['InstanceId'],ins['InstanceName'],ins['OSName'],ins['Status'],shellStatus[ins['InstanceId']],ins['PublicIpAddress']['IpAddress'],ins['VpcAttributes']['PrivateIpAddress']['IpAddress']))
def list_instances(TotalCount): ecs_list = [] for i in range(0, TotalCount / 100 + 1): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_PageSize(100) request.set_PageNumber(i + 1) response_str = clt.do_action(request) response = json.loads(response_str) with open("c://Users/bobo/Desktop/aaa.json", "ab+") as f: f.write(response_str) # print response # sys.exit(1) if response is not None: ecs_list.extend(response.get('Instances').get('Instance')) with open("c://Users/bobo/Desktop/ass.json", "ab+") as f1: f1.write(repr(ecs_list)) return ecs_list
def __get_total_page_num(self, PageNum=1, PageSize=1): ''' 获取ECS总数,及当前页ECS列表 :param PageNum: 页ID :param PageSize: 页大小 :return: ''' request = DescribeInstancesRequest() request.set_PageNumber(PageNum) request.set_PageSize(PageSize) response = self.__do_action(request) if self.TotalPageNum != 0: ins_obj = response['Instances']['Instance'] self.instance_list_total.extend(ins_obj) return else: if int(response['TotalCount']) % self.PageSize != 0: self.TotalPageNum = int(response['TotalCount'] / self.PageSize) + 1 else: self.TotalPageNum = int(response['TotalCount'] / self.PageSize) return self.TotalPageNum