Skip to content

Commit 440a1be

Browse files
authored
fix(cvm): [116173103] update destroy function (#2784)
* add * add
1 parent 7a275c4 commit 440a1be

File tree

2 files changed

+113
-46
lines changed

2 files changed

+113
-46
lines changed

.changelog/2784.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_instance: update destroy function
3+
```

tencentcloud/services/cvm/resource_tc_instance.go

Lines changed: 110 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,20 +1558,20 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
15581558
}
15591559

15601560
// prepaid need delete again
1561-
if instanceChargeType == CVM_CHARGE_TYPE_PREPAID {
1562-
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1563-
errRet := cvmService.DeleteInstance(ctx, instanceId)
1564-
if errRet != nil {
1565-
return tccommon.RetryError(errRet)
1566-
}
1567-
1568-
return nil
1569-
})
1570-
1571-
if err != nil {
1572-
return err
1573-
}
1574-
}
1561+
//if instanceChargeType == CVM_CHARGE_TYPE_PREPAID {
1562+
// err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1563+
// errRet := cvmService.DeleteInstance(ctx, instanceId)
1564+
// if errRet != nil {
1565+
// return tccommon.RetryError(errRet)
1566+
// }
1567+
//
1568+
// return nil
1569+
// })
1570+
//
1571+
// if err != nil {
1572+
// return err
1573+
// }
1574+
//}
15751575

15761576
//check recycling
15771577
notExist := false
@@ -1610,6 +1610,101 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
16101610
return nil
16111611
}
16121612

1613+
if instanceChargeType == CVM_CHARGE_TYPE_PREPAID {
1614+
if v, ok := d.GetOk("data_disks"); ok {
1615+
dataDisks := v.([]interface{})
1616+
for _, d := range dataDisks {
1617+
value := d.(map[string]interface{})
1618+
diskId := value["data_disk_id"].(string)
1619+
deleteWithInstance := value["delete_with_instance"].(bool)
1620+
if deleteWithInstance {
1621+
cbsService := svccbs.NewCbsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
1622+
err := resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError {
1623+
diskInfo, e := cbsService.DescribeDiskById(ctx, diskId)
1624+
if e != nil {
1625+
return tccommon.RetryError(e, tccommon.InternalError)
1626+
}
1627+
1628+
if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_ATTACHED {
1629+
return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState))
1630+
}
1631+
1632+
return nil
1633+
})
1634+
1635+
if err != nil {
1636+
log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error())
1637+
return err
1638+
}
1639+
1640+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1641+
e := cbsService.DetachDisk(ctx, diskId, instanceId)
1642+
if e != nil {
1643+
return tccommon.RetryError(e, tccommon.InternalError)
1644+
}
1645+
1646+
return nil
1647+
})
1648+
1649+
if err != nil {
1650+
log.Printf("[CRITAL]%s detach cbs failed, reason:%s\n ", logId, err.Error())
1651+
return err
1652+
}
1653+
1654+
err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError {
1655+
diskInfo, e := cbsService.DescribeDiskById(ctx, diskId)
1656+
if e != nil {
1657+
return tccommon.RetryError(e, tccommon.InternalError)
1658+
}
1659+
1660+
if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_UNATTACHED {
1661+
return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState))
1662+
}
1663+
1664+
return nil
1665+
})
1666+
1667+
if err != nil {
1668+
log.Printf("[CRITAL]%s read cbs status failed, reason:%s\n ", logId, err.Error())
1669+
return err
1670+
}
1671+
1672+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1673+
e := cbsService.DeleteDiskById(ctx, diskId)
1674+
if e != nil {
1675+
return tccommon.RetryError(e, tccommon.InternalError)
1676+
}
1677+
1678+
return nil
1679+
})
1680+
1681+
if err != nil {
1682+
log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error())
1683+
return err
1684+
}
1685+
1686+
err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError {
1687+
diskInfo, e := cbsService.DescribeDiskById(ctx, diskId)
1688+
if e != nil {
1689+
return tccommon.RetryError(e, tccommon.InternalError)
1690+
}
1691+
1692+
if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_TORECYCLE {
1693+
return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState))
1694+
}
1695+
1696+
return nil
1697+
})
1698+
1699+
if err != nil {
1700+
log.Printf("[CRITAL]%s read cbs status failed, reason:%s\n ", logId, err.Error())
1701+
return err
1702+
}
1703+
}
1704+
}
1705+
}
1706+
}
1707+
16131708
if !forceDelete {
16141709
return nil
16151710
}
@@ -1671,7 +1766,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
16711766
return tccommon.RetryError(e, tccommon.InternalError)
16721767
}
16731768

1674-
if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_UNATTACHED {
1769+
if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_TORECYCLE {
16751770
return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState))
16761771
}
16771772

@@ -1697,37 +1792,6 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
16971792
return err
16981793
}
16991794

1700-
err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError {
1701-
diskInfo, e := cbsService.DescribeDiskById(ctx, diskId)
1702-
if e != nil {
1703-
return tccommon.RetryError(e, tccommon.InternalError)
1704-
}
1705-
1706-
if *diskInfo.DiskState == svccbs.CBS_STORAGE_STATUS_TORECYCLE {
1707-
return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState))
1708-
}
1709-
1710-
return nil
1711-
})
1712-
1713-
if err != nil {
1714-
log.Printf("[CRITAL]%s read cbs status failed, reason:%s\n ", logId, err.Error())
1715-
return err
1716-
}
1717-
1718-
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1719-
e := cbsService.DeleteDiskById(ctx, diskId)
1720-
if e != nil {
1721-
return tccommon.RetryError(e, tccommon.InternalError)
1722-
}
1723-
1724-
return nil
1725-
})
1726-
1727-
if err != nil {
1728-
log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error())
1729-
return err
1730-
}
17311795
err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError {
17321796
diskInfo, e := cbsService.DescribeDiskById(ctx, diskId)
17331797
if e != nil {

0 commit comments

Comments
 (0)