Skip to content

Commit bb27f19

Browse files
authored
fix: modify nat gateway (#2058)
* fix: modify nat gateway * fix: add changelog
1 parent 981cdc1 commit bb27f19

File tree

4 files changed

+58
-12
lines changed

4 files changed

+58
-12
lines changed

.changelog/2058.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_nat_gateway: Optimize execution time
3+
```

tencentcloud/resource_tc_eip.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err
437437
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
438438
errRet := vpcService.DeleteEip(ctx, eipId)
439439
if errRet != nil {
440-
return retryError(errRet, "DesOperation.MutexTaskRunning")
440+
return retryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning")
441441
}
442442
return nil
443443
})
@@ -470,7 +470,7 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err
470470
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
471471
errRet := vpcService.DeleteEip(ctx, eipId)
472472
if errRet != nil {
473-
return retryError(errRet, "DesOperation.MutexTaskRunning")
473+
return retryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning")
474474
}
475475
return nil
476476
})

tencentcloud/resource_tc_nat_gateway.go

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -384,20 +384,31 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface
384384
}
385385

386386
if len(unassignedRequest.PublicIpAddresses) > 0 {
387+
var response *vpc.DisassociateNatGatewayAddressResponseParams
387388
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
388-
e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest)
389+
result, e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest)
389390
if e != nil {
390391
return retryError(e)
391392
}
393+
if result != nil && result.Response != nil {
394+
response = result.Response
395+
}
392396
return nil
393397
})
394398
if err != nil {
395399
log.Printf("[CRITAL]%s modify NAT gateway EIP failed, reason:%s\n", logId, err.Error())
396400
return err
397401
}
402+
403+
if response != nil && response.RequestId != nil {
404+
err = vpcService.DescribeVpcTaskResult(ctx, response.RequestId)
405+
if err != nil {
406+
return err
407+
}
408+
}
398409
}
399410
}
400-
time.Sleep(3 * time.Minute)
411+
401412
//Assign new EIP
402413
if len(newEipSet) > 0 {
403414
assignedRequest := vpc.NewAssociateNatGatewayAddressRequest()
@@ -421,57 +432,88 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface
421432
}
422433
}
423434
if len(assignedRequest.PublicIpAddresses) > 0 {
435+
var response *vpc.AssociateNatGatewayAddressResponseParams
424436
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
425-
_, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest)
437+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest)
426438
if e != nil {
427439
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
428440
logId, assignedRequest.GetAction(), assignedRequest.ToJsonString(), e.Error())
429441
return retryError(e)
430442
}
443+
if result != nil && result.Response != nil {
444+
response = result.Response
445+
}
431446
return nil
432447
})
433448
if err != nil {
434449
log.Printf("[CRITAL]%s modify NAT gateway EIP failed, reason:%s\n", logId, err.Error())
435450
return err
436451
}
452+
453+
if response != nil && response.RequestId != nil {
454+
err = vpcService.DescribeVpcTaskResult(ctx, response.RequestId)
455+
if err != nil {
456+
return err
457+
}
458+
}
437459
}
438460
}
439-
time.Sleep(3 * time.Minute)
461+
440462
if backUpOldIp != "" {
441463
//disassociate one old ip
464+
var response *vpc.DisassociateNatGatewayAddressResponseParams
442465
unassignedRequest := vpc.NewDisassociateNatGatewayAddressRequest()
443466
unassignedRequest.NatGatewayId = &natGatewayId
444467
unassignedRequest.PublicIpAddresses = []*string{&backUpOldIp}
445468
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
446-
e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest)
469+
result, e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest)
447470
if e != nil {
448471
return retryError(e)
449472
}
473+
if result != nil && result.Response != nil {
474+
response = result.Response
475+
}
450476
return nil
451477
})
452478
if err != nil {
453479
log.Printf("[CRITAL]%s modify NAT gateway EIP failed, reason:%s\n", logId, err.Error())
454480
return err
455481
}
482+
if response != nil && response.RequestId != nil {
483+
err = vpcService.DescribeVpcTaskResult(ctx, response.RequestId)
484+
if err != nil {
485+
return err
486+
}
487+
}
456488
}
457489
if backUpNewIp != "" {
458490
//associate one new ip
491+
var response *vpc.AssociateNatGatewayAddressResponseParams
459492
assignedRequest := vpc.NewAssociateNatGatewayAddressRequest()
460493
assignedRequest.NatGatewayId = &natGatewayId
461494
assignedRequest.PublicIpAddresses = []*string{&backUpNewIp}
462495
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
463-
_, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest)
496+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest)
464497
if e != nil {
465498
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
466499
logId, assignedRequest.GetAction(), assignedRequest.ToJsonString(), e.Error())
467500
return retryError(e)
468501
}
502+
if result != nil && result.Response != nil {
503+
response = result.Response
504+
}
469505
return nil
470506
})
471507
if err != nil {
472508
log.Printf("[CRITAL]%s modify NAT gateway EIP failed, reason:%s\n", logId, err.Error())
473509
return err
474510
}
511+
if response != nil && response.RequestId != nil {
512+
err = vpcService.DescribeVpcTaskResult(ctx, response.RequestId)
513+
if err != nil {
514+
return err
515+
}
516+
}
475517
}
476518
}
477519

@@ -493,7 +535,7 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface
493535

494536
d.Partial(false)
495537

496-
return nil
538+
return resourceTencentCloudNatGatewayRead(d, meta)
497539
}
498540

499541
func resourceTencentCloudNatGatewayDelete(d *schema.ResourceData, meta interface{}) error {

tencentcloud/service_tencentcloud_vpc.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2536,7 +2536,7 @@ func (me *VpcService) DeleteNatGateway(ctx context.Context, natGatewayId string)
25362536
return
25372537
}
25382538

2539-
func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (errRet error) {
2539+
func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (result *vpc.DisassociateNatGatewayAddressResponse, errRet error) {
25402540
logId := getLogId(ctx)
25412541
defer func() {
25422542
if errRet != nil {
@@ -2573,7 +2573,7 @@ func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request
25732573
}
25742574

25752575
if len(candidates) == 0 {
2576-
return nil
2576+
return nil, nil
25772577
}
25782578

25792579
request.PublicIpAddresses = candidates
@@ -2589,6 +2589,7 @@ func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request
25892589
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
25902590
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
25912591

2592+
result = response
25922593
return
25932594
}
25942595

@@ -2610,7 +2611,7 @@ func (me *VpcService) UnattachEip(ctx context.Context, eipId string) error {
26102611
request := vpc.NewDisassociateNatGatewayAddressRequest()
26112612
request.NatGatewayId = eip.InstanceId
26122613
request.PublicIpAddresses = []*string{eip.AddressIp}
2613-
err := me.DisassociateNatGatewayAddress(ctx, request)
2614+
_, err := me.DisassociateNatGatewayAddress(ctx, request)
26142615
if err != nil {
26152616
return err
26162617
}

0 commit comments

Comments
 (0)