@@ -154,6 +154,60 @@ the instance.`,
154
154
MaxItems : 1 ,
155
155
Elem : & schema.Resource {
156
156
Schema : map [string ]* schema.Schema {
157
+ "asymmetric_autoscaling_options" : {
158
+ Type : schema .TypeList ,
159
+ Optional : true ,
160
+ Description : `Asymmetric autoscaling options for specific replicas.` ,
161
+ Elem : & schema.Resource {
162
+ Schema : map [string ]* schema.Schema {
163
+ "overrides" : {
164
+ Type : schema .TypeList ,
165
+ Required : true ,
166
+ Description : `A nested object resource` ,
167
+ MaxItems : 1 ,
168
+ Elem : & schema.Resource {
169
+ Schema : map [string ]* schema.Schema {
170
+ "autoscaling_limits" : {
171
+ Type : schema .TypeList ,
172
+ Required : true ,
173
+ Description : `A nested object resource` ,
174
+ MaxItems : 1 ,
175
+ Elem : & schema.Resource {
176
+ Schema : map [string ]* schema.Schema {
177
+ "max_nodes" : {
178
+ Type : schema .TypeInt ,
179
+ Required : true ,
180
+ Description : `The maximum number of nodes for this specific replica.` ,
181
+ },
182
+ "min_nodes" : {
183
+ Type : schema .TypeInt ,
184
+ Required : true ,
185
+ Description : `The minimum number of nodes for this specific replica.` ,
186
+ },
187
+ },
188
+ },
189
+ },
190
+ },
191
+ },
192
+ },
193
+ "replica_selection" : {
194
+ Type : schema .TypeList ,
195
+ Required : true ,
196
+ Description : `A nested object resource` ,
197
+ MaxItems : 1 ,
198
+ Elem : & schema.Resource {
199
+ Schema : map [string ]* schema.Schema {
200
+ "location" : {
201
+ Type : schema .TypeString ,
202
+ Required : true ,
203
+ Description : `The location of the replica to apply asymmetric autoscaling options.` ,
204
+ },
205
+ },
206
+ },
207
+ },
208
+ },
209
+ },
210
+ },
157
211
"autoscaling_limits" : {
158
212
Type : schema .TypeList ,
159
213
Optional : true ,
@@ -829,6 +883,8 @@ func flattenSpannerInstanceAutoscalingConfig(v interface{}, d *schema.ResourceDa
829
883
flattenSpannerInstanceAutoscalingConfigAutoscalingLimits (original ["autoscalingLimits" ], d , config )
830
884
transformed ["autoscaling_targets" ] =
831
885
flattenSpannerInstanceAutoscalingConfigAutoscalingTargets (original ["autoscalingTargets" ], d , config )
886
+ transformed ["asymmetric_autoscaling_options" ] =
887
+ flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptions (original ["asymmetricAutoscalingOptions" ], d , config )
832
888
return []interface {}{transformed }
833
889
}
834
890
func flattenSpannerInstanceAutoscalingConfigAutoscalingLimits (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
@@ -967,6 +1023,104 @@ func flattenSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilization
967
1023
return v // let terraform core handle it otherwise
968
1024
}
969
1025
1026
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptions (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1027
+ if v == nil {
1028
+ return v
1029
+ }
1030
+ l := v .([]interface {})
1031
+ transformed := make ([]interface {}, 0 , len (l ))
1032
+ for _ , raw := range l {
1033
+ original := raw .(map [string ]interface {})
1034
+ if len (original ) < 1 {
1035
+ // Do not include empty json objects coming back from the api
1036
+ continue
1037
+ }
1038
+ transformed = append (transformed , map [string ]interface {}{
1039
+ "replica_selection" : flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelection (original ["replicaSelection" ], d , config ),
1040
+ "overrides" : flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverrides (original ["overrides" ], d , config ),
1041
+ })
1042
+ }
1043
+ return transformed
1044
+ }
1045
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelection (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1046
+ if v == nil {
1047
+ return nil
1048
+ }
1049
+ original := v .(map [string ]interface {})
1050
+ if len (original ) == 0 {
1051
+ return nil
1052
+ }
1053
+ transformed := make (map [string ]interface {})
1054
+ transformed ["location" ] =
1055
+ flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelectionLocation (original ["location" ], d , config )
1056
+ return []interface {}{transformed }
1057
+ }
1058
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelectionLocation (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1059
+ return v
1060
+ }
1061
+
1062
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverrides (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1063
+ if v == nil {
1064
+ return nil
1065
+ }
1066
+ original := v .(map [string ]interface {})
1067
+ if len (original ) == 0 {
1068
+ return nil
1069
+ }
1070
+ transformed := make (map [string ]interface {})
1071
+ transformed ["autoscaling_limits" ] =
1072
+ flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimits (original ["autoscalingLimits" ], d , config )
1073
+ return []interface {}{transformed }
1074
+ }
1075
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimits (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1076
+ if v == nil {
1077
+ return nil
1078
+ }
1079
+ original := v .(map [string ]interface {})
1080
+ if len (original ) == 0 {
1081
+ return nil
1082
+ }
1083
+ transformed := make (map [string ]interface {})
1084
+ transformed ["min_nodes" ] =
1085
+ flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMinNodes (original ["minNodes" ], d , config )
1086
+ transformed ["max_nodes" ] =
1087
+ flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMaxNodes (original ["maxNodes" ], d , config )
1088
+ return []interface {}{transformed }
1089
+ }
1090
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMinNodes (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1091
+ // Handles the string fixed64 format
1092
+ if strVal , ok := v .(string ); ok {
1093
+ if intVal , err := tpgresource .StringToFixed64 (strVal ); err == nil {
1094
+ return intVal
1095
+ }
1096
+ }
1097
+
1098
+ // number values are represented as float64
1099
+ if floatVal , ok := v .(float64 ); ok {
1100
+ intVal := int (floatVal )
1101
+ return intVal
1102
+ }
1103
+
1104
+ return v // let terraform core handle it otherwise
1105
+ }
1106
+
1107
+ func flattenSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMaxNodes (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
1108
+ // Handles the string fixed64 format
1109
+ if strVal , ok := v .(string ); ok {
1110
+ if intVal , err := tpgresource .StringToFixed64 (strVal ); err == nil {
1111
+ return intVal
1112
+ }
1113
+ }
1114
+
1115
+ // number values are represented as float64
1116
+ if floatVal , ok := v .(float64 ); ok {
1117
+ intVal := int (floatVal )
1118
+ return intVal
1119
+ }
1120
+
1121
+ return v // let terraform core handle it otherwise
1122
+ }
1123
+
970
1124
func flattenSpannerInstanceEdition (v interface {}, d * schema.ResourceData , config * transport_tpg.Config ) interface {} {
971
1125
return v
972
1126
}
@@ -1043,6 +1197,13 @@ func expandSpannerInstanceAutoscalingConfig(v interface{}, d tpgresource.Terrafo
1043
1197
transformed ["autoscalingTargets" ] = transformedAutoscalingTargets
1044
1198
}
1045
1199
1200
+ transformedAsymmetricAutoscalingOptions , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptions (original ["asymmetric_autoscaling_options" ], d , config )
1201
+ if err != nil {
1202
+ return nil , err
1203
+ } else if val := reflect .ValueOf (transformedAsymmetricAutoscalingOptions ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1204
+ transformed ["asymmetricAutoscalingOptions" ] = transformedAsymmetricAutoscalingOptions
1205
+ }
1206
+
1046
1207
return transformed , nil
1047
1208
}
1048
1209
@@ -1136,6 +1297,111 @@ func expandSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilizationP
1136
1297
return v , nil
1137
1298
}
1138
1299
1300
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptions (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1301
+ l := v .([]interface {})
1302
+ req := make ([]interface {}, 0 , len (l ))
1303
+ for _ , raw := range l {
1304
+ if raw == nil {
1305
+ continue
1306
+ }
1307
+ original := raw .(map [string ]interface {})
1308
+ transformed := make (map [string ]interface {})
1309
+
1310
+ transformedReplicaSelection , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelection (original ["replica_selection" ], d , config )
1311
+ if err != nil {
1312
+ return nil , err
1313
+ } else if val := reflect .ValueOf (transformedReplicaSelection ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1314
+ transformed ["replicaSelection" ] = transformedReplicaSelection
1315
+ }
1316
+
1317
+ transformedOverrides , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverrides (original ["overrides" ], d , config )
1318
+ if err != nil {
1319
+ return nil , err
1320
+ } else if val := reflect .ValueOf (transformedOverrides ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1321
+ transformed ["overrides" ] = transformedOverrides
1322
+ }
1323
+
1324
+ req = append (req , transformed )
1325
+ }
1326
+ return req , nil
1327
+ }
1328
+
1329
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelection (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1330
+ l := v .([]interface {})
1331
+ if len (l ) == 0 || l [0 ] == nil {
1332
+ return nil , nil
1333
+ }
1334
+ raw := l [0 ]
1335
+ original := raw .(map [string ]interface {})
1336
+ transformed := make (map [string ]interface {})
1337
+
1338
+ transformedLocation , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelectionLocation (original ["location" ], d , config )
1339
+ if err != nil {
1340
+ return nil , err
1341
+ } else if val := reflect .ValueOf (transformedLocation ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1342
+ transformed ["location" ] = transformedLocation
1343
+ }
1344
+
1345
+ return transformed , nil
1346
+ }
1347
+
1348
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsReplicaSelectionLocation (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1349
+ return v , nil
1350
+ }
1351
+
1352
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverrides (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1353
+ l := v .([]interface {})
1354
+ if len (l ) == 0 || l [0 ] == nil {
1355
+ return nil , nil
1356
+ }
1357
+ raw := l [0 ]
1358
+ original := raw .(map [string ]interface {})
1359
+ transformed := make (map [string ]interface {})
1360
+
1361
+ transformedAutoscalingLimits , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimits (original ["autoscaling_limits" ], d , config )
1362
+ if err != nil {
1363
+ return nil , err
1364
+ } else if val := reflect .ValueOf (transformedAutoscalingLimits ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1365
+ transformed ["autoscalingLimits" ] = transformedAutoscalingLimits
1366
+ }
1367
+
1368
+ return transformed , nil
1369
+ }
1370
+
1371
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimits (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1372
+ l := v .([]interface {})
1373
+ if len (l ) == 0 || l [0 ] == nil {
1374
+ return nil , nil
1375
+ }
1376
+ raw := l [0 ]
1377
+ original := raw .(map [string ]interface {})
1378
+ transformed := make (map [string ]interface {})
1379
+
1380
+ transformedMinNodes , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMinNodes (original ["min_nodes" ], d , config )
1381
+ if err != nil {
1382
+ return nil , err
1383
+ } else if val := reflect .ValueOf (transformedMinNodes ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1384
+ transformed ["minNodes" ] = transformedMinNodes
1385
+ }
1386
+
1387
+ transformedMaxNodes , err := expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMaxNodes (original ["max_nodes" ], d , config )
1388
+ if err != nil {
1389
+ return nil , err
1390
+ } else if val := reflect .ValueOf (transformedMaxNodes ); val .IsValid () && ! tpgresource .IsEmptyValue (val ) {
1391
+ transformed ["maxNodes" ] = transformedMaxNodes
1392
+ }
1393
+
1394
+ return transformed , nil
1395
+ }
1396
+
1397
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMinNodes (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1398
+ return v , nil
1399
+ }
1400
+
1401
+ func expandSpannerInstanceAutoscalingConfigAsymmetricAutoscalingOptionsOverridesAutoscalingLimitsMaxNodes (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1402
+ return v , nil
1403
+ }
1404
+
1139
1405
func expandSpannerInstanceEdition (v interface {}, d tpgresource.TerraformResourceData , config * transport_tpg.Config ) (interface {}, error ) {
1140
1406
return v , nil
1141
1407
}
@@ -1219,6 +1485,9 @@ func resourceSpannerInstanceUpdateEncoder(d *schema.ResourceData, meta interface
1219
1485
if d .HasChange ("autoscaling_config.0.autoscaling_targets.0.storage_utilization_percent" ) {
1220
1486
updateMask = append (updateMask , "autoscalingConfig.autoscalingTargets.storageUtilizationPercent" )
1221
1487
}
1488
+ if d .HasChange ("autoscaling_config.0.asymmetric_autoscaling_options" ) {
1489
+ updateMask = append (updateMask , "autoscalingConfig.asymmetricAutoscalingOptions" )
1490
+ }
1222
1491
}
1223
1492
}
1224
1493
newObj ["fieldMask" ] = strings .Join (updateMask , "," )
0 commit comments