@@ -2,6 +2,8 @@ package google
2
2
3
3
import (
4
4
"fmt"
5
+ "log"
6
+ "regexp"
5
7
"strings"
6
8
7
9
"github.com/hashicorp/terraform/helper/resource"
@@ -28,6 +30,7 @@ func resourceSqlDatabaseInstance() *schema.Resource {
28
30
"settings" : & schema.Schema {
29
31
Type : schema .TypeList ,
30
32
Required : true ,
33
+ MaxItems : 1 ,
31
34
Elem : & schema.Resource {
32
35
Schema : map [string ]* schema.Schema {
33
36
"version" : & schema.Schema {
@@ -89,8 +92,10 @@ func resourceSqlDatabaseInstance() *schema.Resource {
89
92
},
90
93
},
91
94
"disk_autoresize" : & schema.Schema {
92
- Type : schema .TypeBool ,
93
- Optional : true ,
95
+ Type : schema .TypeBool ,
96
+ Default : true ,
97
+ Optional : true ,
98
+ DiffSuppressFunc : suppressFirstGen ,
94
99
},
95
100
"disk_size" : & schema.Schema {
96
101
Type : schema .TypeInt ,
@@ -302,6 +307,23 @@ func resourceSqlDatabaseInstance() *schema.Resource {
302
307
}
303
308
}
304
309
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
+
305
327
func resourceSqlDatabaseInstanceCreate (d * schema.ResourceData , meta interface {}) error {
306
328
config := meta .(* Config )
307
329
@@ -314,13 +336,11 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
314
336
databaseVersion := d .Get ("database_version" ).(string )
315
337
316
338
_settingsList := d .Get ("settings" ).([]interface {})
317
- if len (_settingsList ) > 1 {
318
- return fmt .Errorf ("At most one settings block is allowed" )
319
- }
320
339
321
340
_settings := _settingsList [0 ].(map [string ]interface {})
322
341
settings := & sqladmin.Settings {
323
- Tier : _settings ["tier" ].(string ),
342
+ Tier : _settings ["tier" ].(string ),
343
+ ForceSendFields : []string {"StorageAutoResize" },
324
344
}
325
345
326
346
if v , ok := _settings ["activation_policy" ]; ok {
@@ -363,9 +383,7 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
363
383
settings .CrashSafeReplicationEnabled = v .(bool )
364
384
}
365
385
366
- if v , ok := _settings ["disk_autoresize" ]; ok && v .(bool ) {
367
- settings .StorageAutoResize = v .(bool )
368
- }
386
+ settings .StorageAutoResize = _settings ["disk_autoresize" ].(bool )
369
387
370
388
if v , ok := _settings ["disk_size" ]; ok && v .(int ) > 0 {
371
389
settings .DataDiskSizeGb = int64 (v .(int ))
@@ -662,11 +680,7 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e
662
680
_settings ["crash_safe_replication" ] = settings .CrashSafeReplicationEnabled
663
681
}
664
682
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
670
684
671
685
if v , ok := _settings ["disk_size" ]; ok && v != nil {
672
686
if v .(int ) > 0 && settings .DataDiskSizeGb < int64 (v .(int )) {
@@ -912,14 +926,12 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
912
926
_oList := _oListCast .([]interface {})
913
927
_o := _oList [0 ].(map [string ]interface {})
914
928
_settingsList := _settingsListCast .([]interface {})
915
- if len (_settingsList ) > 1 {
916
- return fmt .Errorf ("At most one settings block is allowed" )
917
- }
918
929
919
930
_settings := _settingsList [0 ].(map [string ]interface {})
920
931
settings := & sqladmin.Settings {
921
932
Tier : _settings ["tier" ].(string ),
922
933
SettingsVersion : instance .Settings .SettingsVersion ,
934
+ ForceSendFields : []string {"StorageAutoResize" },
923
935
}
924
936
925
937
if v , ok := _settings ["activation_policy" ]; ok {
@@ -962,9 +974,7 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
962
974
settings .CrashSafeReplicationEnabled = v .(bool )
963
975
}
964
976
965
- if v , ok := _settings ["disk_autoresize" ]; ok && v .(bool ) {
966
- settings .StorageAutoResize = v .(bool )
967
- }
977
+ settings .StorageAutoResize = _settings ["disk_autoresize" ].(bool )
968
978
969
979
if v , ok := _settings ["disk_size" ]; ok {
970
980
if v .(int ) > 0 && int64 (v .(int )) > instance .Settings .DataDiskSizeGb {
0 commit comments