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
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.")
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
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
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' }
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)
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
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
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
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)
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
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")
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
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
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']
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)
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
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)
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')
''' 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##########"
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']
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)