Skip to content

Commit ddd7e0f

Browse files
Add Sql Server Timezone Update Support (#11202) (#8293)
[upstream:2fdda66097e2c96688e59f7c58c1f717c7785856] Signed-off-by: Modular Magician <[email protected]>
1 parent c474c95 commit ddd7e0f

File tree

3 files changed

+82
-1
lines changed

3 files changed

+82
-1
lines changed

.changelog/11202.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
sql: added in-place update support for `settings.time_zone` in `google_sql_database_instance` resource
3+
```

google-beta/services/sql/resource_sql_database_instance.go

+25-1
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,6 @@ func ResourceSqlDatabaseInstance() *schema.Resource {
286286
},
287287
"time_zone": {
288288
Type: schema.TypeString,
289-
ForceNew: true,
290289
Optional: true,
291290
Description: `The time_zone to be used by the database engine (supported only for SQL Server), in SQL Server timezone format.`,
292291
},
@@ -1981,6 +1980,31 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
19811980
}
19821981
}
19831982

1983+
// Check if timezone is updated
1984+
if d.HasChange("settings.0.time_zone") {
1985+
timezone := d.Get("settings.0.time_zone").(string)
1986+
instance = &sqladmin.DatabaseInstance{Settings: &sqladmin.Settings{TimeZone: timezone}}
1987+
err = transport_tpg.Retry(transport_tpg.RetryOptions{
1988+
RetryFunc: func() (rerr error) {
1989+
op, rerr = config.NewSqlAdminClient(userAgent).Instances.Patch(project, d.Get("name").(string), instance).Do()
1990+
return err
1991+
},
1992+
Timeout: d.Timeout(schema.TimeoutUpdate),
1993+
ErrorRetryPredicates: []transport_tpg.RetryErrorPredicateFunc{transport_tpg.IsSqlOperationInProgressError},
1994+
})
1995+
if err != nil {
1996+
return fmt.Errorf("Error, failed to patch instance settings for %s: %s", instance.Name, err)
1997+
}
1998+
err = SqlAdminOperationWaitTime(config, op, project, "Patch Instance", userAgent, d.Timeout(schema.TimeoutUpdate))
1999+
if err != nil {
2000+
return err
2001+
}
2002+
err = resourceSqlDatabaseInstanceRead(d, meta)
2003+
if err != nil {
2004+
return err
2005+
}
2006+
}
2007+
19842008
return resourceSqlDatabaseInstanceRead(d, meta)
19852009
}
19862010

google-beta/services/sql/resource_sql_database_instance_test.go

+54
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,41 @@ func TestAccSqlDatabaseInstance_rootPasswordShouldBeUpdatable(t *testing.T) {
20782078
})
20792079
}
20802080

2081+
func TestAccSqlDatabaseInstance_SqlServerTimezoneUpdate(t *testing.T) {
2082+
t.Parallel()
2083+
2084+
instanceName := "tf-test-" + acctest.RandString(t, 10)
2085+
rootPassword := acctest.RandString(t, 15)
2086+
timezone := "Eastern Standard Time"
2087+
timezoneUpdate := "Pacific Standard Time"
2088+
2089+
acctest.VcrTest(t, resource.TestCase{
2090+
PreCheck: func() { acctest.AccTestPreCheck(t) },
2091+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
2092+
CheckDestroy: testAccSqlDatabaseInstanceDestroyProducer(t),
2093+
Steps: []resource.TestStep{
2094+
{
2095+
Config: testGoogleSqlDatabaseInstance_SqlServerTimezone(instanceName, rootPassword, timezone),
2096+
},
2097+
{
2098+
ResourceName: "google_sql_database_instance.instance",
2099+
ImportState: true,
2100+
ImportStateVerify: true,
2101+
ImportStateVerifyIgnore: []string{"deletion_protection", "root_password"},
2102+
},
2103+
{
2104+
Config: testGoogleSqlDatabaseInstance_SqlServerTimezone(instanceName, rootPassword, timezoneUpdate),
2105+
},
2106+
{
2107+
ResourceName: "google_sql_database_instance.instance",
2108+
ImportState: true,
2109+
ImportStateVerify: true,
2110+
ImportStateVerifyIgnore: []string{"deletion_protection", "root_password"},
2111+
},
2112+
},
2113+
})
2114+
}
2115+
20812116
func TestAccSqlDatabaseInstance_activationPolicy(t *testing.T) {
20822117
t.Parallel()
20832118

@@ -2686,6 +2721,25 @@ resource "google_sql_database_instance" "instance" {
26862721
}`, instanceName, tier, edition)
26872722
}
26882723

2724+
func testGoogleSqlDatabaseInstance_SqlServerTimezone(instance, rootPassword, timezone string) string {
2725+
return fmt.Sprintf(`
2726+
resource "google_sql_database_instance" "instance" {
2727+
name = "%s"
2728+
region = "us-central1"
2729+
database_version = "SQLSERVER_2017_STANDARD"
2730+
root_password = "%s"
2731+
deletion_protection = false
2732+
settings {
2733+
tier = "db-custom-1-3840"
2734+
ip_configuration {
2735+
ipv4_enabled = "true"
2736+
}
2737+
time_zone = "%s"
2738+
}
2739+
}
2740+
`, instance, rootPassword, timezone)
2741+
}
2742+
26892743
func testGoogleSqlDatabaseInstance_SqlServerAuditConfig(databaseName, rootPassword, bucketName, uploadInterval, retentionInterval string) string {
26902744
return fmt.Sprintf(`
26912745
resource "google_storage_bucket" "gs-bucket" {

0 commit comments

Comments
 (0)