Skip to content

Commit 05efc8d

Browse files
tongyimingmikatong
andauthored
wait cvm private ip release (#2503)
* wait cvm private ip release * add changelog * update --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent 0903cad commit 05efc8d

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

.changelog/2503.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_instance: wait cvm private ip release when instance destroyed
3+
```
4+

tencentcloud/services/cvm/resource_tc_instance.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
1414
svccbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs"
1515
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
16+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc"
1617

1718
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1819
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -1415,7 +1416,12 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
14151416
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
14161417
}
14171418

1418-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1419+
instance, err := cvmService.DescribeInstanceById(ctx, instanceId)
1420+
if err != nil {
1421+
return err
1422+
}
1423+
1424+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
14191425
errRet := cvmService.DeleteInstance(ctx, instanceId)
14201426
if errRet != nil {
14211427
return tccommon.RetryError(errRet)
@@ -1449,6 +1455,29 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
14491455
return err
14501456
}
14511457

1458+
// wait ip release
1459+
if len(instance.PrivateIpAddresses) > 0 {
1460+
vpcService := vpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
1461+
params := make(map[string]interface{})
1462+
params["VpcId"] = instance.VirtualPrivateCloud.VpcId
1463+
params["SubnetId"] = instance.VirtualPrivateCloud.SubnetId
1464+
params["IpAddresses"] = instance.PrivateIpAddresses
1465+
err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError {
1466+
usedIpAddress, errRet := vpcService.DescribeVpcUsedIpAddressByFilter(ctx, params)
1467+
if errRet != nil {
1468+
return tccommon.RetryError(errRet, tccommon.InternalError)
1469+
}
1470+
if len(usedIpAddress) > 0 {
1471+
return resource.RetryableError(fmt.Errorf("wait cvm private ip release..."))
1472+
}
1473+
1474+
return nil
1475+
})
1476+
if err != nil {
1477+
return err
1478+
}
1479+
}
1480+
14521481
if notExist || !forceDelete {
14531482
return nil
14541483
}

0 commit comments

Comments
 (0)