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