diff --git a/azurerm/internal/services/mssql/mssql_database_resource.go b/azurerm/internal/services/mssql/mssql_database_resource.go index 67d8f59c20ac..a39a17868aed 100644 --- a/azurerm/internal/services/mssql/mssql_database_resource.go +++ b/azurerm/internal/services/mssql/mssql_database_resource.go @@ -292,7 +292,7 @@ func resourceMsSqlDatabase() *schema.Resource { }, }, - "geo_backup_policy": { + "geo_backup_enabled": { Type: schema.TypeBool, Optional: true, Default: true, @@ -452,29 +452,29 @@ func resourceMsSqlDatabaseCreateUpdate(d *schema.ResourceData, meta interface{}) d.SetId(*read.ID) - // For datawarehouse SKUs, set the geo-backup policy - if d.HasChange("geo_backup_policy") && strings.HasPrefix(skuName.(string), "DW") { - v := d.Get("geo_backup_policy").(bool) - + // For datawarehouse SKUs only + if strings.HasPrefix(skuName.(string), "DW") && (d.HasChange("geo_backup_enabled") || d.IsNewResource()) { + isEnabled := d.Get("geo_backup_enabled").(bool) var geoBackupPolicyState sql.GeoBackupPolicyState - if v { - geoBackupPolicyState = sql.GeoBackupPolicyStateEnabled - } else { - geoBackupPolicyState = sql.GeoBackupPolicyStateDisabled - } + // The default geo backup policy configuration for a new resource is 'enabled', so we don't need to set it in that scenario + if !(d.IsNewResource() && isEnabled) { + if isEnabled { + geoBackupPolicyState = sql.GeoBackupPolicyStateEnabled + } else { + geoBackupPolicyState = sql.GeoBackupPolicyStateDisabled + } - geoBackupPolicy := sql.GeoBackupPolicy{ - GeoBackupPolicyProperties: &sql.GeoBackupPolicyProperties{ - State: geoBackupPolicyState, - }, - } + geoBackupPolicy := sql.GeoBackupPolicy{ + GeoBackupPolicyProperties: &sql.GeoBackupPolicyProperties{ + State: geoBackupPolicyState, + }, + } - _, err := geoBackupPoliciesClient.CreateOrUpdate(ctx, serverId.ResourceGroup, serverId.Name, name, geoBackupPolicy) - if err != nil { - return fmt.Errorf("Error issuing create/update request for Sql Server %q (Database %q) Geo backup policies (Resource Group %q): %+v", serverId.Name, name, serverId.ResourceGroup, err) + if _, err := geoBackupPoliciesClient.CreateOrUpdate(ctx, serverId.ResourceGroup, serverId.Name, name, geoBackupPolicy); err != nil { + return fmt.Errorf("Error issuing create/update request for Sql Server %q (Database %q) Geo backup policies (Resource Group %q): %+v", serverId.Name, name, serverId.ResourceGroup, err) + } } - } if _, err = threatClient.CreateOrUpdate(ctx, serverId.ResourceGroup, serverId.Name, name, *expandMsSqlServerThreatDetectionPolicy(d, location)); err != nil { @@ -612,7 +612,7 @@ func resourceMsSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error { } geoBackupPolicy := true - + // Hyper Scale SKU's do not currently support LRP and do not honour normal SRP operations if !strings.HasPrefix(skuName, "HS") && !strings.HasPrefix(skuName, "DW") { longTermPolicy, err := longTermRetentionClient.Get(ctx, id.ResourceGroup, id.ServerName, id.Name) @@ -649,15 +649,15 @@ func resourceMsSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error { } //For Datawarehouse SKUs, set the geo-backup policy setting - if (strings.HasPrefix(skuName, "DW") && geoPoliciesResponse.GeoBackupPolicyProperties.State == sql.GeoBackupPolicyStateDisabled) { + if strings.HasPrefix(skuName, "DW") && geoPoliciesResponse.GeoBackupPolicyProperties.State == sql.GeoBackupPolicyStateDisabled { geoBackupPolicy = false } } - if err := d.Set("geo_backup_policy", geoBackupPolicy); err != nil { - return fmt.Errorf("failure in setting `geo_backup_policy`: %+v", err) + if err := d.Set("geo_backup_enabled", geoBackupPolicy); err != nil { + return fmt.Errorf("failure in setting `geo_backup_enabled`: %+v", err) } - + return tags.FlattenAndSet(d, resp.Tags) } diff --git a/azurerm/internal/services/mssql/mssql_database_resource_test.go b/azurerm/internal/services/mssql/mssql_database_resource_test.go index b7a5d6a11e47..fef3c61f11ff 100644 --- a/azurerm/internal/services/mssql/mssql_database_resource_test.go +++ b/azurerm/internal/services/mssql/mssql_database_resource_test.go @@ -547,18 +547,18 @@ func TestAccMsSqlDatabase_geoBackupPolicy(t *testing.T) { data.ResourceTest(t, r, []resource.TestStep{ { - Config: r.withGeoBackupPoliciesEnabled(data), + Config: r.withGeoBackupPoliciesDisabled(data), Check: resource.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("geo_backup_policy").HasValue("true"), + check.That(data.ResourceName).Key("geo_backup_enabled").HasValue("false"), ), }, data.ImportStep(), { - Config: r.withGeoBackupPoliciesDisabled(data), + Config: r.withGeoBackupPoliciesEnabled(data), Check: resource.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("geo_backup_policy").HasValue("false"), + check.That(data.ResourceName).Key("geo_backup_enabled").HasValue("true"), ), }, data.ImportStep(), @@ -1382,10 +1382,10 @@ func (r MsSqlDatabaseResource) withGeoBackupPoliciesEnabled(data acceptance.Test %[1]s resource "azurerm_mssql_database" "test" { - name = "acctest-db-%[3]d" - server_id = azurerm_sql_server.test.id - sku_name = "DW100c" - geo_backup_policy = true + name = "acctest-db-%[3]d" + server_id = azurerm_sql_server.test.id + sku_name = "DW100c" + geo_backup_enabled = true } `, r.template(data), data.RandomIntOfLength(15), data.RandomInteger) } @@ -1395,10 +1395,10 @@ func (r MsSqlDatabaseResource) withGeoBackupPoliciesDisabled(data acceptance.Tes %[1]s resource "azurerm_mssql_database" "test" { - name = "acctest-db-%[3]d" - server_id = azurerm_sql_server.test.id - sku_name = "DW100c" - geo_backup_policy = false + name = "acctest-db-%[3]d" + server_id = azurerm_sql_server.test.id + sku_name = "DW100c" + geo_backup_enabled = false } `, r.template(data), data.RandomIntOfLength(15), data.RandomInteger) } diff --git a/website/docs/r/mssql_database.html.markdown b/website/docs/r/mssql_database.html.markdown index 68a2736d03ad..3e376c3214fd 100644 --- a/website/docs/r/mssql_database.html.markdown +++ b/website/docs/r/mssql_database.html.markdown @@ -88,6 +88,10 @@ The following arguments are supported: * `extended_auditing_policy` - (Optional) A `extended_auditing_policy` block as defined below. +* `geo_backup_enabled` - (Optional) A boolean that specifies if the Geo Backup Policy is enabled. + +~> **NOTE** `geo_backup_enabled` is only applicable for DataWarehouse SKUs (DW*). This setting is ignored for all other SKUs. + * `license_type` - (Optional) Specifies the license type applied to this database. Possible values are `LicenseIncluded` and `BasePrice`. * `long_term_retention_policy` - (Optional) A `long_term_retention_policy` block as defined below.