Skip to content

Commit ad6c4b8

Browse files
committed
fix: clb_attachment add candidates filter into retry func
1 parent ab97e67 commit ad6c4b8

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

tencentcloud/resource_tc_clb_attachment.go

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -275,27 +275,11 @@ func resourceTencentCloudClbServerAttachmentRemove(d *schema.ResourceData, meta
275275
client: meta.(*TencentCloudClient).apiV3Conn,
276276
}
277277

278-
// Destroy CVM instance will dispatch async task to deregister target group from cloudApi backend. Duplicate deregister target groups here will cause Error response.
279-
// If remove diffs created, check existing cvm instance first, filter target groups which already deregister
280-
removeCandidates := make([]interface{}, 0)
281-
existAttachments, err := clbService.DescribeAttachmentByPara(ctx, clbId, listenerId, locationId)
282-
if err != nil {
283-
return err
284-
}
285-
existTargetGroups := existAttachments.Targets
286-
287-
for _, item := range remove {
288-
target := item.(map[string]interface{})
289-
if targetGroupContainsInstance(existTargetGroups, target["instance_id"].(string)) {
290-
removeCandidates = append(removeCandidates, target)
278+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
279+
removeCandidates := getRemoveCandidates(ctx, clbService, clbId, listenerId, locationId, remove)
280+
if len(removeCandidates) == 0 {
281+
return nil
291282
}
292-
}
293-
294-
if len(removeCandidates) == 0 {
295-
return nil
296-
}
297-
298-
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
299283
e := clbService.DeleteAttachmentById(ctx, clbId, listenerId, locationId, removeCandidates)
300284
if e != nil {
301285
return retryError(e)
@@ -464,12 +448,34 @@ func resourceTencentCloudClbServerAttachmentRead(d *schema.ResourceData, meta in
464448
return nil
465449
}
466450

451+
// Destroy CVM instance will dispatch async task to deregister target group from cloudApi backend. Duplicate deregister target groups here will cause Error response.
452+
// If remove diffs created, check existing cvm instance first, filter target groups which already deregister
453+
func getRemoveCandidates(ctx context.Context, clbService ClbService, clbId string, listenerId string, locationId string, remove []interface{}) []interface{} {
454+
removeCandidates := make([]interface{}, 0)
455+
existAttachments, err := clbService.DescribeAttachmentByPara(ctx, clbId, listenerId, locationId)
456+
if err != nil {
457+
return removeCandidates
458+
}
459+
existTargetGroups := existAttachments.Targets
460+
461+
for _, item := range remove {
462+
target := item.(map[string]interface{})
463+
if targetGroupContainsInstance(existTargetGroups, target["instance_id"].(string)) {
464+
removeCandidates = append(removeCandidates, target)
465+
}
466+
}
467+
468+
return removeCandidates
469+
}
470+
467471
func targetGroupContainsInstance(targets []*clb.Backend, instanceId string) (contains bool) {
468472
contains = false
469473
for _, target := range targets {
470474
if instanceId == *target.InstanceId {
475+
log.Printf("[WARN] Instance %s applied.", instanceId)
471476
return true
472477
}
473478
}
479+
log.Printf("[WARN] Instance %s not exist, skip deregister.", instanceId)
474480
return
475-
}
481+
}

tencentcloud/resource_tc_clb_attachment_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func testAccCheckClbServerAttachmentTargetGroups(t *testing.T) {
9797
PreCheck: func() {
9898
testAccPreCheck(t)
9999
},
100-
Providers: testAccProviders,
100+
Providers: testAccProviders,
101101
CheckDestroy: testAccCheckClbServerAttachmentDestroy,
102102
Steps: []resource.TestStep{
103103
{
@@ -348,4 +348,4 @@ resource "tencentcloud_clb_attachment" "foo" {
348348
weight = 10
349349
}
350350
}
351-
`
351+
`

0 commit comments

Comments
 (0)