Skip to content

Commit c3d2f6b

Browse files
authored
Fix issue with GCP Cloud SQL Instance disk_autoresize (#14582)
* provider/google: Fix server/state diff with disk_autoresize * provider/google: Default true for disk.auto_resize For sql_database_instance , to match the new API default. Also adds diff suppression func for autoresize on 1st gen instances * fix typos
1 parent e7dcf95 commit c3d2f6b

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

builtin/providers/google/resource_sql_database_instance.go

+30-20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package google
22

33
import (
44
"fmt"
5+
"log"
6+
"regexp"
57
"strings"
68

79
"github.com/hashicorp/terraform/helper/resource"
@@ -28,6 +30,7 @@ func resourceSqlDatabaseInstance() *schema.Resource {
2830
"settings": &schema.Schema{
2931
Type: schema.TypeList,
3032
Required: true,
33+
MaxItems: 1,
3134
Elem: &schema.Resource{
3235
Schema: map[string]*schema.Schema{
3336
"version": &schema.Schema{
@@ -89,8 +92,10 @@ func resourceSqlDatabaseInstance() *schema.Resource {
8992
},
9093
},
9194
"disk_autoresize": &schema.Schema{
92-
Type: schema.TypeBool,
93-
Optional: true,
95+
Type: schema.TypeBool,
96+
Default: true,
97+
Optional: true,
98+
DiffSuppressFunc: suppressFirstGen,
9499
},
95100
"disk_size": &schema.Schema{
96101
Type: schema.TypeInt,
@@ -302,6 +307,23 @@ func resourceSqlDatabaseInstance() *schema.Resource {
302307
}
303308
}
304309

310+
// Suppress diff with any disk_autoresize value on 1st Generation Instances
311+
func suppressFirstGen(k, old, new string, d *schema.ResourceData) bool {
312+
settingsList := d.Get("settings").([]interface{})
313+
314+
settings := settingsList[0].(map[string]interface{})
315+
tier := settings["tier"].(string)
316+
matched, err := regexp.MatchString("db*", tier)
317+
if err != nil {
318+
log.Printf("[ERR] error with regex in diff supression for disk_autoresize: %s", err)
319+
}
320+
if !matched {
321+
log.Printf("[DEBUG] suppressing diff on disk_autoresize due to 1st gen instance type")
322+
return true
323+
}
324+
return false
325+
}
326+
305327
func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{}) error {
306328
config := meta.(*Config)
307329

@@ -314,13 +336,11 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
314336
databaseVersion := d.Get("database_version").(string)
315337

316338
_settingsList := d.Get("settings").([]interface{})
317-
if len(_settingsList) > 1 {
318-
return fmt.Errorf("At most one settings block is allowed")
319-
}
320339

321340
_settings := _settingsList[0].(map[string]interface{})
322341
settings := &sqladmin.Settings{
323-
Tier: _settings["tier"].(string),
342+
Tier: _settings["tier"].(string),
343+
ForceSendFields: []string{"StorageAutoResize"},
324344
}
325345

326346
if v, ok := _settings["activation_policy"]; ok {
@@ -363,9 +383,7 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
363383
settings.CrashSafeReplicationEnabled = v.(bool)
364384
}
365385

366-
if v, ok := _settings["disk_autoresize"]; ok && v.(bool) {
367-
settings.StorageAutoResize = v.(bool)
368-
}
386+
settings.StorageAutoResize = _settings["disk_autoresize"].(bool)
369387

370388
if v, ok := _settings["disk_size"]; ok && v.(int) > 0 {
371389
settings.DataDiskSizeGb = int64(v.(int))
@@ -662,11 +680,7 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e
662680
_settings["crash_safe_replication"] = settings.CrashSafeReplicationEnabled
663681
}
664682

665-
if v, ok := _settings["disk_autoresize"]; ok && v != nil {
666-
if v.(bool) {
667-
_settings["disk_autoresize"] = settings.StorageAutoResize
668-
}
669-
}
683+
_settings["disk_autoresize"] = settings.StorageAutoResize
670684

671685
if v, ok := _settings["disk_size"]; ok && v != nil {
672686
if v.(int) > 0 && settings.DataDiskSizeGb < int64(v.(int)) {
@@ -912,14 +926,12 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
912926
_oList := _oListCast.([]interface{})
913927
_o := _oList[0].(map[string]interface{})
914928
_settingsList := _settingsListCast.([]interface{})
915-
if len(_settingsList) > 1 {
916-
return fmt.Errorf("At most one settings block is allowed")
917-
}
918929

919930
_settings := _settingsList[0].(map[string]interface{})
920931
settings := &sqladmin.Settings{
921932
Tier: _settings["tier"].(string),
922933
SettingsVersion: instance.Settings.SettingsVersion,
934+
ForceSendFields: []string{"StorageAutoResize"},
923935
}
924936

925937
if v, ok := _settings["activation_policy"]; ok {
@@ -962,9 +974,7 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
962974
settings.CrashSafeReplicationEnabled = v.(bool)
963975
}
964976

965-
if v, ok := _settings["disk_autoresize"]; ok && v.(bool) {
966-
settings.StorageAutoResize = v.(bool)
967-
}
977+
settings.StorageAutoResize = _settings["disk_autoresize"].(bool)
968978

969979
if v, ok := _settings["disk_size"]; ok {
970980
if v.(int) > 0 && int64(v.(int)) > instance.Settings.DataDiskSizeGb {

0 commit comments

Comments
 (0)