in alibabacloudstack/data_source_apsarastack_slb_loadbalancers.go [136:243]
func dataSourceAlibabacloudStackSlbsRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
slbService := &SlbService{client}
request := slb.CreateDescribeLoadBalancersRequest()
client.InitRpcRequest(*request.RpcRequest)
if v, ok := d.GetOk("master_availability_zone"); ok && v.(string) != "" {
request.MasterZoneId = v.(string)
}
if v, ok := d.GetOk("slave_availability_zone"); ok && v.(string) != "" {
request.SlaveZoneId = v.(string)
}
if v, ok := d.GetOk("network_type"); ok && v.(string) != "" {
request.NetworkType = v.(string)
}
if v, ok := d.GetOk("vpc_id"); ok && v.(string) != "" {
request.VpcId = v.(string)
}
if v, ok := d.GetOk("vswitch_id"); ok && v.(string) != "" {
request.VSwitchId = v.(string)
}
if v, ok := d.GetOk("address"); ok && v.(string) != "" {
request.Address = v.(string)
}
if v, ok := d.GetOk("tags"); ok {
var tags []Tag
for key, value := range v.(map[string]interface{}) {
tags = append(tags, Tag{
Key: key,
Value: value.(string),
})
}
request.Tags = toSlbTagsString(tags)
}
idsMap := make(map[string]string)
if v, ok := d.GetOk("ids"); ok {
for _, vv := range v.([]interface{}) {
idsMap[Trim(vv.(string))] = Trim(vv.(string))
}
}
var allLoadBalancers []slb.LoadBalancer
request.PageSize = requests.NewInteger(PageSizeLarge)
request.PageNumber = requests.NewInteger(1)
for {
raw, err := client.WithSlbClient(func(slbClient *slb.Client) (interface{}, error) {
return slbClient.DescribeLoadBalancers(request)
})
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
bresponse, ok := raw.(*slb.DescribeLoadBalancersResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_slb", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
if len(bresponse.LoadBalancers.LoadBalancer) < 1 {
break
}
log.Printf("sss %s", raw)
err = json.Unmarshal(bresponse.BaseResponse.GetHttpContentBytes(), bresponse)
if err != nil {
return errmsgs.WrapError(err)
}
allLoadBalancers = append(allLoadBalancers, bresponse.LoadBalancers.LoadBalancer...)
if len(bresponse.LoadBalancers.LoadBalancer) < PageSizeLarge {
break
}
page, err := getNextpageNumber(request.PageNumber)
if err != nil {
return errmsgs.WrapError(err)
}
request.PageNumber = page
}
var filteredLoadBalancersTemp []slb.LoadBalancer
nameRegex, ok := d.GetOk("name_regex")
if (ok && nameRegex.(string) != "") || (len(idsMap) > 0) {
var r *regexp.Regexp
if nameRegex != "" {
r = regexp.MustCompile(nameRegex.(string))
}
for _, balancer := range allLoadBalancers {
if r != nil && !r.MatchString(balancer.LoadBalancerName) {
continue
}
if len(idsMap) > 0 {
if _, ok := idsMap[balancer.LoadBalancerId]; !ok {
continue
}
}
filteredLoadBalancersTemp = append(filteredLoadBalancersTemp, balancer)
}
} else {
filteredLoadBalancersTemp = allLoadBalancers
}
return slbsDescriptionAttributes(d, filteredLoadBalancersTemp, slbService)
}