Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
Arquivo: Ecs.py Projeto: lingh0205/ecs
 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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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))
Exemplo n.º 8
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])
Exemplo n.º 9
0
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)
Exemplo n.º 10
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
Exemplo n.º 11
0
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
Exemplo n.º 12
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
Exemplo n.º 13
0
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
Exemplo n.º 14
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)
Exemplo 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
Exemplo 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
Exemplo 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
Exemplo 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
Exemplo n.º 19
0
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
Exemplo n.º 20
0
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名单里!")
Exemplo n.º 21
0
 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
Exemplo n.º 22
0
 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
Exemplo n.º 23
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()
Exemplo n.º 24
0
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
Exemplo n.º 25
0
    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
Exemplo n.º 26
0
 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
Exemplo n.º 27
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
Exemplo n.º 28
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
Exemplo n.º 29
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
Exemplo n.º 30
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