Skip to content

Commit 419bbb4

Browse files
tongyimingmikatong
andauthored
fix cvm data disks (#1985)
* fix cvm data disks * add changelog --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent ff7df9c commit 419bbb4

File tree

3 files changed

+84
-11
lines changed

3 files changed

+84
-11
lines changed

.changelog/1985.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
```release-note:bug
2+
resource/tencentcloud_instance: fix order `data_disks`
3+
```
4+

tencentcloud/resource_tc_instance.go

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -958,10 +958,14 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
958958
_ = d.Set("tags", tags)
959959

960960
//set data_disks
961+
var hasDataDisks, isCombineDataDisks bool
961962
dataDiskList := make([]map[string]interface{}, 0, len(instance.DataDisks))
962963
diskSizeMap := map[string]*uint64{}
963964
diskOrderMap := make(map[string]int)
964965

966+
if _, ok := d.GetOk("data_disks"); ok {
967+
hasDataDisks = true
968+
}
965969
if len(instance.DataDisks) > 0 {
966970
var diskIds []*string
967971
for i := range instance.DataDisks {
@@ -987,13 +991,16 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
987991
return resource.RetryableError(fmt.Errorf("data_disk[%d] is expending", i))
988992
}
989993
diskSizeMap[*disk.DiskId] = disk.DiskSize
990-
items := strings.Split(*disk.DiskName, "_")
991-
diskOrder := items[len(items)-1]
992-
diskOrderInt, err := strconv.Atoi(diskOrder)
993-
if err != nil {
994-
return resource.NonRetryableError(err)
994+
if hasDataDisks {
995+
items := strings.Split(*disk.DiskName, "_")
996+
diskOrder := items[len(items)-1]
997+
diskOrderInt, err := strconv.Atoi(diskOrder)
998+
if err != nil {
999+
isCombineDataDisks = true
1000+
continue
1001+
}
1002+
diskOrderMap[*disk.DiskId] = diskOrderInt
9951003
}
996-
diskOrderMap[*disk.DiskId] = diskOrderInt
9971004
}
9981005
return nil
9991006
})
@@ -1016,11 +1023,13 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
10161023
dataDisk["throughput_performance"] = disk.ThroughputPerformance
10171024
dataDiskList = append(dataDiskList, dataDisk)
10181025
}
1019-
sort.SliceStable(dataDiskList, func(idx1, idx2 int) bool {
1020-
dataDiskIdIdx1 := *dataDiskList[idx1]["data_disk_id"].(*string)
1021-
dataDiskIdIdx2 := *dataDiskList[idx2]["data_disk_id"].(*string)
1022-
return diskOrderMap[dataDiskIdIdx1] < diskOrderMap[dataDiskIdIdx2]
1023-
})
1026+
if hasDataDisks && !isCombineDataDisks {
1027+
sort.SliceStable(dataDiskList, func(idx1, idx2 int) bool {
1028+
dataDiskIdIdx1 := *dataDiskList[idx1]["data_disk_id"].(*string)
1029+
dataDiskIdIdx2 := *dataDiskList[idx2]["data_disk_id"].(*string)
1030+
return diskOrderMap[dataDiskIdIdx1] < diskOrderMap[dataDiskIdIdx2]
1031+
})
1032+
}
10241033
_ = d.Set("data_disks", dataDiskList)
10251034

10261035
if len(instance.PrivateIpAddresses) > 0 {

tencentcloud/resource_tc_instance_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,28 @@ func TestAccTencentCloudInstanceResource_DataDiskOrder(t *testing.T) {
589589
})
590590
}
591591

592+
func TestAccTencentCloudInstanceResource_DataDiskByCbs(t *testing.T) {
593+
t.Parallel()
594+
595+
id := "tencentcloud_instance.cvm_add_data_disk_by_cbs"
596+
resource.Test(t, resource.TestCase{
597+
PreCheck: func() { testAccPreCheck(t) },
598+
IDRefreshName: id,
599+
Providers: testAccProviders,
600+
CheckDestroy: testAccCheckInstanceDestroy,
601+
Steps: []resource.TestStep{
602+
{
603+
PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) },
604+
Config: testAccTencentCloudInstanceAddDataDiskByCbs,
605+
Check: resource.ComposeTestCheckFunc(
606+
testAccCheckTencentCloudDataSourceID(id),
607+
testAccCheckTencentCloudInstanceExists(id),
608+
),
609+
},
610+
},
611+
})
612+
}
613+
592614
func TestAccTencentCloudNeedFixInstancePostpaidToPrepaid(t *testing.T) {
593615

594616
id := "tencentcloud_instance.foo"
@@ -764,6 +786,44 @@ resource "tencentcloud_instance" "foo" {
764786
}
765787
`
766788

789+
const testAccTencentCloudInstanceAddDataDiskByCbs = defaultInstanceVariable + `
790+
resource "tencentcloud_instance" "cvm_add_data_disk_by_cbs" {
791+
instance_name = "cvm-add-data-disk-by-cbs"
792+
availability_zone = var.availability_cvm_zone
793+
image_id = data.tencentcloud_images.default.images.0.image_id
794+
instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type
795+
vpc_id = var.cvm_vpc_id
796+
subnet_id = var.cvm_subnet_id
797+
system_disk_type = "CLOUD_PREMIUM"
798+
project_id = 0
799+
}
800+
801+
resource "tencentcloud_cbs_storage" "cbs_disk1" {
802+
storage_name = "cbs_disk1"
803+
storage_type = "CLOUD_SSD"
804+
storage_size = 200
805+
availability_zone = var.availability_cvm_zone
806+
project_id = 0
807+
encrypt = false
808+
}
809+
resource "tencentcloud_cbs_storage" "cbs_disk2" {
810+
storage_name = "cbs_disk2"
811+
storage_type = "CLOUD_SSD"
812+
storage_size = 100
813+
availability_zone = var.availability_cvm_zone
814+
project_id = 0
815+
encrypt = false
816+
}
817+
resource "tencentcloud_cbs_storage_attachment" "attachment_cbs_disk1" {
818+
storage_id = tencentcloud_cbs_storage.cbs_disk1.id
819+
instance_id = tencentcloud_instance.cvm_add_data_disk_by_cbs.id
820+
}
821+
resource "tencentcloud_cbs_storage_attachment" "attachment_cbs_disk2" {
822+
storage_id = tencentcloud_cbs_storage.cbs_disk2.id
823+
instance_id = tencentcloud_instance.cvm_add_data_disk_by_cbs.id
824+
}
825+
`
826+
767827
const testAccTencentCloudInstancePostPaid = `
768828
data "tencentcloud_instance_types" "default" {
769829
filter {

0 commit comments

Comments
 (0)