Skip to content

Commit

Permalink
datasource/alicloud_slb_load_balancer: Adds three internal parameters…
Browse files Browse the repository at this point in the history
… current_page page_size total_count to support paging
  • Loading branch information
thisnihonglei committed Jan 27, 2022
1 parent 975ca55 commit 1f3f169
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 6 deletions.
39 changes: 34 additions & 5 deletions alicloud/data_source_alicloud_slb_load_balancers.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,15 @@ func dataSourceAlicloudSlbLoadBalancers() *schema.Resource {
Type: schema.TypeString,
Optional: true,
},
"page_number": {
Type: schema.TypeInt,
Optional: true,
Default: 100,
},
"page_size": {
Type: schema.TypeInt,
Optional: true,
},
"balancers": {
Type: schema.TypeList,
Computed: true,
Expand Down Expand Up @@ -392,6 +401,10 @@ func dataSourceAlicloudSlbLoadBalancers() *schema.Resource {
Optional: true,
Default: false,
},
"total_count": {
Type: schema.TypeInt,
Computed: true,
},
},
}
}
Expand Down Expand Up @@ -457,9 +470,17 @@ func dataSourceAlicloudSlbLoadBalancersRead(d *schema.ResourceData, meta interfa
if v, ok := d.GetOk("vpc_id"); ok {
request["VpcId"] = v
}
request["PageSize"] = PageSizeLarge
request["PageNumber"] = 1
var objects []map[string]interface{}
if v, ok := d.GetOk("page_number"); ok && v.(int) > 0 {
request["PageNumber"] = v.(int)
} else {
request["PageNumber"] = 1
}
if v, ok := d.GetOk("page_size"); ok && v.(int) > 0 {
request["PageSize"] = v.(int)
} else {
request["PageSize"] = PageSizeLarge
}
var objects []interface{}
var loadBalancerNameRegex *regexp.Regexp
if v, ok := d.GetOk("name_regex"); ok {
r, err := regexp.Compile(v.(string))
Expand Down Expand Up @@ -507,6 +528,10 @@ func dataSourceAlicloudSlbLoadBalancersRead(d *schema.ResourceData, meta interfa
return WrapErrorf(err, FailedGetAttributeMsg, action, "$.LoadBalancers.LoadBalancer", response)
}
result, _ := resp.([]interface{})
if isPagingRequest(d) {
objects = result
break
}
for _, v := range result {
item := v.(map[string]interface{})
if loadBalancerNameRegex != nil {
Expand All @@ -521,7 +546,7 @@ func dataSourceAlicloudSlbLoadBalancersRead(d *schema.ResourceData, meta interfa
}
objects = append(objects, item)
}
if len(result) < PageSizeLarge {
if len(result) < request["PageSize"].(int) {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
Expand All @@ -530,7 +555,8 @@ func dataSourceAlicloudSlbLoadBalancersRead(d *schema.ResourceData, meta interfa
names := make([]interface{}, 0)
s := make([]map[string]interface{}, 0)
slbs := make([]map[string]interface{}, 0)
for _, object := range objects {
for _, v := range objects {
object := v.(map[string]interface{})
mapping := map[string]interface{}{
"address": object["Address"],
"address_ip_version": object["AddressIPVersion"],
Expand Down Expand Up @@ -672,6 +698,9 @@ func dataSourceAlicloudSlbLoadBalancersRead(d *schema.ResourceData, meta interfa
if err := d.Set("slbs", slbs); err != nil {
return WrapError(err)
}
if err := d.Set("total_count", formatInt(response["TotalCount"])); err != nil {
return WrapError(err)
}
if output, ok := d.GetOk("output_file"); ok && output.(string) != "" {
writeToFile(output.(string), s)
}
Expand Down
15 changes: 14 additions & 1 deletion alicloud/data_source_alicloud_slb_load_balancers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@ func TestAccAlicloudSlbLoadBalancersDataSource(t *testing.T) {
"status": `"inactive"`,
}),
}
pagingConf := dataSourceTestAccConfig{
existConfig: testAccCheckAlicloudSlbLoadBalancersDataSourceName(rand, map[string]string{
"load_balancer_name": `"${alicloud_slb_load_balancer.default.load_balancer_name}"`,
"page_number": `1`,
}),
fakeConfig: testAccCheckAlicloudSlbLoadBalancersDataSourceName(rand, map[string]string{
"load_balancer_name": `"${alicloud_slb_load_balancer.default.load_balancer_name}"`,
"page_number": `2`,
}),
}
allConf := dataSourceTestAccConfig{
existConfig: testAccCheckAlicloudSlbLoadBalancersDataSourceName(rand, map[string]string{
"ids": `["${alicloud_slb_load_balancer.default.id}"]`,
Expand All @@ -111,6 +121,7 @@ func TestAccAlicloudSlbLoadBalancersDataSource(t *testing.T) {
"tags": fmt.Sprintf(`{
Created = "TF-%d"
}`, rand),
"page_number": `1`,
}),
fakeConfig: testAccCheckAlicloudSlbLoadBalancersDataSourceName(rand, map[string]string{
"ids": `["${alicloud_slb_load_balancer.default.id}_fake"]`,
Expand All @@ -124,13 +135,15 @@ func TestAccAlicloudSlbLoadBalancersDataSource(t *testing.T) {
"tags": fmt.Sprintf(`{
Created = "fake-%d"
}`, rand),
"page_number": `2`,
}),
}
var existAlicloudSlbLoadBalancersDataSourceNameMapFunc = func(rand int) map[string]string {
return map[string]string{
"ids.#": "1",
"names.#": "1",
"balancers.#": "1",
"total_count": CHECKSET,
"balancers.0.address": CHECKSET,
"balancers.0.address_ip_version": `ipv4`,
"balancers.0.address_type": `intranet`,
Expand Down Expand Up @@ -161,7 +174,7 @@ func TestAccAlicloudSlbLoadBalancersDataSource(t *testing.T) {
existMapFunc: existAlicloudSlbLoadBalancersDataSourceNameMapFunc,
fakeMapFunc: fakeAlicloudSlbLoadBalancersDataSourceNameMapFunc,
}
alicloudSlbLoadBalancersCheckInfo.dataSourceTestCheck(t, rand, idsConf, vpcIDConf, vswitchConf, netWorkTypeConf, masterZoneConf, resourceGroupIdConf, tagsConf, nameRegexConf, statusConf, allConf)
alicloudSlbLoadBalancersCheckInfo.dataSourceTestCheck(t, rand, idsConf, vpcIDConf, vswitchConf, netWorkTypeConf, masterZoneConf, resourceGroupIdConf, tagsConf, nameRegexConf, statusConf, pagingConf, allConf)
}
func testAccCheckAlicloudSlbLoadBalancersDataSourceName(rand int, attrMap map[string]string) string {
var pairs []string
Expand Down

0 comments on commit 1f3f169

Please sign in to comment.