Skip to content

Commit 90a6dd6

Browse files
committed
fix conflict
2 parents 33a95a1 + 3a1f750 commit 90a6dd6

File tree

3 files changed

+182
-3
lines changed

3 files changed

+182
-3
lines changed

internal/services/mssqlmanagedinstance/mssql_managed_instance_resource.go

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ type MsSqlManagedInstanceModel struct {
6363
AzureActiveDirectoryAdministrator []AzureActiveDirectoryAdministrator `tfschema:"azure_active_directory_administrator"`
6464
ZoneRedundantEnabled bool `tfschema:"zone_redundant_enabled"`
6565
Tags map[string]string `tfschema:"tags"`
66+
DatabaseFormat string `tfschema:"database_format"`
67+
HybridSecondaryUsage string `tfschema:"hybrid_secondary_usage"`
6668
}
6769

6870
type AzureActiveDirectoryAdministrator struct {
@@ -230,6 +232,13 @@ func (r MsSqlManagedInstanceResource) Arguments() map[string]*pluginsdk.Schema {
230232
ForceNew: true,
231233
},
232234

235+
"database_format": {
236+
Type: schema.TypeString,
237+
Optional: true,
238+
Default: managedinstances.ManagedInstanceDatabaseFormatSQLServerTwoZeroTwoTwo,
239+
ValidateFunc: validation.StringInSlice(managedinstances.PossibleValuesForManagedInstanceDatabaseFormat(), false),
240+
},
241+
233242
"dns_zone_partner_id": {
234243
Type: schema.TypeString,
235244
Optional: true,
@@ -238,6 +247,13 @@ func (r MsSqlManagedInstanceResource) Arguments() map[string]*pluginsdk.Schema {
238247

239248
"identity": commonschema.SystemAssignedUserAssignedIdentityOptional(),
240249

250+
"hybrid_secondary_usage": {
251+
Type: schema.TypeString,
252+
Optional: true,
253+
Default: managedinstances.HybridSecondaryUsageActive,
254+
ValidateFunc: validation.StringInSlice(managedinstances.PossibleValuesForHybridSecondaryUsage(), false),
255+
},
256+
241257
"maintenance_configuration_name": {
242258
Type: schema.TypeString,
243259
Optional: true,
@@ -367,8 +383,14 @@ func (r MsSqlManagedInstanceResource) CustomizeDiff() sdk.ResourceFunc {
367383
_, pwsOk := rd.GetOk("administrator_login_password")
368384
if aadAdminOk && !authOnlyEnabled && (!loginOk || !pwsOk) {
369385
return fmt.Errorf("`administrator_login` and `administrator_login_password` are required when `azuread_authentication_only_enabled` is false")
370-
}
371386

387+
// Once the `AlwaysUpToDate` is enabled, you can't go back to `SQLServer2022` update policy.
388+
if oldVal, newVal := rd.GetChange("database_format"); oldVal.(string) == string(managedinstances.ManagedInstanceDatabaseFormatAlwaysUpToDate) && newVal.(string) == string(managedinstances.ManagedInstanceDatabaseFormatSQLServerTwoZeroTwoTwo) {
389+
if err := rd.ForceNew("database_format"); err != nil {
390+
return err
391+
}
392+
}
393+
}
372394
return nil
373395
},
374396
}
@@ -426,7 +448,9 @@ func (r MsSqlManagedInstanceResource) Create() sdk.ResourceFunc {
426448
VCores: pointer.To(model.VCores),
427449
ZoneRedundant: pointer.To(model.ZoneRedundantEnabled),
428450
// `Administrators` is only valid when specified during creation`
429-
Administrators: expandMsSqlManagedInstanceExternalAdministrators(model.AzureActiveDirectoryAdministrator),
451+
Administrators: expandMsSqlManagedInstanceExternalAdministrators(model.AzureActiveDirectoryAdministrator),
452+
DatabaseFormat: pointer.To(managedinstances.ManagedInstanceDatabaseFormat(model.DatabaseFormat)),
453+
HybridSecondaryUsage: pointer.To(managedinstances.HybridSecondaryUsage(model.HybridSecondaryUsage)),
430454
},
431455
Tags: pointer.To(model.Tags),
432456
}
@@ -583,7 +607,13 @@ func (r MsSqlManagedInstanceResource) Update() sdk.ResourceFunc {
583607
}
584608
}
585609

586-
metadata.Logger.Infof("Updating %s", *id)
610+
if metadata.ResourceData.HasChange("database_format") {
611+
properties.Properties.DatabaseFormat = pointer.To(managedinstances.ManagedInstanceDatabaseFormat(state.DatabaseFormat))
612+
}
613+
614+
if metadata.ResourceData.HasChange("hybrid_secondary_usage") {
615+
properties.Properties.HybridSecondaryUsage = pointer.To(managedinstances.HybridSecondaryUsage(state.HybridSecondaryUsage))
616+
}
587617

588618
err = client.CreateOrUpdateThenPoll(ctx, *id, properties)
589619
if err != nil {
@@ -674,6 +704,8 @@ func (r MsSqlManagedInstanceResource) Read() sdk.ResourceFunc {
674704
if props.ServicePrincipal != nil {
675705
model.ServicePrincipalType = string(pointer.From(props.ServicePrincipal.Type))
676706
}
707+
model.DatabaseFormat = string(pointer.From(props.DatabaseFormat))
708+
model.HybridSecondaryUsage = string(pointer.From(props.HybridSecondaryUsage))
677709
}
678710
}
679711
return metadata.Encode(&model)

internal/services/mssqlmanagedinstance/mssql_managed_instance_resource_test.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,57 @@ func TestAccMsSqlManagedInstance_update(t *testing.T) {
6464
})
6565
}
6666

67+
func TestAccMsSqlManagedInstance_databaseFormat(t *testing.T) {
68+
data := acceptance.BuildTestData(t, "azurerm_mssql_managed_instance", "test")
69+
r := MsSqlManagedInstanceResource{}
70+
71+
data.ResourceTest(t, r, []acceptance.TestStep{
72+
{
73+
Config: r.databaseFormat(data, "SQLServer2022"),
74+
Check: acceptance.ComposeTestCheckFunc(
75+
check.That(data.ResourceName).ExistsInAzure(r),
76+
),
77+
},
78+
data.ImportStep("administrator_login_password"),
79+
{
80+
Config: r.databaseFormat(data, "AlwaysUpToDate"),
81+
Check: acceptance.ComposeTestCheckFunc(
82+
check.That(data.ResourceName).ExistsInAzure(r),
83+
),
84+
},
85+
data.ImportStep("administrator_login_password"),
86+
})
87+
}
88+
89+
func TestAccMsSqlManagedInstance_hybridSecondaryUsage(t *testing.T) {
90+
data := acceptance.BuildTestData(t, "azurerm_mssql_managed_instance", "test")
91+
r := MsSqlManagedInstanceResource{}
92+
93+
data.ResourceTest(t, r, []acceptance.TestStep{
94+
{
95+
Config: r.hybridSecondaryUsage(data, "Passive"),
96+
Check: acceptance.ComposeTestCheckFunc(
97+
check.That(data.ResourceName).ExistsInAzure(r),
98+
),
99+
},
100+
data.ImportStep("administrator_login_password"),
101+
{
102+
Config: r.hybridSecondaryUsage(data, "Active"),
103+
Check: acceptance.ComposeTestCheckFunc(
104+
check.That(data.ResourceName).ExistsInAzure(r),
105+
),
106+
},
107+
data.ImportStep("administrator_login_password"),
108+
{
109+
Config: r.hybridSecondaryUsage(data, "Passive"),
110+
Check: acceptance.ComposeTestCheckFunc(
111+
check.That(data.ResourceName).ExistsInAzure(r),
112+
),
113+
},
114+
data.ImportStep("administrator_login_password"),
115+
})
116+
}
117+
67118
func TestAccMsSqlManagedInstance_premium(t *testing.T) {
68119
data := acceptance.BuildTestData(t, "azurerm_mssql_managed_instance", "test")
69120
r := MsSqlManagedInstanceResource{}
@@ -393,6 +444,96 @@ resource "azurerm_mssql_managed_instance" "test" {
393444
`, r.template(data, data.Locations.Primary), data.RandomInteger)
394445
}
395446

447+
func (r MsSqlManagedInstanceResource) databaseFormat(data acceptance.TestData, databaseFormat string) string {
448+
return fmt.Sprintf(`
449+
%[1]s
450+
451+
provider "azurerm" {
452+
features {
453+
resource_group {
454+
/* Due to the creation of unmanaged Microsoft.Network/networkIntentPolicies in this service,
455+
prevent_deletion_if_contains_resources has been added here to allow the test resources to be
456+
deleted until this can be properly investigated
457+
*/
458+
prevent_deletion_if_contains_resources = false
459+
}
460+
}
461+
}
462+
463+
resource "azurerm_mssql_managed_instance" "test" {
464+
name = "acctestsqlserver%[2]d"
465+
resource_group_name = azurerm_resource_group.test.name
466+
location = azurerm_resource_group.test.location
467+
468+
license_type = "BasePrice"
469+
sku_name = "GP_Gen5"
470+
storage_size_in_gb = 32
471+
subnet_id = azurerm_subnet.test.id
472+
vcores = 4
473+
474+
administrator_login = "missadministrator"
475+
administrator_login_password = "NCC-1701-D"
476+
477+
database_format = "%[3]s"
478+
479+
depends_on = [
480+
azurerm_subnet_network_security_group_association.test,
481+
azurerm_subnet_route_table_association.test,
482+
]
483+
484+
tags = {
485+
environment = "staging"
486+
database = "test"
487+
}
488+
}
489+
`, r.template(data, data.Locations.Primary), data.RandomInteger, databaseFormat)
490+
}
491+
492+
func (r MsSqlManagedInstanceResource) hybridSecondaryUsage(data acceptance.TestData, hybridSecondaryUsage string) string {
493+
return fmt.Sprintf(`
494+
%[1]s
495+
496+
provider "azurerm" {
497+
features {
498+
resource_group {
499+
/* Due to the creation of unmanaged Microsoft.Network/networkIntentPolicies in this service,
500+
prevent_deletion_if_contains_resources has been added here to allow the test resources to be
501+
deleted until this can be properly investigated
502+
*/
503+
prevent_deletion_if_contains_resources = false
504+
}
505+
}
506+
}
507+
508+
resource "azurerm_mssql_managed_instance" "test" {
509+
name = "acctestsqlserver%[2]d"
510+
resource_group_name = azurerm_resource_group.test.name
511+
location = azurerm_resource_group.test.location
512+
513+
license_type = "BasePrice"
514+
sku_name = "GP_Gen5"
515+
storage_size_in_gb = 32
516+
subnet_id = azurerm_subnet.test.id
517+
vcores = 4
518+
519+
administrator_login = "missadministrator"
520+
administrator_login_password = "NCC-1701-D"
521+
522+
hybrid_secondary_usage = "%[3]s"
523+
524+
depends_on = [
525+
azurerm_subnet_network_security_group_association.test,
526+
azurerm_subnet_route_table_association.test,
527+
]
528+
529+
tags = {
530+
environment = "staging"
531+
database = "test"
532+
}
533+
}
534+
`, r.template(data, data.Locations.Primary), data.RandomInteger, hybridSecondaryUsage)
535+
}
536+
396537
func (r MsSqlManagedInstanceResource) basicZRS(data acceptance.TestData) string {
397538
return fmt.Sprintf(`
398539
%[1]s

website/docs/r/mssql_managed_instance.html.markdown

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,14 @@ The following arguments are supported:
233233

234234
* `collation` - (Optional) Specifies how the SQL Managed Instance will be collated. Default value is `SQL_Latin1_General_CP1_CI_AS`. Changing this forces a new resource to be created.
235235

236+
* `database_format` - (Optional) Specifies the internal format of the SQL Managed Instance databases specific to the SQL engine version. Possible values are `AlwaysUpToDate` and `SQLServer2022`. Defaults to `SQLServer2022`.
237+
238+
~> **NOTE:** Changing `database_format` from `AlwaysUpToDate` to `SQLServer2022` forces a new SQL Managed Instance to be created.
239+
236240
* `dns_zone_partner_id` - (Optional) The ID of the SQL Managed Instance which will share the DNS zone. This is a prerequisite for creating an `azurerm_sql_managed_instance_failover_group`. Setting this after creation forces a new resource to be created.
237241

242+
* `hybrid_secondary_usage` - (Optional) Specifies the hybrid secondary usage for disaster recovery of the SQL Managed Instance. Possible values are `Active` and `Passive`. Defaults to `Active`.
243+
238244
* `identity` - (Optional) An `identity` block as defined below.
239245

240246
* `maintenance_configuration_name` - (Optional) The name of the Public Maintenance Configuration window to apply to the SQL Managed Instance. Valid values include `SQL_Default` or an Azure Location in the format `SQL_{Location}_MI_{Size}`(for example `SQL_EastUS_MI_1`). Defaults to `SQL_Default`.

0 commit comments

Comments
 (0)