@@ -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