示例#1
0
 def _image_exists(self, image_id):
     request = DescribeImagesRequest()
     request.set_ImageId(image_id)
     response = self._send_request(request)
     if response != None and "TotalCount" in response and response[
             "TotalCount"] == 1:
         return True
     else:
         return False
示例#2
0
def DescribeImages():
    client = get_client()
    request = DescribeImagesRequest.DescribeImagesRequest()
    # Initiate an API request and print the response
    response = client.do_action_with_exception(request)
    data = json.loads(response)
    return data
示例#3
0
    def get_image_list(self, ImageId=None, ImageOwnerAlias=None):
        """
        获取所有镜像列表
        :return:
        """
        from aliyunsdkecs.request.v20140526 import DescribeImagesRequest

        page_size = 100
        page_number = 1
        true = True
        false = False
        all_img = []
        request = DescribeImagesRequest.DescribeImagesRequest()
        if ImageId:
            request.set_ImageId(ImageId)
        if ImageOwnerAlias:
            request.set_ImageOwnerAlias(ImageOwnerAlias)

        while 1:
            connect = self.aliyun_connect(request, page_size, page_number)
            page_number += 1

            req = eval(connect)

            if req.has_key('Images'):
                len(all_img)
                all_img += req['Images']['Image']

        return all_img
示例#4
0
 def get_image(self, snap_id):
     # 拿到快照id,检查快照id状态
     request = DescribeImagesRequest.DescribeImagesRequest()
     request.set_Status('Available')
     request.set_ImageOwnerAlias('self')
     request.set_PageNumber(1)
     request.set_PageSize(10)
     # 检查快照是否已经生成镜像,如果已经生成,则返回已生成的
     request.set_SnapshotId(snap_id)
     response = self.client.do_action_with_exception(request)
     response_dict = json.loads(response)
     images = response_dict.get('Images').get('Image')
     # 判断是否返回中有image,如果有则返回,如果没有则创建。
     if images:
         return images[0].get('ImageId')
     # 没有,创建新的镜像,检查镜像状态,创建成功后,返回镜像id。
     else:
         image_id = self.create_image(snap_id)
         while True:
             check_result = self.check_image_status(image_id)
             if not check_result:
                 print('镜像不存在: {image_id}'.format(image_id=image_id))
                 exit(1)
             elif check_result != 'Available':
                 print("等待镜像状态为:Available")
                 time.sleep(3)
             elif check_result == 'Available':
                 break
             else:
                 print('check_image 检查结果异常:image_id'.format(image_id))
                 exit(1)
         return image_id
示例#5
0
    def get_image_info(self, ImageId):
        """
        获取镜像信息
        :return:
        """
        true = True
        false = False
        from aliyunsdkecs.request.v20140526 import DescribeImagesRequest
        typelist = [None, 'marketplace']

        for imagetype in typelist:

            request = DescribeImagesRequest.DescribeImagesRequest()
            request.set_ImageId(ImageId)
            if imagetype:
                request.set_ImageOwnerAlias(imagetype)
            connect = self.aliyun_connect(request)
            req = eval(connect)

            if req.has_key('Images'):
                if req['Images'].has_key('Image'):
                    info = req['Images']['Image']
                    if info:
                        return req['Images']['Image'][0]

        return {
            "ImageName": ImageId,
            "Platform": 'NoHave',
            "Architecture": 'x86_64'
        }
示例#6
0
 def __request_image(self, image_id):
     req = DescribeImagesRequest.DescribeImagesRequest()
     req.set_query_params({'PageSize': 50})
     req.set_query_params({'ImageId': image_id})
     body = self.client.do_action_with_exception(req)
     res = json.loads(body.decode("utf-8"))
     if res['TotalCount'] == 0:
         raise ValueError("ImageId \"%s\" not found" % image_id)
示例#7
0
    def get_available_region_os_list(self, region_code: str) -> List:
        request = DescribeImagesRequest.DescribeImagesRequest()
        request.set_PageSize(100)
        request.set_ImageOwnerAlias("system")

        response = self.handle_request(request)
        os_list = response["Images"].get("Image", [])

        return os_list
示例#8
0
    def __getImageList(self):
        request = DescribeImagesRequest.DescribeImagesRequest()
        request.set_accept_format(u'json')
        try:
            result = self.__client.do_action(request)
            result_data = json.loads(result)
        except Exception as e:
            print "exception arised "
            print e
            return 1

        return 0
示例#9
0
 def _wait_for_image(self, image_id):
     logger.info(
         f"Image id is {image_id}. Waiting for 120s before checking whether image got created."
     )
     time.sleep(120)
     request = DescribeImagesRequest()
     request.set_ImageId(image_id)
     request.set_Status(",".join([
         "Creating", "Available", "UnAvailable", "CreateFailed", "Waiting"
     ]))
     max_tries = 120
     while max_tries > 0:
         max_tries -= 1
         time.sleep(10)
         response = self._send_request(request)
         #logger.info(json.dumps(response, indent=4))
         if response.get("TotalCount") >= 1:
             status = response.get("Images").get("Image")[0].get("Status")
             if status == "Available":
                 return
             else:
                 logger.info(f"Image import status: {status}")
         else:
             logger.info("Unknown image import status.")
     raise Exception(f"Image {image_id} not available.")
示例#10
0
 def getImagesList(self, pageNumber, pageSize):
     request = DescribeImagesRequest.DescribeImagesRequest()
     request.set_PageNumber(pageNumber)
     request.set_PageSize(pageSize)
     request.set_ImageOwnerAlias('self')
     request.set_accept_format('json')
     try:
         result = self.clt.do_action_with_exception(request)
         result = json.loads(result)
         data = {'count': result['TotalCount'], 'results': result['Images']['Image']}
         return True, data
     except Exception, ex:
         return False, str(ex)
示例#11
0
    def do_avail_images(self, region_id):
        client = AcsClient(self.aliyun_token['id'], self.aliyun_token['secret'], region_id)

        describeImagesRequest = DescribeImagesRequest.DescribeImagesRequest()
        describeImagesRequest.set_accept_format('json')

        resp = json_decode(client.do_action(describeImagesRequest))
        result = {}
        result['text'] = 'avail images %s' % region_id
        result['attachments'] = []
        for i in resp['Images']['Image']:
            result['attachments'].append({"title": "%s (%s)" % (i['ImageName'], i['ImageId']), "text": "OSName: %s" % i['OSName']})

        return result
示例#12
0
    def _check_image_existance(self, region, image_name) -> (bool, str):
        req = DescribeImagesRequest.DescribeImagesRequest()
        req.set_ImageName(image_name)
        req.set_Status(",".join(AlicloudImageStatus.to_availbel_str_array()))

        self.acs_client.set_region_id(region)
        response = parse_response(
            self.acs_client.do_action_with_exception(req))
        count = response.get("TotalCount")
        self.acs_client.set_region_id(self.region)

        if count == 0:
            return False, ""

        return True, response.get("Images").get("Image")[0].get("ImageId")
示例#13
0
 def check_image_status(self, image_id):
     request = DescribeImagesRequest.DescribeImagesRequest()
     request.set_accept_format('json')
     request.set_ImageId(image_id)
     request.set_ImageOwnerAlias('self')
     request.set_PageNumber(1)
     request.set_PageSize(10)
     response = self.client.do_action_with_exception(request)
     response_dict = json.loads(response)
     image = response_dict.get('Images').get('Image')[0]
     if image:
         status = image.get('Status')
         return status
     else:
         return False
示例#14
0
def list_images(region):

    cache_key = 'list_images_%s' % region
    r = cache.get(cache_key)
    if r is None:
        client = create_acs_client(region=region)

        request = DescribeImagesRequest.DescribeImagesRequest()
        request.set_action_name('DescribeImages')
        request.add_query_param('RegionId', region)
        request.set_PageSize(50)
        response = client.do_action_with_exception(request)
        r = json.loads(response.decode())
        log.debug(r)
        cache.set(cache_key, r, 300)
    return r
示例#15
0
    def get_amis(self, ami_id=None):
        self.connect()

        request = DescribeImagesRequest.DescribeImagesRequest()
        request.set_accept_format("json")
        request.set_PageSize(100)
        if ami_id:
            request.set_ImageId(ami_id)
        request.set_ImageOwnerAlias('self')

        try:
            response_string = self.clt.do_action_with_exception(request)
            response = json.loads(response_string)
        except Exception as e:
            return {}
        else:
            return {str(x['ImageId']): str(x['ImageName']) for x in response['Images']['Image']}
 def _describe_image(self, imageid):
     """
     查询image状态
     :param imageid:
     :return:
     """
     request = DescribeImagesRequest.DescribeImagesRequest()
     request.set_accept_format('json')
     request.add_query_param('RegionId', self.s_RegionId)
     request.add_query_param('ImageId', imageid)
     response = self.ecshelper.do_action_with_exception(request)
     # 进度 json.loads(response)['Images']['Image'][0]['Progress']
     self.logoper.info(
         '镜像创建进度:%s' %
         json.loads(response)['Images']['Image'][0]['Progress'])
     # 镜像状态
     return json.loads(response)['Images']['Image'][0]['Status']
示例#17
0
 def _get_image_list(self, owner= None , page_number = 1):
     client = AcsClient(access_key_id, access_key_secret,region_id)
     request = DescribeImagesRequest.DescribeImagesRequest()
     if owner:
         request.set_ImageOwnerAlias(owner)
     request.set_PageSize(100)
     request.set_PageNumber(page_number)
     response = client.do_action_with_exception(request)
     json_result = json.loads(response)
     total_count = json_result['TotalCount']
     page_size = json_result['PageSize']
     page_number = json_result['PageNumber']
     image_list = json_result['Images']['Image']
     if page_number * page_size >= total_count:
         return image_list
     else:
         page_number = page_number + 1
         return image_list + self._get_image_list(owner,page_number)
示例#18
0
 def DescribeImages(self, region_id):
     """
     :param region_id:  地域
     :return:  镜像列表 {'centos_6_09_64_20G_alibase_20180326.vhd': 'CentOS  6.9 64位',}
     """
     imagesclt = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)
     imagesreq = DescribeImagesRequest.DescribeImagesRequest()
     imagesreq.set_ActionType('DescribeImages')
     imagesreq.set_accept_format('json')
     imagesreq.set_PageSize(100)
     imagesre = json.loads(imagesclt.do_action_with_exception(imagesreq), encoding='utf-8')
     images = {}
     for i in imagesre['Images']['Image']:
         if i['Platform'] == 'CentOS':
             images[i['ImageId']] = i['OSName']
         if i['Platform'] == 'Ubuntu':
             images[i['ImageId']] = i['OSName']
         if i['Platform'] == 'Windows Server 2008':
             images[i['ImageId']] = i['OSName']
         if i['Platform'] == 'Debian':
             images[i['ImageId']] = i['OSName']
     return images
示例#19
0
    def _wait_for_image(self, region, image_id):
        start_time = datetime.datetime.now()
        req = DescribeImagesRequest.DescribeImagesRequest()
        req.set_ImageId(image_id)
        req.set_Status(",".join(AlicloudImageStatus.to_availbel_str_array()))
        self.acs_client.set_region_id(region)
        while True:
            elapse = datetime.datetime.now() - start_time
            if elapse.seconds > TIME_OUT:
                raise Exception(f"Time out to wait image {image_id} be ready")
            response = parse_response(
                self.acs_client.do_action_with_exception(req))

            if response.get("Images").get("Image")[0].get("Status") == str(
                    AlicloudImageStatus.AVAILABLE):
                break

            logger.info(
                f"Image {image_id} ({region}) is not ready, will check it 10 senconds later"
            )
            time.sleep(10)

        self.acs_client.set_region_id(self.region)
示例#20
0
 def convert_server_to_image(self,servername ,serverid):
     client = AcsClient(access_key_id, access_key_secret,region_id)
     request =CreateImageRequest.CreateImageRequest()
     request.set_InstanceId(serverid)
     request.set_ImageName(servername)
     response = client.do_action_with_exception(request)
     json_result = json.loads(response)
     imageid = json_result['ImageId']
     i = 0 
     while i < 600:
         client = AcsClient(access_key_id, access_key_secret,region_id)
         request = DescribeImagesRequest.DescribeImagesRequest()
         request.set_ImageId = (imageid)
         response = client.do_action_with_exception(request)
         json_result = json.loads(response)
         image_list = json_result['Images']['Image']
         print (image_list)
         if len(image_list) <= 1:
             break
         time.sleep(1)
         i =i + 1
 
     raise Exception('convert to image timeout')
示例#21
0
'''
status, headers, body = clt.get_response(request)
print status
result = json.loads(body)
for key,value in result.items():
    print key,value 
'''

print result
#print json.loads(result)['RequestId']
for i in json.loads(result)['Regions']['Region']:
    print i['LocalName'], i['RegionId']

print "#########DescribeImages############"

request = DescribeImagesRequest.DescribeImagesRequest()
request.set_accept_format('json')
request.set_PageSize(100)

result = clt.do_action(request)
result = json.loads(result)

for i in result['Images']['Image']:
    #print i['ImageId'], i['Description'], i['OSType'], i['OSName']
    if i['OSName'].strip() == u'Ubuntu  14.04 64位':
        image_id = i['ImageId']

print u"Ubuntu  14.04 64位 : %s" % image_id

print "###########CreateInstance##########"
示例#22
0
 def get_ecs_images_list(self):
     request = DescribeImagesRequest.DescribeImagesRequest()
     request.set_PageSize(30)
     response = self.client.do_action_with_exception(request)
     json_response = json.loads(response.decode('utf-8'))
     return json_response['Images']['Image']
示例#23
0
 def describe_images(self):
     request = DescribeImagesRequest.DescribeImagesRequest()
     key_list = ["ImageName", "ImageId"]
     request = self._add_params(request, key_list, self.vm_params)
     return self._send_request(request)