From 3c4d40d08e644deb5aba7f5a6bcc5651b5dbb7b5 Mon Sep 17 00:00:00 2001 From: Austin Cheung Date: Sat, 15 Feb 2020 15:54:16 -0800 Subject: [PATCH 1/4] add zone_redundant to azurerm_sql_database --- .../services/sql/resource_arm_sql_database.go | 14 +++++ .../tests/resource_arm_sql_database_test.go | 55 +++++++++++++++++++ website/docs/r/sql_database.html.markdown | 2 + 3 files changed, 71 insertions(+) diff --git a/azurerm/internal/services/sql/resource_arm_sql_database.go b/azurerm/internal/services/sql/resource_arm_sql_database.go index 34ef8acfea75..1f65c65fa817 100644 --- a/azurerm/internal/services/sql/resource_arm_sql_database.go +++ b/azurerm/internal/services/sql/resource_arm_sql_database.go @@ -318,6 +318,12 @@ func resourceArmSqlDatabase() *schema.Resource { Default: false, }, + "zone_redundant": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + }, + "tags": tags.Schema(), }, @@ -449,6 +455,10 @@ func resourceArmSqlDatabaseCreateUpdate(d *schema.ResourceData, meta interface{} properties.DatabaseProperties.ReadScale = sql.ReadScaleDisabled } + if v, ok := d.GetOkExists("zone_redundant"); ok { + properties.DatabaseProperties.ZoneRedundant = utils.Bool(v.(bool)) + } + // The requested Service Objective Name does not match the requested Service Objective Id. if d.HasChange("requested_service_objective_name") && !d.HasChange("requested_service_objective_id") { properties.DatabaseProperties.RequestedServiceObjectiveID = nil @@ -570,6 +580,10 @@ func resourceArmSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error } else { d.Set("read_scale", false) } + + if zoneRedundant := props.ZoneRedundant; zoneRedundant != nil { + d.Set("zone_redundant", zoneRedundant) + } } return tags.FlattenAndSet(d, resp.Tags) diff --git a/azurerm/internal/services/sql/tests/resource_arm_sql_database_test.go b/azurerm/internal/services/sql/tests/resource_arm_sql_database_test.go index c1c58164693a..887b9daf1c32 100644 --- a/azurerm/internal/services/sql/tests/resource_arm_sql_database_test.go +++ b/azurerm/internal/services/sql/tests/resource_arm_sql_database_test.go @@ -296,6 +296,32 @@ func TestAccAzureRMSqlDatabase_readScale(t *testing.T) { }) } +func TestAccAzureRMSqlDatabase_zoneRedundant(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_sql_database", "test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMSqlDatabaseDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMSqlDatabase_zoneRedundant(data, true), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMSqlDatabaseExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "zone_redundant", "true"), + ), + }, + { + Config: testAccAzureRMSqlDatabase_zoneRedundant(data, false), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMSqlDatabaseExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "zone_redundant", "false"), + ), + }, + }, + }) +} + func testCheckAzureRMSqlDatabaseExists(resourceName string) resource.TestCheckFunc { return func(s *terraform.State) error { client := acceptance.AzureProvider.Meta().(*clients.Client).Sql.DatabasesClient @@ -814,3 +840,32 @@ resource "azurerm_sql_database" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, readScale) } + +func testAccAzureRMSqlDatabase_zoneRedundant(data acceptance.TestData, zoneRedundant bool) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_sql_server" "test" { + name = "acctestsqlserver%d" + resource_group_name = "${azurerm_resource_group.test.name}" + location = "${azurerm_resource_group.test.location}" + version = "12.0" + administrator_login = "mradministrator" + administrator_login_password = "thisIsDog11" +} + +resource "azurerm_sql_database" "test" { + name = "acctestdb%d" + resource_group_name = "${azurerm_resource_group.test.name}" + server_name = "${azurerm_sql_server.test.name}" + location = "${azurerm_resource_group.test.location}" + edition = "Premium" + collation = "SQL_Latin1_General_CP1_CI_AS" + max_size_bytes = "1073741824" + zone_redundant = %t +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger, zoneRedundant) +} diff --git a/website/docs/r/sql_database.html.markdown b/website/docs/r/sql_database.html.markdown index 912454fc1b97..2d740c064440 100644 --- a/website/docs/r/sql_database.html.markdown +++ b/website/docs/r/sql_database.html.markdown @@ -76,6 +76,8 @@ The following arguments are supported: * `read_scale` - (Optional) Read-only connections will be redirected to a high-available replica. Please see [Use read-only replicas to load-balance read-only query workloads](https://docs.microsoft.com/en-us/azure/sql-database/sql-database-read-scale-out). +* `zone_redundant` - (Optional) Whether or not this database is zone redundant, which means the replicas of this database will be spread across multiple availability zones. + * `tags` - (Optional) A mapping of tags to assign to the resource. `import` supports the following: From 0added90d846283d3aa2fbdc6a3cb6d06698d2bd Mon Sep 17 00:00:00 2001 From: aqche <39076898+aqche@users.noreply.github.com> Date: Tue, 18 Feb 2020 16:25:36 -0800 Subject: [PATCH 2/4] Update azurerm/internal/services/sql/resource_arm_sql_database.go Co-Authored-By: Tom Harvey --- azurerm/internal/services/sql/resource_arm_sql_database.go | 1 - 1 file changed, 1 deletion(-) diff --git a/azurerm/internal/services/sql/resource_arm_sql_database.go b/azurerm/internal/services/sql/resource_arm_sql_database.go index 1f65c65fa817..3a88fd06588d 100644 --- a/azurerm/internal/services/sql/resource_arm_sql_database.go +++ b/azurerm/internal/services/sql/resource_arm_sql_database.go @@ -321,7 +321,6 @@ func resourceArmSqlDatabase() *schema.Resource { "zone_redundant": { Type: schema.TypeBool, Optional: true, - Computed: true, }, "tags": tags.Schema(), From 816bc1c2cefe28f49a080601d12a0d1537eebec8 Mon Sep 17 00:00:00 2001 From: aqche <39076898+aqche@users.noreply.github.com> Date: Tue, 18 Feb 2020 16:25:43 -0800 Subject: [PATCH 3/4] Update azurerm/internal/services/sql/resource_arm_sql_database.go Co-Authored-By: Tom Harvey --- azurerm/internal/services/sql/resource_arm_sql_database.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azurerm/internal/services/sql/resource_arm_sql_database.go b/azurerm/internal/services/sql/resource_arm_sql_database.go index 3a88fd06588d..799fa5c37340 100644 --- a/azurerm/internal/services/sql/resource_arm_sql_database.go +++ b/azurerm/internal/services/sql/resource_arm_sql_database.go @@ -582,7 +582,7 @@ func resourceArmSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error if zoneRedundant := props.ZoneRedundant; zoneRedundant != nil { d.Set("zone_redundant", zoneRedundant) - } + d.Set("zone_redundant", props.ZoneRedundant) } return tags.FlattenAndSet(d, resp.Tags) From e5f358a7f0de105303d27781f955eef96953fe5c Mon Sep 17 00:00:00 2001 From: Austin Cheung Date: Tue, 18 Feb 2020 17:27:08 -0800 Subject: [PATCH 4/4] address review --- .../internal/services/sql/resource_arm_sql_database.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/azurerm/internal/services/sql/resource_arm_sql_database.go b/azurerm/internal/services/sql/resource_arm_sql_database.go index 799fa5c37340..930b0d0ca421 100644 --- a/azurerm/internal/services/sql/resource_arm_sql_database.go +++ b/azurerm/internal/services/sql/resource_arm_sql_database.go @@ -356,6 +356,7 @@ func resourceArmSqlDatabaseCreateUpdate(d *schema.ResourceData, meta interface{} resourceGroup := d.Get("resource_group_name").(string) location := azure.NormalizeLocation(d.Get("location").(string)) createMode := d.Get("create_mode").(string) + zoneRedundant := d.Get("zone_redundant").(bool) t := d.Get("tags").(map[string]interface{}) if features.ShouldResourcesBeImported() && d.IsNewResource() { @@ -379,7 +380,8 @@ func resourceArmSqlDatabaseCreateUpdate(d *schema.ResourceData, meta interface{} properties := sql.Database{ Location: utils.String(location), DatabaseProperties: &sql.DatabaseProperties{ - CreateMode: sql.CreateMode(createMode), + CreateMode: sql.CreateMode(createMode), + ZoneRedundant: utils.Bool(zoneRedundant), }, Tags: tags.Expand(t), } @@ -454,10 +456,6 @@ func resourceArmSqlDatabaseCreateUpdate(d *schema.ResourceData, meta interface{} properties.DatabaseProperties.ReadScale = sql.ReadScaleDisabled } - if v, ok := d.GetOkExists("zone_redundant"); ok { - properties.DatabaseProperties.ZoneRedundant = utils.Bool(v.(bool)) - } - // The requested Service Objective Name does not match the requested Service Objective Id. if d.HasChange("requested_service_objective_name") && !d.HasChange("requested_service_objective_id") { properties.DatabaseProperties.RequestedServiceObjectiveID = nil @@ -580,8 +578,6 @@ func resourceArmSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error d.Set("read_scale", false) } - if zoneRedundant := props.ZoneRedundant; zoneRedundant != nil { - d.Set("zone_redundant", zoneRedundant) d.Set("zone_redundant", props.ZoneRedundant) }