Skip to content

Commit 48cf2e9

Browse files
authored
add (#3033)
1 parent 7a3f7d1 commit 48cf2e9

File tree

1 file changed

+48
-3
lines changed

1 file changed

+48
-3
lines changed

tencentcloud/services/cvm/resource_tc_instance.go

+48-3
Original file line numberDiff line numberDiff line change
@@ -1010,27 +1010,68 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
10101010
}
10111011

10121012
// set data_disks
1013-
var hasDataDisks, isCombineDataDisks, hasDataDisksName bool
1013+
var hasDataDisks, isCombineDataDisks, hasDataDisksId, hasDataDisksName bool
10141014
dataDiskList := make([]map[string]interface{}, 0, len(instance.DataDisks))
10151015
diskSizeMap := map[string]*uint64{}
10161016
diskOrderMap := make(map[string]int)
1017+
dataDiskIds := make([]*string, 0, len(instance.DataDisks))
1018+
refreshDataDisks := make([]interface{}, 0, len(instance.DataDisks))
10171019

10181020
if v, ok := d.GetOk("data_disks"); ok {
10191021
hasDataDisks = true
1020-
// check has data disk name
1022+
// check has data disk id and name
10211023
dataDisks := v.([]interface{})
10221024
for _, item := range dataDisks {
10231025
value := item.(map[string]interface{})
1026+
if v, ok := value["data_disk_id"]; ok && v != nil {
1027+
diskId := v.(string)
1028+
if diskId != "" {
1029+
dataDiskIds = append(dataDiskIds, &diskId)
1030+
hasDataDisksId = true
1031+
}
1032+
}
1033+
10241034
if v, ok := value["data_disk_name"]; ok && v != nil {
10251035
diskName := v.(string)
10261036
if diskName != "" {
10271037
hasDataDisksName = true
1028-
break
10291038
}
10301039
}
10311040
}
10321041
}
10331042

1043+
// refresh data disk name and size
1044+
if hasDataDisksId && len(dataDiskIds) > 0 {
1045+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
1046+
disks, err := cbsService.DescribeDiskList(ctx, dataDiskIds)
1047+
if err != nil {
1048+
return resource.NonRetryableError(err)
1049+
}
1050+
1051+
if v, ok := d.GetOk("data_disks"); ok {
1052+
dataDisks := v.([]interface{})
1053+
for _, item := range dataDisks {
1054+
value := item.(map[string]interface{})
1055+
for _, item := range disks {
1056+
if value["data_disk_id"].(string) == *item.DiskId {
1057+
value["data_disk_name"] = *item.DiskName
1058+
value["data_disk_size"] = int(*item.DiskSize)
1059+
break
1060+
}
1061+
}
1062+
}
1063+
1064+
refreshDataDisks = dataDisks
1065+
}
1066+
1067+
return nil
1068+
})
1069+
1070+
if err != nil {
1071+
return err
1072+
}
1073+
}
1074+
10341075
// scene with has disks name
10351076
if len(instance.DataDisks) > 0 && !hasDataDisksName {
10361077
var diskIds []*string
@@ -1162,6 +1203,10 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
11621203
// get source disk hash
11631204
if v, ok := d.GetOk("data_disks"); ok {
11641205
dataDisks := v.([]interface{})
1206+
if hasDataDisksId {
1207+
dataDisks = refreshDataDisks
1208+
}
1209+
11651210
for index, item := range dataDisks {
11661211
value := item.(map[string]interface{})
11671212
tmpMap := make(map[string]interface{})

0 commit comments

Comments
 (0)