Skip to content

Commit 3ea61e7

Browse files
authored
fix(clb): [124458743] tencentcloud_clb_instance update create function logic (#3391)
* add * add
1 parent 6718194 commit 3ea61e7

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

.changelog/3391.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_clb_instance: update create function logic
3+
```

tencentcloud/services/clb/resource_tc_clb_instance.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,17 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac
428428
}
429429
}
430430

431-
clbId := ""
432431
var response *clb.CreateLoadBalancerResponse
433432
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
434433
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateLoadBalancer(request)
435434
if e != nil {
436435
return tccommon.RetryError(e)
437436
} else {
438-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
439-
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
440-
requestId := *result.Response.RequestId
441-
retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient())
442-
if retryErr != nil {
443-
return tccommon.RetryError(errors.WithStack(retryErr))
444-
}
437+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
438+
}
439+
440+
if result == nil || result.Response == nil || result.Response.RequestId == nil {
441+
return resource.NonRetryableError(fmt.Errorf("Create CLB instance failed, Response is nil."))
445442
}
446443

447444
response = result
@@ -453,12 +450,18 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac
453450
return err
454451
}
455452

456-
if len(response.Response.LoadBalancerIds) < 1 {
453+
// wait
454+
requestId := *response.Response.RequestId
455+
clbId, err := waitForTaskFinishGetID(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient())
456+
if err != nil {
457+
return err
458+
}
459+
460+
if clbId == "" {
457461
return fmt.Errorf("[CHECK][CLB instance][Create] check: response error, load balancer id is nil")
458462
}
459463

460-
d.SetId(*response.Response.LoadBalancerIds[0])
461-
clbId = *response.Response.LoadBalancerIds[0]
464+
d.SetId(clbId)
462465

463466
if v, ok := d.GetOk("security_groups"); ok {
464467
sgRequest := clb.NewSetLoadBalancerSecurityGroupsRequest()

tencentcloud/services/clb/service_tencentcloud_clb.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,6 +1156,35 @@ func waitForTaskFinish(requestId string, meta *clb.Client) (err error) {
11561156
return
11571157
}
11581158

1159+
func waitForTaskFinishGetID(requestId string, meta *clb.Client) (clbID string, err error) {
1160+
request := clb.NewDescribeTaskStatusRequest()
1161+
request.TaskId = &requestId
1162+
err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError {
1163+
result, e := meta.DescribeTaskStatus(request)
1164+
if e != nil {
1165+
return resource.NonRetryableError(errors.WithStack(e))
1166+
}
1167+
1168+
if result == nil || result.Response == nil {
1169+
return resource.NonRetryableError(fmt.Errorf("Describe task status failed, Response is nil."))
1170+
}
1171+
1172+
if *result.Response.Status == int64(CLB_TASK_EXPANDING) {
1173+
return resource.RetryableError(errors.WithStack(fmt.Errorf("CLB task status is %d(expanding), requestId is %s", *result.Response.Status, *result.Response.RequestId)))
1174+
} else if *result.Response.Status == int64(CLB_TASK_FAIL) {
1175+
return resource.NonRetryableError(errors.WithStack(fmt.Errorf("CLB task status is %d(failed), requestId is %s", *result.Response.Status, *result.Response.RequestId)))
1176+
}
1177+
1178+
if *result.Response.Status == CLB_TASK_SUCCESS && len(result.Response.LoadBalancerIds) == 1 {
1179+
clbID = *result.Response.LoadBalancerIds[0]
1180+
}
1181+
1182+
return nil
1183+
})
1184+
1185+
return
1186+
}
1187+
11591188
func flattenBackendList(list []*clb.Backend) (mapping []map[string]interface{}) {
11601189
result := make([]map[string]interface{}, 0, len(list))
11611190
for i := range list {

0 commit comments

Comments
 (0)