diff --git a/pkg/multicloud/qcloud/elasticcache_instance.go b/pkg/multicloud/qcloud/elasticcache_instance.go index 0b9d581aee..923bcd27f7 100644 --- a/pkg/multicloud/qcloud/elasticcache_instance.go +++ b/pkg/multicloud/qcloud/elasticcache_instance.go @@ -973,17 +973,31 @@ func (self *SRegion) GetCloudElasticcacheAccounts(instanceId string) ([]SElastic params := map[string]string{} params["Region"] = self.GetId() params["InstanceId"] = instanceId - params["Limit"] = "100" + params["Limit"] = "20" params["Offset"] = "0" - resp, err := self.client.redisRequest("DescribeInstanceAccount", params) - if err != nil { - return nil, errors.Wrap(err, "DescribeInstanceAccount") - } ret := []SElasticcacheAccount{} - err = resp.Unmarshal(&ret, "Accounts") - if err != nil { - return nil, errors.Wrap(err, "Unmarshal") + offset := 0 + for { + resp, err := self.client.redisRequest("DescribeInstanceAccount", params) + if err != nil { + return nil, errors.Wrap(err, "DescribeInstanceAccount") + } + + _ret := []SElasticcacheAccount{} + err = resp.Unmarshal(&_ret, "Accounts") + if err != nil { + return nil, errors.Wrap(err, "Unmarshal") + } else { + ret = append(ret, _ret...) + } + + if len(_ret) < 20 { + break + } else { + offset += 20 + params["Offset"] = strconv.Itoa(offset) + } } return ret, nil @@ -994,16 +1008,31 @@ func (self *SRegion) GetCloudElasticcacheBackups(instanceId string) ([]SElasticc params := map[string]string{} params["Region"] = self.GetId() params["InstanceId"] = instanceId - params["Limit"] = "100" - resp, err := self.client.redisRequest("DescribeInstanceBackups", params) - if err != nil { - return nil, errors.Wrap(err, "DescribeInstanceBackups") - } + params["Limit"] = "20" + params["Offset"] = "0" ret := []SElasticcacheBackup{} - err = resp.Unmarshal(&ret, "BackupSet") - if err != nil { - return nil, errors.Wrap(err, "Unmarshal") + offset := 0 + for { + resp, err := self.client.redisRequest("DescribeInstanceBackups", params) + if err != nil { + return nil, errors.Wrap(err, "DescribeInstanceBackups") + } + + _ret := []SElasticcacheBackup{} + err = resp.Unmarshal(&_ret, "BackupSet") + if err != nil { + return nil, errors.Wrap(err, "Unmarshal") + } else { + ret = append(ret, _ret...) + } + + if len(_ret) < 20 { + break + } else { + offset += 20 + params["Offset"] = strconv.Itoa(offset) + } } return ret, nil @@ -1072,19 +1101,38 @@ func (self *SRegion) GetCloudElasticcacheParameters(instanceId string) ([]SElast } // https://cloud.tencent.com/document/api/239/20018 -func (self *SRegion) GetCloudElasticcaches() ([]SElasticcache, error) { +func (self *SRegion) GetCloudElasticcaches(instanceId string) ([]SElasticcache, error) { params := map[string]string{} params["Region"] = self.GetId() - params["Limit"] = "100" - resp, err := self.client.redisRequest("DescribeInstances", params) - if err != nil { - return nil, errors.Wrap(err, "DescribeInstances") + params["Limit"] = "20" + params["Offset"] = "0" + + if len(instanceId) > 0 { + params["InstanceId"] = instanceId } ret := []SElasticcache{} - err = resp.Unmarshal(&ret, "InstanceSet") - if err != nil { - return nil, errors.Wrap(err, "Unmarshal") + offset := 0 + for { + resp, err := self.client.redisRequest("DescribeInstances", params) + if err != nil { + return nil, errors.Wrap(err, "DescribeInstances") + } + + _ret := []SElasticcache{} + err = resp.Unmarshal(&_ret, "InstanceSet") + if err != nil { + return nil, errors.Wrap(err, "Unmarshal") + } else { + ret = append(ret, _ret...) + } + + if len(_ret) < 20 { + break + } else { + offset += 20 + params["Offset"] = strconv.Itoa(offset) + } } return ret, nil diff --git a/pkg/multicloud/qcloud/region.go b/pkg/multicloud/qcloud/region.go index 486d6bab5e..1104d4f65d 100644 --- a/pkg/multicloud/qcloud/region.go +++ b/pkg/multicloud/qcloud/region.go @@ -982,7 +982,7 @@ func (region *SRegion) GetCapabilities() []string { } func (region *SRegion) GetIElasticcaches() ([]cloudprovider.ICloudElasticcache, error) { - caches, err := region.GetCloudElasticcaches() + caches, err := region.GetCloudElasticcaches("") if err != nil { return nil, errors.Wrap(err, "GetCloudElasticcaches") } @@ -998,7 +998,7 @@ func (region *SRegion) GetIElasticcaches() ([]cloudprovider.ICloudElasticcache, } func (region *SRegion) GetIElasticcacheById(id string) (cloudprovider.ICloudElasticcache, error) { - caches, err := region.GetCloudElasticcaches() + caches, err := region.GetCloudElasticcaches(id) if err != nil { return nil, errors.Wrap(err, "GetCloudElasticcaches") } diff --git a/pkg/multicloud/qcloud/shell/elasticcache.go b/pkg/multicloud/qcloud/shell/elasticcache.go index 0bf09b893a..ff558a242a 100644 --- a/pkg/multicloud/qcloud/shell/elasticcache.go +++ b/pkg/multicloud/qcloud/shell/elasticcache.go @@ -9,7 +9,7 @@ func init() { type RedisListOptions struct { } shellutils.R(&RedisListOptions{}, "redis-list", "List redis", func(cli *qcloud.SRegion, args *RedisListOptions) error { - redis, err := cli.GetCloudElasticcaches() + redis, err := cli.GetCloudElasticcaches("") if err != nil { return err }