def describe_instance(client: AcsClient, instance_id: str): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds(f'''["{instance_id}"]''') response = client.do_action_with_exception(request) response_str = response.decode() response_data: dict = json.loads(response_str) if response_data["TotalCount"] == 0: print(response_str) raise ValueError("没有可用的实例,请检查InstanceId是否正确.") status = response_data['Instances']['Instance'][0]['Status'] ip = "" if status == "Running": ip_data = response_data['Instances']['Instance'][0]['PublicIpAddress'] if "IpAddress" in ip_data and len(ip_data["IpAddress"]) > 0: ip = ip_data["IpAddress"][0] elif status == "Stopping" or status == "Starting": pass elif status == "Stopped": pass else: print(response_str) raise ValueError(f"无效的状态: {status}") return status, ip
class EcsIdToIp(Aliyunsdk): """ 为构造函数提供ECS ID, 执行run方法得到ECS 内网IP,外网IP,名称及区域 """ def __init__(self, ecsid): Aliyunsdk.__init__(self) self.ecsid = ecsid self.resultFormat = resultFormat self.request = DescribeInstancesRequest() self.request.set_accept_format(self.resultFormat) self.request.set_InstanceIds([self.ecsid]) def handling(self): try: self.publicIp = self.result['Instances']['Instance'][0][ 'PublicIpAddress']['IpAddress'][0] #外网IP self.innerIp = self.result['Instances']['Instance'][0][ 'InnerIpAddress']['IpAddress'][0] #内网IP self.instanceName = self.result['Instances']['Instance'][0][ 'InstanceName'] #名称 self.regionId = self.result['Instances']['Instance'][0][ 'RegionId'] #区域 Aliyunsdk.handling(self) except IndexError: print('ID: %s is not exist' % self.ecsid) os._exit(17)
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 get_ip(self, instance_list): request = DescribeInstancesRequest() request.set_accept_format('json') ip_list = [] if len(instance_list) <= 10: for i in range(len(instance_list)): request.set_InstanceIds([instance_list[i]]) response = self.client.do_action_with_exception(request) response = json.loads(response) ip_list.append( response["Instances"]["Instance"][0]["VpcAttributes"] ["PrivateIpAddress"]['IpAddress'][0]) else: iteration = len(instance_list) // 10 for i in range(iteration): for j in range(10): request.set_InstanceIds([instance_list[i * 10 + j]]) response = self.client.do_action_with_exception(request) response = json.loads(response) ip_list.append( response["Instances"]["Instance"][0]["VpcAttributes"] ["PrivateIpAddress"]['IpAddress'][0]) if len(instance_list) - iteration * 10 != 0: for j in range(len(instance_list) - iteration * 10): request.set_InstanceIds( [instance_list[iteration * 10 + j]]) response = self.client.do_action_with_exception(request) response = json.loads(response) ip_list.append( response["Instances"]["Instance"][0]["VpcAttributes"] ["PrivateIpAddress"]['IpAddress'][0]) return ip_list
def eip(self, instance_id): """ :argument instance_id - ecs instance id *************** :return: ecs """ request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds("['%s']" % instance_id) try: logging.info("Start to get eip for instance %s." % instance_id) response = self.client.do_action_with_exception(request) if ResponseUtil.success(response): eip = get_instance_eip(str(response, encoding='utf-8')) if not instance_id: raise ValueError("Eip NullPointException") logging.info("Get eip : %s for instance : %s." % (eip, instance_id)) return True, eip else: return False, str(response, encoding='utf-8') except Exception as e: logging.error( "Failed to get eip for instance %s, cause by exception : " % instance_id, e) return False, e
def Linux_Cmd_Exec(ALIYUN_ACCESSKEYID, ALIYUN_ACCESSKEYSECRET, ZhuJi_ID, Zhuji_Aliyun_City_Host): client = AcsClient(ALIYUN_ACCESSKEYID, ALIYUN_ACCESSKEYSECRET, Zhuji_Aliyun_City_Host) request = DescribeInstancesRequest() request.set_accept_format('json') InstanceId = [ZhuJi_ID] request.set_InstanceIds(InstanceId) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') print(""" \033[1;31m --------------------------------------------------------------------------------\033[0m \033[1;31m - +-------+ \033[0m \033[1;31m - | Linux | OS: %s \033[0m \033[1;31m - | | --------> IP: %s \033[0m \033[1;31m - | | Name: %s \033[0m \033[1;31m - +-------+ \033[0m \033[1;31m --------------------------------------------------------------------------------\033[0m """ % (json.loads(response)['Instances']['Instance'][0]['OSName'], json.loads(response)['Instances'] ['Instance'][0]['PublicIpAddress']['IpAddress'][0], json.loads(response)['Instances']['Instance'][0]['InstanceName'])) while True: Cmd = str(input("\033[5;37m[root@{}~]# \033[0m".format(ZhuJi_ID))) if Cmd == "exit": print("\033[1;31m-正在退出主机..... {} \033[0m".format(ZhuJi_ID)) break Linux_exec(client, Cmd, ZhuJi_ID)
def Aliyun_Serve_test(ALIYUN_ACCESSKEYID, ALIYUN_ACCESSKEYSECRET, InstanceId, Aliyun_City_Host, NUM, Aliyun_Serve_test_dict): client = AcsClient(ALIYUN_ACCESSKEYID, ALIYUN_ACCESSKEYSECRET, Aliyun_City_Host) request = DescribeInstancesRequest() request.set_accept_format('json') InstanceId = [InstanceId] request.set_InstanceIds(InstanceId) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') NUM = int(NUM) + 1 OSName = json.loads(response)['Instances']['Instance'][0]['OSName'] if "Windows" in OSName: OS = "Windows" else: OS = "Linux" IpAddress_1 = json.loads(response)['Instances']['Instance'][0][ 'VpcAttributes']['PrivateIpAddress']['IpAddress'][0] IpAddress_2 = json.loads(response)['Instances']['Instance'][0][ 'PublicIpAddress']['IpAddress'][0] InstanceName = json.loads( response)['Instances']['Instance'][0]['InstanceName'] InstanceId = InstanceId[0] Aliyun_Serve_test_dict.append({ "InstanceId": InstanceId, "Aliyun_City_Host": Aliyun_City_Host, "OS": OS }) print( "\033[1;34m ({}) 主机ID: {} 系统名称: {} \n 外网IP: {}\n 内网IP: {} \n 服务器名: {}\n \033[0m" .format(NUM, InstanceId, OSName, IpAddress_2, IpAddress_1, InstanceName))
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])
class EcsIpToId(Aliyunsdk): """ 为构造函数提供ECS IP, 执行run方法得到ECS 内网IP,ID,名称及区域 """ def __init__(self, publicIp): Aliyunsdk.__init__(self) self.publicIp = publicIp self.resultFormat = resultFormat self.request = DescribeInstancesRequest() self.request.set_accept_format(self.resultFormat) self.request.set_PublicIpAddresses([self.publicIp]) def handling(self): try: self.ecsid = self.result['Instances']['Instance'][0]['InstanceId'] self.innerIp = self.result['Instances']['Instance'][0][ 'InnerIpAddress']['IpAddress'][0] self.instanceName = self.result['Instances']['Instance'][0][ 'InstanceName'] self.regionId = self.result['Instances']['Instance'][0]['RegionId'] Aliyunsdk.handling(self) except IndexError: print('IP: %s is not exist' % self.publicIp) os._exit(17)
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 describe(instance_id_list): request = DescribeInstancesRequest() request.set_accept_format("json") response = client.do_action_with_exception(request) res = json.loads(response) instance = res["Instances"]["Instance"] return instance
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 getInstance(client, instance_name=None, instance_ids=None): request = DescribeInstancesRequest() request.set_accept_format('json') if instance_ids: request.set_InstanceIds(instance_ids) if instance_name: request.set_InstanceName(instance_name) response = client.do_action_with_exception(request) return response
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(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_aliecs_info(instance_id): client = AcsClient(accessKeyId, accessSecret, regionId) request = DescribeInstancesRequest() request.set_accept_format('json') instnce_id_data = [] instnce_id_data.append(instance_id) # print(instnce_id_data) request.set_InstanceIds(instnce_id_data) response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) disks_info = get_instance_disk_info(instance_id) # print(disks_info) res['disk_infos'] = disks_info return res
def DescribeInstances(ak, sk, region_tag, instance_id): client = AcsClient(ak, sk, region_tag) request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds("['" + instance_id +"']") response = client.do_action_with_exception(request) result = str(response, encoding='utf-8') data = json.loads(result) vpc_ip = data["Instances"]["Instance"][0]["NetworkInterfaces"]["NetworkInterface"][0]["PrimaryIpAddress"] f = open('/etc/ansible/hosts','a') f.write(vpc_ip + ":34872 ") f.write('\n') f.close() print ("新购买的服务器已经添加到ansible名单里!")
def Instances_status(self, RegionId): request = DescribeInstancesRequest() request.set_accept_format('json') request.add_query_param('RegionId', RegionId) response = self._send_request(request) if response.get('TotalCount') == 0: return response else: for i in range(response.get('TotalCount')): response['Instances']['Instance'][i][ 'AutoReleaseTime'] = self.utc_to_local( response.get('Instances').get('Instance')[i].get( 'AutoReleaseTime')) return response
def get_ecs(self): """ 获取所有区域ECS信息 :return: """ instances = [] region_ids = self.DescribeRegions() for region_id in region_ids.keys(): client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id, connect_timeout=30) request = DescribeInstancesRequest() request.set_accept_format('json') response = client.do_action_with_exception(request) res = json.loads(str(response, encoding='utf-8')) instances += res['Instances']['Instance'] return instances
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 info(region_instance_id_list): # Arg region_instance_id_list [[region_id, instance_id], [region_id, instance_id]...] # Return [Info, Info...] info_list = [] for (region_id, instance_id) in region_instance_id_list: client = AcsClient( conf.secret["aliyun"]["access_key"], conf.secret["aliyun"]["access_secret"], region_id, ) req = DescribeInstancesRequest() req.set_accept_format("json") req.set_InstanceIds([instance_id]) res = json.loads(client.do_action_with_exception(req)) info_list.append(res["Instances"]["Instance"][0]) return info_list
def _get_instance(self): """Retrieve instance matching instance_id.""" client = self._connect() request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds(json.dumps([self.running_instance_id])) try: response = json.loads(client.do_action_with_exception(request)) instance = response['Instances']['Instance'][0] except Exception: raise AliyunCloudException( 'Instance with ID: {instance_id} not found.'.format( instance_id=self.running_instance_id)) return instance
def check_spot_callback(self, instance_id): request = DescribeInstancesRequest() request.set_accept_format('json') request.set_InstanceIds([instance_id]) status = False try: response = self.client.do_action_with_exception(request) response = json.loads(response) if len(response["Instances"] ["Instance"]) == 1 and "Recycling" in response["Instances"][ "Instance"][0]["OperationLocks"]["LockReason"]: status = True if instance_id not in self.describe_apg_instances(): status = True except: pass return status
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_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 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 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