From 14ae87f84bcd32f961b2316d8aee900e729f445f Mon Sep 17 00:00:00 2001 From: Wyatt Fry Date: Fri, 31 Jan 2025 11:16:19 -0500 Subject: [PATCH] docs update --- examples/mssql/failover-group/test-config.tf | 0 examples/mssql/wyatt-config/main.tf | 231 ++++++++++++++++++ ...d_instance_failover_group_resource_test.go | 6 +- ...aged_instance_failover_group.html.markdown | 223 ++++++++++++----- 4 files changed, 402 insertions(+), 58 deletions(-) create mode 100644 examples/mssql/failover-group/test-config.tf create mode 100644 examples/mssql/wyatt-config/main.tf diff --git a/examples/mssql/failover-group/test-config.tf b/examples/mssql/failover-group/test-config.tf new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/examples/mssql/wyatt-config/main.tf b/examples/mssql/wyatt-config/main.tf new file mode 100644 index 000000000000..7d342bbc1ed5 --- /dev/null +++ b/examples/mssql/wyatt-config/main.tf @@ -0,0 +1,231 @@ +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.108.0" + } + } +} + +provider "azurerm" { + features {} +} + +locals { + name = "acctestwyatt5qlmi" + primary_name = "${local.name}-primary" + primary_location = "West Europe" + failover_name = "${local.name}-failover" + failover_paired_location = "North Europe" +} + +resource "azurerm_resource_group" "primary" { + name = local.primary_name + location = local.primary_location +} + +## Primary Instance + +resource "azurerm_virtual_network" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name + address_space = ["10.0.0.0/16"] +} + +resource "azurerm_subnet" "primary" { + name = local.primary_name + resource_group_name = azurerm_resource_group.primary.name + virtual_network_name = azurerm_virtual_network.primary.name + address_prefixes = ["10.0.1.0/24"] + delegation { + name = "delegation" + service_delegation { + actions = [ + "Microsoft.Network/virtualNetworks/subnets/join/action", + "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", + "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action", + ] + name = "Microsoft.Sql/managedInstances" + } + } +} + +resource "azurerm_network_security_group" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name +} + +resource "azurerm_subnet_network_security_group_association" "primary" { + subnet_id = azurerm_subnet.primary.id + network_security_group_id = azurerm_network_security_group.primary.id +} + +resource "azurerm_route_table" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name +} + +resource "azurerm_subnet_route_table_association" "primary" { + subnet_id = azurerm_subnet.primary.id + route_table_id = azurerm_route_table.primary.id +} + +resource "azurerm_mssql_managed_instance" "primary" { + name = local.primary_name + resource_group_name = azurerm_resource_group.primary.name + location = azurerm_resource_group.primary.location + administrator_login = "mradministrator" + administrator_login_password = "thisIsDog11" + license_type = "BasePrice" + subnet_id = azurerm_subnet.primary.id + sku_name = "GP_Gen5" + vcores = 4 + storage_size_in_gb = 32 + + depends_on = [ + azurerm_subnet_network_security_group_association.primary, + azurerm_subnet_route_table_association.primary, + ] + + tags = { + environment = "prod" + } +} + +## Secondary (Fail-over) Instance + +resource "azurerm_resource_group" "failover" { + name = local.failover_name + location = local.failover_paired_location +} + +resource "azurerm_virtual_network" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name + address_space = ["10.1.0.0/16"] +} + +resource "azurerm_subnet" "default" { + name = "default" + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name + address_prefixes = ["10.1.0.0/24"] +} + +resource "azurerm_subnet" "failover" { + name = "ManagedInstance" + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name + address_prefixes = ["10.1.1.0/24"] + delegation { + name = "delegation" + service_delegation { + actions = [ + "Microsoft.Network/virtualNetworks/subnets/join/action", + "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", + "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action", + ] + name = "Microsoft.Sql/managedInstances" + } + } +} + +resource "azurerm_network_security_group" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name +} + +resource "azurerm_subnet_network_security_group_association" "failover" { + subnet_id = azurerm_subnet.failover.id + network_security_group_id = azurerm_network_security_group.failover.id +} + +resource "azurerm_route_table" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name +} + +resource "azurerm_subnet_route_table_association" "failover" { + subnet_id = azurerm_subnet.failover.id + route_table_id = azurerm_route_table.failover.id +} + +resource "azurerm_mssql_managed_instance" "failover" { + name = local.failover_name + resource_group_name = azurerm_resource_group.failover.name + location = azurerm_resource_group.failover.location + administrator_login = "mradministrator" + administrator_login_password = "thisIsDog11" + license_type = "BasePrice" + subnet_id = azurerm_subnet.failover.id + sku_name = "GP_Gen5" + vcores = 4 + storage_size_in_gb = 32 + dns_zone_partner_id = azurerm_mssql_managed_instance.primary.id + + depends_on = [ + azurerm_subnet_network_security_group_association.failover, + azurerm_subnet_route_table_association.failover, + ] +} + +resource "azurerm_mssql_managed_instance_failover_group" "example" { + name = "example-failover-group" + location = azurerm_mssql_managed_instance.primary.location + managed_instance_id = azurerm_mssql_managed_instance.primary.id + partner_managed_instance_id = azurerm_mssql_managed_instance.failover.id + secondary_type = "Standby" + + read_write_endpoint_failover_policy { + mode = "Automatic" + grace_minutes = 60 + } + + depends_on = [ + azurerm_private_dns_zone_virtual_network_link.primary, + azurerm_private_dns_zone_virtual_network_link.failover, + ] +} + +resource "azurerm_virtual_network_peering" "failover_to_primary" { + name = "failover-to-primary" + remote_virtual_network_id = azurerm_virtual_network.primary.id + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name +} + +resource "azurerm_virtual_network_peering" "primary_to_failover" { + name = "primary-to-failover" + remote_virtual_network_id = azurerm_virtual_network.failover.id + resource_group_name = azurerm_resource_group.primary.name + virtual_network_name = azurerm_virtual_network.primary.name +} + +resource "azurerm_private_dns_zone" "example" { + name = "${local.name}.private" + resource_group_name = azurerm_resource_group.primary.name +} + +resource "azurerm_private_dns_zone_virtual_network_link" "primary" { + name = "primary-link" + resource_group_name = azurerm_resource_group.primary.name + private_dns_zone_name = azurerm_private_dns_zone.example.name + virtual_network_id = azurerm_virtual_network.primary.id +} + +resource "azurerm_private_dns_zone_virtual_network_link" "failover" { + name = "failover-link" + resource_group_name = azurerm_private_dns_zone.example.resource_group_name + private_dns_zone_name = azurerm_private_dns_zone.example.name + virtual_network_id = azurerm_virtual_network.failover.id +} + +output "debug" { + value = azurerm_private_dns_zone.example.id +} \ No newline at end of file diff --git a/internal/services/mssqlmanagedinstance/mssql_managed_instance_failover_group_resource_test.go b/internal/services/mssqlmanagedinstance/mssql_managed_instance_failover_group_resource_test.go index df535cc364d2..4317571ab86d 100644 --- a/internal/services/mssqlmanagedinstance/mssql_managed_instance_failover_group_resource_test.go +++ b/internal/services/mssqlmanagedinstance/mssql_managed_instance_failover_group_resource_test.go @@ -39,6 +39,8 @@ func TestAccMsSqlManagedInstanceFailoverGroup_update(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_mssql_managed_instance_failover_group", "test") r := MsSqlManagedInstanceFailoverGroupResource{} + fmt.Println(r.basic(data, "update")) + data.ResourceTest(t, r, []acceptance.TestStep{ { Config: r.basic(data, "update"), @@ -51,7 +53,7 @@ func TestAccMsSqlManagedInstanceFailoverGroup_update(t *testing.T) { Config: r.update(data), Check: acceptance.ComposeTestCheckFunc( check.That(data.ResourceName).ExistsInAzure(r), - check.That(data.ResourceName).Key("secondary_type").HasValue("Geo"), + check.That(data.ResourceName).Key("secondary_type").HasValue("Standby"), ), }, data.ImportStep(), @@ -106,7 +108,7 @@ resource "azurerm_mssql_managed_instance_failover_group" "test" { location = "%[3]s" managed_instance_id = azurerm_mssql_managed_instance.test.id partner_managed_instance_id = azurerm_mssql_managed_instance.secondary.id - secondary_type = "Geo" + secondary_type = "Standby" readonly_endpoint_failover_policy_enabled = true diff --git a/website/docs/r/mssql_managed_instance_failover_group.html.markdown b/website/docs/r/mssql_managed_instance_failover_group.html.markdown index b08e09b017f3..bbf3854da191 100644 --- a/website/docs/r/mssql_managed_instance_failover_group.html.markdown +++ b/website/docs/r/mssql_managed_instance_failover_group.html.markdown @@ -15,104 +15,215 @@ Manages an Azure SQL Managed Instance Failover Group. -> **Note:** For a more complete example, see the [`./examples/sql-azure/managed_instance_failover_group` directory](https://github.com/hashicorp/terraform-provider-azurerm/tree/main/examples/sql-azure/managed_instance_failover_group) within the GitHub Repository. ```hcl -resource "azurerm_resource_group" "example" { - name = "example-resources" - location = "West Europe" +locals { + name = "mymssqlmitest" + primary_name = "${local.name}-primary" + primary_location = "West Europe" + failover_name = "${local.name}-failover" + failover_paired_location = "North Europe" } -resource "azurerm_virtual_network" "example" { - name = "example" - location = azurerm_resource_group.example.location - resource_group_name = azurerm_resource_group.example.name +resource "azurerm_mssql_managed_instance_failover_group" "example" { + name = "example-failover-group" + location = azurerm_mssql_managed_instance.primary.location + managed_instance_id = azurerm_mssql_managed_instance.primary.id + partner_managed_instance_id = azurerm_mssql_managed_instance.failover.id + secondary_type = "Geo" + read_write_endpoint_failover_policy { + mode = "Automatic" + grace_minutes = 60 + } + depends_on = [ + azurerm_private_dns_zone_virtual_network_link.primary, + azurerm_private_dns_zone_virtual_network_link.failover, + ] +} + +resource "azurerm_private_dns_zone" "example" { + name = "${local.name}.private" + resource_group_name = azurerm_resource_group.primary.name +} + +## Primary SQL Managed Instance +resource "azurerm_resource_group" "primary" { + name = local.primary_name + location = local.primary_location +} + +resource "azurerm_virtual_network" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name address_space = ["10.0.0.0/16"] } -resource "azurerm_subnet" "example" { - name = "example" - resource_group_name = azurerm_resource_group.example.name - virtual_network_name = azurerm_virtual_network.example.name - address_prefixes = ["10.0.2.0/24"] +resource "azurerm_private_dns_zone_virtual_network_link" "primary" { + name = "primary-link" + resource_group_name = azurerm_resource_group.primary.name + private_dns_zone_name = azurerm_private_dns_zone.example.name + virtual_network_id = azurerm_virtual_network.primary.id } -resource "azurerm_network_security_group" "example" { - name = "example" - location = azurerm_resource_group.example.location - resource_group_name = azurerm_resource_group.example.name +resource "azurerm_subnet" "primary" { + name = local.primary_name + resource_group_name = azurerm_resource_group.primary.name + virtual_network_name = azurerm_virtual_network.primary.name + address_prefixes = ["10.0.1.0/24"] + delegation { + name = "delegation" + service_delegation { + actions = [ + "Microsoft.Network/virtualNetworks/subnets/join/action", + "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", + "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action", + ] + name = "Microsoft.Sql/managedInstances" + } + } } -resource "azurerm_subnet_network_security_group_association" "example" { - subnet_id = azurerm_subnet.example.id - network_security_group_id = azurerm_network_security_group.example.id +resource "azurerm_network_security_group" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name } -resource "azurerm_route_table" "example" { - name = "example" - location = azurerm_resource_group.example.location - resource_group_name = azurerm_resource_group.example.name +resource "azurerm_subnet_network_security_group_association" "primary" { + subnet_id = azurerm_subnet.primary.id + network_security_group_id = azurerm_network_security_group.primary.id } -resource "azurerm_subnet_route_table_association" "example" { - subnet_id = azurerm_subnet.example.id - route_table_id = azurerm_route_table.example.id +resource "azurerm_route_table" "primary" { + name = local.primary_name + location = azurerm_resource_group.primary.location + resource_group_name = azurerm_resource_group.primary.name +} + +resource "azurerm_subnet_route_table_association" "primary" { + subnet_id = azurerm_subnet.primary.id + route_table_id = azurerm_route_table.primary.id } resource "azurerm_mssql_managed_instance" "primary" { - name = "example-primary" - resource_group_name = azurerm_resource_group.example.name - location = azurerm_resource_group.example.location + name = local.primary_name + resource_group_name = azurerm_resource_group.primary.name + location = azurerm_resource_group.primary.location administrator_login = "mradministrator" administrator_login_password = "thisIsDog11" license_type = "BasePrice" - subnet_id = azurerm_subnet.example.id + subnet_id = azurerm_subnet.primary.id sku_name = "GP_Gen5" vcores = 4 storage_size_in_gb = 32 - depends_on = [ - azurerm_subnet_network_security_group_association.example, - azurerm_subnet_route_table_association.example, + azurerm_subnet_network_security_group_association.primary, + azurerm_subnet_route_table_association.primary, ] +} + +resource "azurerm_virtual_network_peering" "primary_to_failover" { + name = "primary-to-failover" + remote_virtual_network_id = azurerm_virtual_network.failover.id + resource_group_name = azurerm_resource_group.primary.name + virtual_network_name = azurerm_virtual_network.primary.name +} - tags = { - environment = "prod" +## Secondary (Fail-over) SQL Managed Instance +resource "azurerm_resource_group" "failover" { + name = local.failover_name + location = local.failover_paired_location +} + +resource "azurerm_virtual_network" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name + address_space = ["10.1.0.0/16"] +} + +resource "azurerm_private_dns_zone_virtual_network_link" "failover" { + name = "failover-link" + resource_group_name = azurerm_private_dns_zone.example.resource_group_name + private_dns_zone_name = azurerm_private_dns_zone.example.name + virtual_network_id = azurerm_virtual_network.failover.id +} + +resource "azurerm_subnet" "default" { + name = "default" + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name + address_prefixes = ["10.1.0.0/24"] +} + +resource "azurerm_subnet" "failover" { + name = "ManagedInstance" + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name + address_prefixes = ["10.1.1.0/24"] + delegation { + name = "delegation" + service_delegation { + actions = [ + "Microsoft.Network/virtualNetworks/subnets/join/action", + "Microsoft.Network/virtualNetworks/subnets/prepareNetworkPolicies/action", + "Microsoft.Network/virtualNetworks/subnets/unprepareNetworkPolicies/action", + ] + name = "Microsoft.Sql/managedInstances" + } } } -resource "azurerm_mssql_managed_instance" "secondary" { - name = "example-secondary" - resource_group_name = azurerm_resource_group.example.name - location = azurerm_resource_group.example.location +resource "azurerm_network_security_group" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name +} + +resource "azurerm_subnet_network_security_group_association" "failover" { + subnet_id = azurerm_subnet.failover.id + network_security_group_id = azurerm_network_security_group.failover.id +} + +resource "azurerm_route_table" "failover" { + name = local.failover_name + location = azurerm_resource_group.failover.location + resource_group_name = azurerm_resource_group.failover.name +} + +resource "azurerm_subnet_route_table_association" "failover" { + subnet_id = azurerm_subnet.failover.id + route_table_id = azurerm_route_table.failover.id +} + +resource "azurerm_mssql_managed_instance" "failover" { + name = local.failover_name + resource_group_name = azurerm_resource_group.failover.name + location = azurerm_resource_group.failover.location administrator_login = "mradministrator" administrator_login_password = "thisIsDog11" license_type = "BasePrice" - subnet_id = azurerm_subnet.example.id + subnet_id = azurerm_subnet.failover.id sku_name = "GP_Gen5" vcores = 4 storage_size_in_gb = 32 + dns_zone_partner_id = azurerm_mssql_managed_instance.primary.id depends_on = [ - azurerm_subnet_network_security_group_association.example, - azurerm_subnet_route_table_association.example, + azurerm_subnet_network_security_group_association.failover, + azurerm_subnet_route_table_association.failover, ] - - tags = { - environment = "prod" - } } -resource "azurerm_mssql_managed_instance_failover_group" "example" { - name = "example-failover-group" - location = azurerm_mssql_managed_instance.primary.location - managed_instance_id = azurerm_mssql_managed_instance.primary.id - partner_managed_instance_id = azurerm_mssql_managed_instance.secondary.id - - read_write_endpoint_failover_policy { - mode = "Automatic" - grace_minutes = 60 - } +resource "azurerm_virtual_network_peering" "failover_to_primary" { + name = "failover-to-primary" + remote_virtual_network_id = azurerm_virtual_network.primary.id + resource_group_name = azurerm_resource_group.failover.name + virtual_network_name = azurerm_virtual_network.failover.name } ``` +-> **Note:** There are many prerequisites that must be in place before creating the failover group. To see them all, refer to [Configure a failover group for Azure SQL Managed Instance](https://learn.microsoft.com/en-us/azure/azure-sql/managed-instance/failover-group-configure-sql-mi). + ## Arguments Reference The following arguments are supported: