@@ -1010,27 +1010,68 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
1010
1010
}
1011
1011
1012
1012
// set data_disks
1013
- var hasDataDisks , isCombineDataDisks , hasDataDisksName bool
1013
+ var hasDataDisks , isCombineDataDisks , hasDataDisksId , hasDataDisksName bool
1014
1014
dataDiskList := make ([]map [string ]interface {}, 0 , len (instance .DataDisks ))
1015
1015
diskSizeMap := map [string ]* uint64 {}
1016
1016
diskOrderMap := make (map [string ]int )
1017
+ dataDiskIds := make ([]* string , 0 , len (instance .DataDisks ))
1018
+ refreshDataDisks := make ([]interface {}, 0 , len (instance .DataDisks ))
1017
1019
1018
1020
if v , ok := d .GetOk ("data_disks" ); ok {
1019
1021
hasDataDisks = true
1020
- // check has data disk name
1022
+ // check has data disk id and name
1021
1023
dataDisks := v .([]interface {})
1022
1024
for _ , item := range dataDisks {
1023
1025
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
+
1024
1034
if v , ok := value ["data_disk_name" ]; ok && v != nil {
1025
1035
diskName := v .(string )
1026
1036
if diskName != "" {
1027
1037
hasDataDisksName = true
1028
- break
1029
1038
}
1030
1039
}
1031
1040
}
1032
1041
}
1033
1042
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
+
1034
1075
// scene with has disks name
1035
1076
if len (instance .DataDisks ) > 0 && ! hasDataDisksName {
1036
1077
var diskIds []* string
@@ -1162,6 +1203,10 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
1162
1203
// get source disk hash
1163
1204
if v , ok := d .GetOk ("data_disks" ); ok {
1164
1205
dataDisks := v .([]interface {})
1206
+ if hasDataDisksId {
1207
+ dataDisks = refreshDataDisks
1208
+ }
1209
+
1165
1210
for index , item := range dataDisks {
1166
1211
value := item .(map [string ]interface {})
1167
1212
tmpMap := make (map [string ]interface {})
0 commit comments