Skip to content

Commit c01edd0

Browse files
feat(spanner): add instance autoscaling attributes to spanner instance resource (#9403) (#1675)
* feat(spanner): add instance autoscaling attributed to spanner instance resource * add update tests * fix tests * fix tests * fix lint [upstream:445f283acc877fe918cf30d77db69f9a734c8589] Signed-off-by: Modular Magician <[email protected]>
1 parent 7fb96d7 commit c01edd0

File tree

3 files changed

+105
-5
lines changed

3 files changed

+105
-5
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ require (
1111
github.com/hashicorp/hcl/v2 v2.19.1
1212
github.com/hashicorp/terraform-json v0.17.1
1313
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0
14-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f
14+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108035142-e4220205c0e2
1515
github.com/mitchellh/go-homedir v1.1.0 // indirect
1616
github.com/pkg/errors v0.9.1
1717
github.com/stretchr/testify v1.8.3

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,8 @@ github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwU
169169
github.com/hashicorp/terraform-plugin-mux v0.8.0 h1:WCTP66mZ+iIaIrCNJnjPEYnVjawTshnDJu12BcXK1EI=
170170
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 h1:wcOKYwPI9IorAJEBLzgclh3xVolO7ZorYd6U1vnok14=
171171
github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0/go.mod h1:qH/34G25Ugdj5FcM95cSoXzUgIbgfhVLXCcEcYaMwq8=
172-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f h1:zlaaF1+ZNeCD3gyuUzoHR941mGQBXNL+mimBX0Y3rKc=
173-
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108014047-60296494bb5f/go.mod h1:hOUMXZXm7ztJQn7kTMlHgG3jh7ZoLMriRFbV2t7sA8o=
172+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108035142-e4220205c0e2 h1:cRwtiI/vcVNMm68L5PnbnahSombF95pbZzRJCzZoki4=
173+
github.com/hashicorp/terraform-provider-google-beta v1.20.1-0.20231108035142-e4220205c0e2/go.mod h1:hOUMXZXm7ztJQn7kTMlHgG3jh7ZoLMriRFbV2t7sA8o=
174174
github.com/hashicorp/terraform-registry-address v0.2.2 h1:lPQBg403El8PPicg/qONZJDC6YlgCVbWDtNmmZKtBno=
175175
github.com/hashicorp/terraform-registry-address v0.2.2/go.mod h1:LtwNbCihUoUZ3RYriyS2wF/lGPB6gF9ICLRtuDk7hSo=
176176
github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=

tfplan2cai/converters/google/resources/services/spanner/spanner_instance.go

+102-2
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,12 @@ func GetSpannerInstanceApiObject(d tpgresource.TerraformResourceData, config *tr
147147
} else if v, ok := d.GetOkExists("processing_units"); !tpgresource.IsEmptyValue(reflect.ValueOf(processingUnitsProp)) && (ok || !reflect.DeepEqual(v, processingUnitsProp)) {
148148
obj["processingUnits"] = processingUnitsProp
149149
}
150+
autoscalingConfigProp, err := expandSpannerInstanceAutoscalingConfig(d.Get("autoscaling_config"), d, config)
151+
if err != nil {
152+
return nil, err
153+
} else if v, ok := d.GetOkExists("autoscaling_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(autoscalingConfigProp)) && (ok || !reflect.DeepEqual(v, autoscalingConfigProp)) {
154+
obj["autoscalingConfig"] = autoscalingConfigProp
155+
}
150156
labelsProp, err := expandSpannerInstanceEffectiveLabels(d.Get("effective_labels"), d, config)
151157
if err != nil {
152158
return nil, err
@@ -158,8 +164,8 @@ func GetSpannerInstanceApiObject(d tpgresource.TerraformResourceData, config *tr
158164
}
159165

160166
func resourceSpannerInstanceEncoder(d tpgresource.TerraformResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
161-
// Temp Logic to accommodate processing_units and num_nodes
162-
if obj["processingUnits"] == nil && obj["nodeCount"] == nil {
167+
// Temp Logic to accommodate autoscaling_config, processing_units and num_nodes
168+
if obj["processingUnits"] == nil && obj["nodeCount"] == nil && obj["autoscalingConfig"] == nil {
163169
obj["nodeCount"] = 1
164170
}
165171
newObj := make(map[string]interface{})
@@ -206,6 +212,100 @@ func expandSpannerInstanceProcessingUnits(v interface{}, d tpgresource.Terraform
206212
return v, nil
207213
}
208214

215+
func expandSpannerInstanceAutoscalingConfig(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
216+
l := v.([]interface{})
217+
if len(l) == 0 || l[0] == nil {
218+
return nil, nil
219+
}
220+
raw := l[0]
221+
original := raw.(map[string]interface{})
222+
transformed := make(map[string]interface{})
223+
224+
transformedAutoscalingLimits, err := expandSpannerInstanceAutoscalingConfigAutoscalingLimits(original["autoscaling_limits"], d, config)
225+
if err != nil {
226+
return nil, err
227+
} else if val := reflect.ValueOf(transformedAutoscalingLimits); val.IsValid() && !tpgresource.IsEmptyValue(val) {
228+
transformed["autoscalingLimits"] = transformedAutoscalingLimits
229+
}
230+
231+
transformedAutoscalingTargets, err := expandSpannerInstanceAutoscalingConfigAutoscalingTargets(original["autoscaling_targets"], d, config)
232+
if err != nil {
233+
return nil, err
234+
} else if val := reflect.ValueOf(transformedAutoscalingTargets); val.IsValid() && !tpgresource.IsEmptyValue(val) {
235+
transformed["autoscalingTargets"] = transformedAutoscalingTargets
236+
}
237+
238+
return transformed, nil
239+
}
240+
241+
func expandSpannerInstanceAutoscalingConfigAutoscalingLimits(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
242+
l := v.([]interface{})
243+
if len(l) == 0 || l[0] == nil {
244+
return nil, nil
245+
}
246+
raw := l[0]
247+
original := raw.(map[string]interface{})
248+
transformed := make(map[string]interface{})
249+
250+
transformedMinProcessingUnits, err := expandSpannerInstanceAutoscalingConfigAutoscalingLimitsMinProcessingUnits(original["min_processing_units"], d, config)
251+
if err != nil {
252+
return nil, err
253+
} else if val := reflect.ValueOf(transformedMinProcessingUnits); val.IsValid() && !tpgresource.IsEmptyValue(val) {
254+
transformed["minProcessingUnits"] = transformedMinProcessingUnits
255+
}
256+
257+
transformedMaxProcessingUnits, err := expandSpannerInstanceAutoscalingConfigAutoscalingLimitsMaxProcessingUnits(original["max_processing_units"], d, config)
258+
if err != nil {
259+
return nil, err
260+
} else if val := reflect.ValueOf(transformedMaxProcessingUnits); val.IsValid() && !tpgresource.IsEmptyValue(val) {
261+
transformed["maxProcessingUnits"] = transformedMaxProcessingUnits
262+
}
263+
264+
return transformed, nil
265+
}
266+
267+
func expandSpannerInstanceAutoscalingConfigAutoscalingLimitsMinProcessingUnits(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
268+
return v, nil
269+
}
270+
271+
func expandSpannerInstanceAutoscalingConfigAutoscalingLimitsMaxProcessingUnits(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
272+
return v, nil
273+
}
274+
275+
func expandSpannerInstanceAutoscalingConfigAutoscalingTargets(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
276+
l := v.([]interface{})
277+
if len(l) == 0 || l[0] == nil {
278+
return nil, nil
279+
}
280+
raw := l[0]
281+
original := raw.(map[string]interface{})
282+
transformed := make(map[string]interface{})
283+
284+
transformedHighPriorityCpuUtilizationPercent, err := expandSpannerInstanceAutoscalingConfigAutoscalingTargetsHighPriorityCpuUtilizationPercent(original["high_priority_cpu_utilization_percent"], d, config)
285+
if err != nil {
286+
return nil, err
287+
} else if val := reflect.ValueOf(transformedHighPriorityCpuUtilizationPercent); val.IsValid() && !tpgresource.IsEmptyValue(val) {
288+
transformed["highPriorityCpuUtilizationPercent"] = transformedHighPriorityCpuUtilizationPercent
289+
}
290+
291+
transformedStorageUtilizationPercent, err := expandSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilizationPercent(original["storage_utilization_percent"], d, config)
292+
if err != nil {
293+
return nil, err
294+
} else if val := reflect.ValueOf(transformedStorageUtilizationPercent); val.IsValid() && !tpgresource.IsEmptyValue(val) {
295+
transformed["storageUtilizationPercent"] = transformedStorageUtilizationPercent
296+
}
297+
298+
return transformed, nil
299+
}
300+
301+
func expandSpannerInstanceAutoscalingConfigAutoscalingTargetsHighPriorityCpuUtilizationPercent(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
302+
return v, nil
303+
}
304+
305+
func expandSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilizationPercent(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
306+
return v, nil
307+
}
308+
209309
func expandSpannerInstanceEffectiveLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
210310
if v == nil {
211311
return map[string]string{}, nil

0 commit comments

Comments
 (0)