Esempio n. 1
0
 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)
Esempio n. 2
0
    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
Esempio n. 3
0
 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])
Esempio n. 4
0
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
Esempio n. 5
0
 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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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
Esempio n. 10
0
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)
Esempio n. 11
0
 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
Esempio n. 12
0
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
Esempio n. 13
0
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
Esempio n. 14
0
    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)
Esempio n. 15
0
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
Esempio n. 16
0
    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
Esempio n. 17
0
    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
Esempio n. 18
0
 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
Esempio n. 19
0
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
Esempio n. 20
0
 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
Esempio n. 21
0
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
Esempio n. 22
0
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()
Esempio n. 23
0
 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)
Esempio n. 24
0
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
Esempio n. 25
0
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')
Esempio n. 26
0
 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
Esempio n. 27
0
    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
Esempio n. 28
0
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']))
Esempio n. 29
0
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