Skip to content

Commit 839000b

Browse files
authored
Feat/clb support parallel (#2467)
* feat: support retry attach * feat: support retry attach * feat: support retry attach * feat: support retry attach * fix: e2e
1 parent c987bbb commit 839000b

File tree

6 files changed

+135
-17
lines changed

6 files changed

+135
-17
lines changed

.changelog/2467.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/target_group_attachments: support parallel
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_clb_listener_rule: support parallel
7+
```

tencentcloud/acctest/basic.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ const (
5252

5353
// clb
5454
const (
55-
DefaultSshCertificate = "vYSQkJ3K"
56-
DefaultSshCertificateB = "vYVlNIhW"
55+
DefaultSshCertificate = "Bg9KzlUq"
56+
DefaultSshCertificateB = "Bg9JKn5V"
5757
)
5858

5959
const (

tencentcloud/services/clb/resource_tc_clb_listener_rule.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte
283283
requestId := ""
284284
response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateRule(request)
285285
if e != nil {
286+
if err := processRetryErrMsg(e); err != nil {
287+
return err
288+
}
286289
return tccommon.RetryError(e)
287290
} else {
288291
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
@@ -610,6 +613,9 @@ func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta inte
610613
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
611614
response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyDomainAttributes(domainRequest)
612615
if e != nil {
616+
if err := processRetryErrMsg(e); err != nil {
617+
return err
618+
}
613619
return tccommon.RetryError(e)
614620
} else {
615621
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
@@ -656,6 +662,9 @@ func resourceTencentCloudClbListenerRuleDelete(d *schema.ResourceData, meta inte
656662
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
657663
e := clbService.DeleteRuleById(ctx, clbId, listenerId, locationId)
658664
if e != nil {
665+
if err := processRetryErrMsg(e); err != nil {
666+
return err
667+
}
659668
return tccommon.RetryError(e)
660669
}
661670
return nil

tencentcloud/services/clb/resource_tc_clb_target_group_attachments.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,12 @@ func resourceTencentCloudClbTargetGroupAttachmentsCreate(d *schema.ResourceData,
139139
}
140140

141141
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
142-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().AssociateTargetGroups(request)
143-
if e != nil {
144-
return tccommon.RetryError(e, tccommon.InternalError)
142+
result, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().AssociateTargetGroups(request)
143+
if err != nil {
144+
if e := processRetryErrMsg(err); e != nil {
145+
return e
146+
}
147+
return tccommon.RetryError(err, tccommon.InternalError)
145148
} else {
146149
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
147150
logId, request.GetAction(), result.ToJsonString(), result.ToJsonString())
@@ -235,6 +238,9 @@ func resourceTencentCloudClbTargetGroupAttachmentsDelete(d *schema.ResourceData,
235238
ratelimit.Check(request.GetAction())
236239
result, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DisassociateTargetGroups(request)
237240
if err != nil {
241+
if e := processRetryErrMsg(err); e != nil {
242+
return e
243+
}
238244
return tccommon.RetryError(err, tccommon.InternalError)
239245
} else {
240246
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",

tencentcloud/services/clb/resource_tc_clb_target_group_attachments_test.go

Lines changed: 90 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,33 @@ func TestAccTencentCloudClbTargetGroupAttachmentsResource_target(t *testing.T) {
4646
})
4747
}
4848

49+
func TestAccTencentCloudClbTargetGroupAttachmentsResource_sync(t *testing.T) {
50+
t.Parallel()
51+
resource.Test(t, resource.TestCase{
52+
PreCheck: func() {
53+
tcacctest.AccPreCheck(t)
54+
},
55+
Providers: tcacctest.AccProviders,
56+
Steps: []resource.TestStep{
57+
{
58+
Config: testAccClbTargetGroupAttachmentsParallel,
59+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_clb_target_group_attachments.target_group_attachments", "id"),
60+
resource.TestCheckResourceAttrSet("tencentcloud_clb_target_group_attachments.target_group_attachments", "target_group_id"),
61+
resource.TestCheckResourceAttrSet("tencentcloud_clb_target_group_attachments.target_group_attachments", "associations.#"),
62+
resource.TestCheckResourceAttrSet("tencentcloud_clb_target_group_attachments.target_group_attachments1", "target_group_id"),
63+
resource.TestCheckResourceAttrSet("tencentcloud_clb_target_group_attachments.target_group_attachments1", "associations.#"),
64+
),
65+
},
66+
},
67+
})
68+
}
69+
4970
const testAccClbTargetGroupAttachments = `
5071
5172
resource "tencentcloud_clb_instance" "clb_basic" {
5273
network_type = "OPEN"
5374
clb_name = "tf_test_clb_attach_example"
54-
vpc_id = "vpc-5kwngvex"
75+
vpc_id = "vpc-efc9vddt"
5576
}
5677
5778
resource "tencentcloud_clb_listener" "public_listeners" {
@@ -103,22 +124,22 @@ resource "tencentcloud_clb_target_group_attachments" "target_group_attachments"
103124
load_balancer_id = tencentcloud_clb_instance.clb_basic.id
104125
associations {
105126
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
106-
target_group_id = "lbtg-88ace9ra"
127+
target_group_id = "lbtg-f0od5ack"
107128
location_id = tencentcloud_clb_listener_rule.rule_basic.rule_id
108129
}
109130
associations {
110131
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
111-
target_group_id = "lbtg-ldkb0xxg"
132+
target_group_id = "lbtg-h7lzmdts"
112133
location_id = tencentcloud_clb_listener_rule.rule_basic2.rule_id
113134
}
114135
associations {
115136
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
116-
target_group_id = "lbtg-7sgej5ey"
137+
target_group_id = "lbtg-577temh4"
117138
location_id = tencentcloud_clb_listener_rule.rule_basic3.rule_id
118139
}
119140
associations {
120141
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
121-
target_group_id = "lbtg-og25rlfk"
142+
target_group_id = "lbtg-119vqig8"
122143
location_id = tencentcloud_clb_listener_rule.rule_basic4.rule_id
123144
}
124145
depends_on = [tencentcloud_clb_listener.public_listeners,
@@ -134,27 +155,27 @@ const testAccClbTargetGroupAttachmentsTarget = `
134155
resource "tencentcloud_clb_instance" "clb_basic" {
135156
network_type = "OPEN"
136157
clb_name = "tf_test_clb_attach_1"
137-
vpc_id = "vpc-5kwngvex"
158+
vpc_id = "vpc-efc9vddt"
138159
}
139160
resource "tencentcloud_clb_instance" "clb_basic2" {
140161
network_type = "OPEN"
141162
clb_name = "tf_test_clb_attach_2"
142-
vpc_id = "vpc-5kwngvex"
163+
vpc_id = "vpc-efc9vddt"
143164
}
144165
resource "tencentcloud_clb_instance" "clb_basic3" {
145166
network_type = "OPEN"
146167
clb_name = "tf_test_clb_attach_3"
147-
vpc_id = "vpc-5kwngvex"
168+
vpc_id = "vpc-efc9vddt"
148169
}
149170
resource "tencentcloud_clb_instance" "clb_basic4" {
150171
network_type = "OPEN"
151172
clb_name = "tf_test_clb_attach_4"
152-
vpc_id = "vpc-5kwngvex"
173+
vpc_id = "vpc-efc9vddt"
153174
}
154175
resource "tencentcloud_clb_instance" "clb_basic5" {
155176
network_type = "OPEN"
156177
clb_name = "tf_test_clb_attach_5"
157-
vpc_id = "vpc-5kwngvex"
178+
vpc_id = "vpc-efc9vddt"
158179
}
159180
160181
@@ -234,7 +255,7 @@ resource "tencentcloud_clb_listener_rule" "rule_basic5" {
234255
target_type = "TARGETGROUP"
235256
}
236257
resource "tencentcloud_clb_target_group_attachments" "target_group_attachments" {
237-
target_group_id = "lbtg-dajxvv8q"
258+
target_group_id = "lbtg-nxd0dmcm"
238259
associations {
239260
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
240261
load_balancer_id = tencentcloud_clb_instance.clb_basic.id
@@ -274,3 +295,61 @@ resource "tencentcloud_clb_target_group_attachments" "target_group_attachments"
274295
tencentcloud_clb_listener_rule.rule_basic]
275296
}
276297
`
298+
const testAccClbTargetGroupAttachmentsParallel = `
299+
resource "tencentcloud_clb_instance" "clb_basic" {
300+
network_type = "OPEN"
301+
clb_name = "tf_test_clb_attach_1"
302+
vpc_id = "vpc-efc9vddt"
303+
}
304+
resource "tencentcloud_clb_listener" "public_listeners" {
305+
clb_id = tencentcloud_clb_instance.clb_basic.id
306+
protocol = "HTTP"
307+
port = "8090"
308+
listener_name = "iac-test-attach"
309+
}
310+
resource "tencentcloud_clb_listener" "public_listeners2" {
311+
clb_id = tencentcloud_clb_instance.clb_basic.id
312+
protocol = "HTTP"
313+
port = "8099"
314+
listener_name = "iac-test-attach-2"
315+
}
316+
resource "tencentcloud_clb_listener_rule" "rule_basic" {
317+
clb_id = tencentcloud_clb_instance.clb_basic.id
318+
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
319+
domain = "abc.com"
320+
url = "/"
321+
session_expire_time = 30
322+
scheduler = "WRR"
323+
target_type = "TARGETGROUP"
324+
}
325+
resource "tencentcloud_clb_listener_rule" "rule_basic2" {
326+
clb_id = tencentcloud_clb_instance.clb_basic.id
327+
listener_id = tencentcloud_clb_listener.public_listeners2.listener_id
328+
domain = "baidu.com"
329+
url = "/"
330+
session_expire_time = 30
331+
scheduler = "WRR"
332+
target_type = "TARGETGROUP"
333+
}
334+
resource "tencentcloud_clb_target_group_attachments" "target_group_attachments" {
335+
target_group_id = "lbtg-fa1l7oh2"
336+
associations {
337+
load_balancer_id = tencentcloud_clb_instance.clb_basic.id
338+
listener_id = tencentcloud_clb_listener.public_listeners.listener_id
339+
location_id=tencentcloud_clb_listener_rule.rule_basic.rule_id
340+
}
341+
depends_on = [tencentcloud_clb_listener_rule.rule_basic,
342+
tencentcloud_clb_listener_rule.rule_basic,
343+
tencentcloud_clb_listener.public_listeners,
344+
tencentcloud_clb_listener.public_listeners2]
345+
}
346+
resource "tencentcloud_clb_target_group_attachments" "target_group_attachments1" {
347+
target_group_id = "lbtg-aw5hicve"
348+
associations {
349+
load_balancer_id = tencentcloud_clb_instance.clb_basic.id
350+
listener_id = tencentcloud_clb_listener.public_listeners2.listener_id
351+
location_id=tencentcloud_clb_listener_rule.rule_basic2.rule_id
352+
353+
}
354+
}
355+
`

tencentcloud/services/clb/service_tencentcloud_clb.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,8 @@ func (me *ClbService) DeleteRuleById(ctx context.Context, clbId string, listener
392392
ratelimit.Check(request.GetAction())
393393
response, err := me.client.UseClbClient().DeleteRule(request)
394394
if err != nil {
395-
return errors.WithStack(err)
395+
log.Println(errors.WithStack(err).Error())
396+
return err
396397
}
397398
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
398399
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
@@ -1014,6 +1015,22 @@ func checkCertificateInputPara(ctx context.Context, d *schema.ResourceData, meta
10141015
}
10151016
return
10161017
}
1018+
func processRetryErrMsg(err error) *resource.RetryError {
1019+
if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
1020+
for _, msg := range []string{
1021+
"is not in normal status",
1022+
"is not in normal desState",
1023+
"desState is abnormal",
1024+
"des status abnormal",
1025+
"Your task is working",
1026+
} {
1027+
if strings.Contains(e.GetMessage(), msg) {
1028+
return resource.RetryableError(e)
1029+
}
1030+
}
1031+
}
1032+
return nil
1033+
}
10171034

10181035
func waitForTaskFinish(requestId string, meta *clb.Client) (err error) {
10191036
taskQueryRequest := clb.NewDescribeTaskStatusRequest()

0 commit comments

Comments
 (0)