@@ -1558,20 +1558,20 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
1558
1558
}
1559
1559
1560
1560
// 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
+ // }
1575
1575
1576
1576
//check recycling
1577
1577
notExist := false
@@ -1610,6 +1610,101 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
1610
1610
return nil
1611
1611
}
1612
1612
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
+
1613
1708
if ! forceDelete {
1614
1709
return nil
1615
1710
}
@@ -1671,7 +1766,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
1671
1766
return tccommon .RetryError (e , tccommon .InternalError )
1672
1767
}
1673
1768
1674
- if * diskInfo .DiskState != svccbs .CBS_STORAGE_STATUS_UNATTACHED {
1769
+ if * diskInfo .DiskState != svccbs .CBS_STORAGE_STATUS_TORECYCLE {
1675
1770
return resource .RetryableError (fmt .Errorf ("cbs storage status is %s" , * diskInfo .DiskState ))
1676
1771
}
1677
1772
@@ -1697,37 +1792,6 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}
1697
1792
return err
1698
1793
}
1699
1794
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
- }
1731
1795
err = resource .Retry (tccommon .ReadRetryTimeout * 2 , func () * resource.RetryError {
1732
1796
diskInfo , e := cbsService .DescribeDiskById (ctx , diskId )
1733
1797
if e != nil {
0 commit comments