Exemplo n.º 1
0
 def list_disks(self, **params):
     disks = []
     request = DescribeDisksRequest()
     request._params = params
     response = self._send_request(request)
     if response :
         disks.extend(response.get("Disks", {}).get("Disk", []))
     return disks
Exemplo n.º 2
0
 def refresh(self):
     request = DescribeDisksRequest()
     request.set_DiskIds(json.dumps([self.disk_id]))
     items = _get_response(self._client, request, {}, 'Disks.Disk')
     if not items:
         raise ClientException(
             errors.ERROR_INVALID_SERVER_RESPONSE,
             "Failed to find disk data from DescribeDiks "
             "response. "
             "DiskId = {0}".format(self.disk_id))
     self._assign_attributes(items[0])
Exemplo n.º 3
0
 def get_all_disk_list(self):
     request = DescribeDisksRequest()
     request.set_PageSize(self.pagesize)
     request.set_PageNumber(self.page)
     # request.set_accept_format('json')
     # 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')
     # page_num = int(response['PageNumber'])
     total_count = int(response['TotalCount'])
     page_size = int(response['PageSize'])
     if total_count <= page_size:
         self.get_disk_list(response['Disks']['Disk'])
     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 = json.loads(self.client.do_action_with_exception(request), encoding='utf-8')
             self.get_disk_list(response['Disks']['Disk'])
def handler(event, context):
    creds = context.credentials
    sts_token_credential = StsTokenCredential(creds.access_key_id,
                                              creds.access_key_secret,
                                              creds.security_token)

    evt = json.loads(event)
    content = evt.get("content")
    ecsInstanceId = content.get("ecsInstanceId")
    regionId = evt.get("regionId")

    global clt
    clt = client.AcsClient(region_id=regionId, credential=sts_token_credential)
    name = evt.get("name")
    name = name.lower()

    if name in [
            'Instance:SystemFailure.Reboot:Executed'.lower(),
            "Instance:InstanceFailure.Reboot:Executed".lower()
    ]:
        request = DescribeDisksRequest()
        request.add_query_param("RegionId", regionId)
        request.set_InstanceId(ecsInstanceId)
        response = _send_request(request)
        disks = response.get('Disks').get('Disk', [])
        for disk in disks:
            diskId = disk["DiskId"]
            SnapshotId = create_ecs_snap_by_id(diskId)
            LOGGER.info("Create ecs snap sucess, ecs id = %s , disk id = %s ",
                        ecsInstanceId, diskId)
Exemplo n.º 5
0
 def test_user_set_time_out(self):
     client = AcsClient(self.access_key_id,
                        self.access_key_secret,
                        self.region_id,
                        timeout=20,
                        auto_retry=False)
     self._patch_client(client)
     self._test_timeout(client, DescribeInstancesRequest(), 20)
     self._test_timeout(client, CreateInstanceRequest(), 20)
     self._test_timeout(client, DescribeInstanceHistoryEventsRequest(), 20)
     self._test_timeout(client, DescribeDisksRequest(), 20)
     self._test_timeout(client, RunInstancesRequest(), 20)
     self._test_timeout(client, ListUsersRequest(), 20)
Exemplo n.º 6
0
 def test_default_time_out(self):
     client = AcsClient(self.access_key_id,
                        self.access_key_secret,
                        self.region_id,
                        auto_retry=False)
     self._patch_client(client)
     self._test_timeout(client, DescribeInstancesRequest(), 10)
     self._test_timeout(client, CreateInstanceRequest(), 86)
     self._test_timeout(client, DescribeInstanceHistoryEventsRequest(), 19)
     self._test_timeout(client, DescribeDisksRequest(), 19)
     self._test_timeout(client, RunInstancesRequest(), 86)
     self._test_timeout(client, ListUsersRequest(),
                        10)  # not configured, using default
Exemplo n.º 7
0
 def get_instance_disk_info(self, region_id, zone_id, instance_id):
     """
     获取实例下磁盘信息
     :param regionid: cn-beijing
     :param zoneid: cn-beijing-g
     :param instanceid: i-2ze4wxcyl324952q8m7b
     :return:
     """
     client = AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)
     request = DescribeDisksRequest()
     request.set_accept_format('json')
     request.set_ZoneId(zone_id)
     request.set_InstanceId(instance_id)
     response = client.do_action_with_exception(request)
     # print((str(response, encoding='utf-8')))
     res = json.loads((str(response, encoding='utf-8')))
     return res['Disks']['Disk']
Exemplo n.º 8
0
def get_instance_disk_info(instance_id):
    disk_infos = ''
    client = AcsClient(accessKeyId, accessSecret, regionId)
    request = DescribeDisksRequest()
    request.set_accept_format('json')
    request.set_InstanceId(instance_id)
    d_response = client.do_action_with_exception(request)
    d_res = json.loads(str(d_response, encoding='utf-8'))
    for disk in d_res['Disks']['Disk']:
        disk_infos += disk['Device'] + ': ' + str(disk['Size']) + 'GB' + ' '
    return disk_infos
Exemplo n.º 9
0
    def __get_disk_total_page_num(self, PageNum=1, PageSize=1):
        request = DescribeDisksRequest()
        request.set_PageSize(PageSize)
        request.set_PageNumber(PageNum)
        response = self.__do_action(request)

        if self.TotalPageNum != 0:
            ins_obj = response['Disks']['Disk']
            self.disk_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
    def test_retry_conditions(self):

        default_retry_policy = retry_policy.get_default_retry_policy()

        def CE(code):
            return ClientException(code, "some error")

        def SE(code):
            return ServerException(code, "some error")

        def _get_retryable(*conditions):
            context = RetryPolicyContext(*conditions)
            return default_retry_policy.should_retry(context)

        def _assert_not_retryable(*conditions):
            retryable = _get_retryable(*conditions)
            self.assertTrue(retryable & RetryCondition.NO_RETRY)

        def _assert_retryable(*conditions):
            retryable = _get_retryable(*conditions)
            self.assertFalse(retryable & RetryCondition.NO_RETRY)

        def _assert_retryable_with_client_token(request):
            conditions = [request, SE("InternalError"), 0, 500]
            retryable = _get_retryable(*conditions)
            self.assertTrue(retryable &
                            RetryCondition.SHOULD_RETRY_WITH_THROTTLING_BACKOFF)

        def _assert_not_retryable_with_client_token(request):
            conditions = [request, SE("InternalError"), 0, 500]
            retryable = _get_retryable(*conditions)
            self.assertFalse(retryable & RetryCondition.SHOULD_RETRY_WITH_THROTTLING_BACKOFF)

        no_retry_request = AttachDiskRequest()
        retryable_request = DescribeInstancesRequest()

        timeout_exception = CE(error_code.SDK_HTTP_ERROR)
        invalid_param_excpetion = SE("MissingParameter")
        unknown_error = SE(error_code.SDK_UNKNOWN_SERVER_ERROR)
        internal_error = SE("InternalError")

        _assert_retryable(retryable_request, timeout_exception, 0, 500)
        _assert_retryable(retryable_request, timeout_exception, 2, 500)
        _assert_retryable(retryable_request, unknown_error, 0, 500)
        _assert_retryable(retryable_request, unknown_error, 0, 502)
        _assert_retryable(retryable_request, unknown_error, 0, 503)
        _assert_retryable(retryable_request, unknown_error, 0, 504)
        _assert_retryable(retryable_request, internal_error, 0, 500)
        _assert_retryable(retryable_request, SE("Throttling"), 0, 400)
        _assert_retryable(retryable_request, SE("ServiceUnavailable"), 0, 503)
        _assert_retryable(DescribeInstanceHistoryEventsRequest(),
                          SE("ServiceUnavailable"), 0, 503)
        _assert_retryable(DescribeDisksRequest(), SE("ServiceUnavailable"), 0, 503)

        _assert_not_retryable(no_retry_request, timeout_exception, 0, 500)
        _assert_not_retryable(no_retry_request, unknown_error, 0, 504)
        _assert_not_retryable(no_retry_request, invalid_param_excpetion, 0, 400)
        _assert_not_retryable(retryable_request, invalid_param_excpetion, 0, 400)
        _assert_not_retryable(retryable_request, timeout_exception, 3, 500)
        _assert_not_retryable(retryable_request, SE("InvalidAccessKeyId.NotFound"), 0, 404)

        _assert_retryable_with_client_token(CreateInstanceRequest())
        _assert_retryable_with_client_token(CreateDiskRequest())
        _assert_retryable_with_client_token(RunInstancesRequest())
        _assert_not_retryable_with_client_token(AttachDiskRequest())
        _assert_not_retryable_with_client_token(DescribeInstancesRequest())