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