Skip to content

Commit a2f29fa

Browse files
modular-magicianmelinath
authored andcommitted
feat(spanner): add support for defaultBackupScheduleType in spanner instance (#12254) (#8644)
[upstream:b551152e1e2375ddd6208b18c1970292b8ff583c] Signed-off-by: Modular Magician <[email protected]>
1 parent 5795e7b commit a2f29fa

File tree

5 files changed

+47
-2
lines changed

5 files changed

+47
-2
lines changed

.changelog/12254.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
spanner: added `default_backup_schedule_type` field to `google_spanner_instance`
3+
```

google-beta/services/spanner/resource_spanner_instance.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,15 @@ This number is on a scale from 0 (no utilization) to 100 (full utilization).`,
229229
},
230230
ExactlyOneOf: []string{"num_nodes", "processing_units", "autoscaling_config"},
231231
},
232+
"default_backup_schedule_type": {
233+
Type: schema.TypeString,
234+
Computed: true,
235+
Optional: true,
236+
ValidateFunc: verify.ValidateEnum([]string{"NONE", "AUTOMATIC", ""}),
237+
Description: `Controls the default backup behavior for new databases within the instance.
238+
Note that 'AUTOMATIC' is not permitted for free instances, as backups and backup schedules are not allowed for free instances.
239+
if unset or NONE, no default backup schedule will be created for new databases within the instance. Possible values: ["NONE", "AUTOMATIC"]`,
240+
},
232241
"labels": {
233242
Type: schema.TypeMap,
234243
Optional: true,
@@ -336,6 +345,12 @@ func resourceSpannerInstanceCreate(d *schema.ResourceData, meta interface{}) err
336345
} else if v, ok := d.GetOkExists("autoscaling_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(autoscalingConfigProp)) && (ok || !reflect.DeepEqual(v, autoscalingConfigProp)) {
337346
obj["autoscalingConfig"] = autoscalingConfigProp
338347
}
348+
defaultBackupScheduleTypeProp, err := expandSpannerInstanceDefaultBackupScheduleType(d.Get("default_backup_schedule_type"), d, config)
349+
if err != nil {
350+
return err
351+
} else if v, ok := d.GetOkExists("default_backup_schedule_type"); !tpgresource.IsEmptyValue(reflect.ValueOf(defaultBackupScheduleTypeProp)) && (ok || !reflect.DeepEqual(v, defaultBackupScheduleTypeProp)) {
352+
obj["defaultBackupScheduleType"] = defaultBackupScheduleTypeProp
353+
}
339354
labelsProp, err := expandSpannerInstanceEffectiveLabels(d.Get("effective_labels"), d, config)
340355
if err != nil {
341356
return err
@@ -515,6 +530,9 @@ func resourceSpannerInstanceRead(d *schema.ResourceData, meta interface{}) error
515530
if err := d.Set("autoscaling_config", flattenSpannerInstanceAutoscalingConfig(res["autoscalingConfig"], d, config)); err != nil {
516531
return fmt.Errorf("Error reading Instance: %s", err)
517532
}
533+
if err := d.Set("default_backup_schedule_type", flattenSpannerInstanceDefaultBackupScheduleType(res["defaultBackupScheduleType"], d, config)); err != nil {
534+
return fmt.Errorf("Error reading Instance: %s", err)
535+
}
518536
if err := d.Set("terraform_labels", flattenSpannerInstanceTerraformLabels(res["labels"], d, config)); err != nil {
519537
return fmt.Errorf("Error reading Instance: %s", err)
520538
}
@@ -565,6 +583,12 @@ func resourceSpannerInstanceUpdate(d *schema.ResourceData, meta interface{}) err
565583
} else if v, ok := d.GetOkExists("autoscaling_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, autoscalingConfigProp)) {
566584
obj["autoscalingConfig"] = autoscalingConfigProp
567585
}
586+
defaultBackupScheduleTypeProp, err := expandSpannerInstanceDefaultBackupScheduleType(d.Get("default_backup_schedule_type"), d, config)
587+
if err != nil {
588+
return err
589+
} else if v, ok := d.GetOkExists("default_backup_schedule_type"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, defaultBackupScheduleTypeProp)) {
590+
obj["defaultBackupScheduleType"] = defaultBackupScheduleTypeProp
591+
}
568592
labelsProp, err := expandSpannerInstanceEffectiveLabels(d.Get("effective_labels"), d, config)
569593
if err != nil {
570594
return err
@@ -944,7 +968,9 @@ func flattenSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilization
944968

945969
return v // let terraform core handle it otherwise
946970
}
947-
971+
func flattenSpannerInstanceDefaultBackupScheduleType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
972+
return v
973+
}
948974
func flattenSpannerInstanceTerraformLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
949975
if v == nil {
950976
return v
@@ -1109,7 +1135,9 @@ func expandSpannerInstanceAutoscalingConfigAutoscalingTargetsHighPriorityCpuUtil
11091135
func expandSpannerInstanceAutoscalingConfigAutoscalingTargetsStorageUtilizationPercent(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
11101136
return v, nil
11111137
}
1112-
1138+
func expandSpannerInstanceDefaultBackupScheduleType(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1139+
return v, nil
1140+
}
11131141
func expandSpannerInstanceEffectiveLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
11141142
if v == nil {
11151143
return map[string]string{}, nil
@@ -1149,6 +1177,9 @@ func resourceSpannerInstanceUpdateEncoder(d *schema.ResourceData, meta interface
11491177
newObj := make(map[string]interface{})
11501178
newObj["instance"] = obj
11511179
updateMask := make([]string, 0)
1180+
if d.HasChange("default_backup_schedule_type") {
1181+
updateMask = append(updateMask, "defaultBackupScheduleType")
1182+
}
11521183
if d.HasChange("num_nodes") {
11531184
updateMask = append(updateMask, "nodeCount")
11541185
}

google-beta/services/spanner/resource_spanner_instance_generated_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ resource "google_spanner_instance" "example" {
6262
config = "regional-us-central1"
6363
display_name = "Test Spanner Instance"
6464
num_nodes = 2
65+
default_backup_schedule_type = "AUTOMATIC"
6566
labels = {
6667
"foo" = "bar"
6768
}

google-beta/services/spanner/resource_spanner_instance_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ resource "google_spanner_instance" "basic" {
321321
config = "regional-us-central1"
322322
display_name = "%s-dname"
323323
num_nodes = 1
324+
default_backup_schedule_type = "NONE"
324325
}
325326
`, name, name)
326327
}
@@ -412,6 +413,7 @@ resource "google_spanner_instance" "basic" {
412413
storage_utilization_percent = %v
413414
}
414415
}
416+
default_backup_schedule_type = "AUTOMATIC"
415417
}
416418
`, name, name, maxProcessingUnits, minProcessingUnits, cupUtilizationPercent, storageUtilizationPercent)
417419
}

website/docs/r/spanner_instance.html.markdown

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ resource "google_spanner_instance" "example" {
4343
config = "regional-us-central1"
4444
display_name = "Test Spanner Instance"
4545
num_nodes = 2
46+
default_backup_schedule_type = "AUTOMATIC"
4647
labels = {
4748
"foo" = "bar"
4849
}
@@ -171,6 +172,13 @@ The following arguments are supported:
171172
the instance.
172173
Structure is [documented below](#nested_autoscaling_config).
173174

175+
* `default_backup_schedule_type` -
176+
(Optional)
177+
Controls the default backup behavior for new databases within the instance.
178+
Note that `AUTOMATIC` is not permitted for free instances, as backups and backup schedules are not allowed for free instances.
179+
if unset or NONE, no default backup schedule will be created for new databases within the instance.
180+
Possible values are: `NONE`, `AUTOMATIC`.
181+
174182
* `project` - (Optional) The ID of the project in which the resource belongs.
175183
If it is not provided, the provider project is used.
176184

0 commit comments

Comments
 (0)