diff --git a/src/_variables.resources.tf b/src/_variables.resources.tf index e48bef3b..fa58dd4d 100644 --- a/src/_variables.resources.tf +++ b/src/_variables.resources.tf @@ -12,6 +12,8 @@ variable "network_interfaces" { default = {} } variable "nat_gateway_public_ip_association" { default = {} } +variable "mssql_failover_groups" { default = {} } + variable "network_interface_security_group_associations" { default = {} } variable "mssql_virtual_machines" { default = {} } diff --git a/src/modules/mssql_failover_group/_locals.tf b/src/modules/mssql_failover_group/_locals.tf new file mode 100644 index 00000000..4f31fbd1 --- /dev/null +++ b/src/modules/mssql_failover_group/_locals.tf @@ -0,0 +1,25 @@ +locals { + primary_server = var.resources[ + try(var.settings.primary.lz_key, var.client_config.landingzone_key) + ].mssql_servers[var.settings.primary.server_ref] + + secondary_server = try( + var.resources[ + try(var.settings.secondary.lz_key, var.client_config.landingzone_key) + ].mssql_servers[var.settings.secondary.server_ref], + null + ) + + primary_server_id = local.primary_server.id + secondary_server_id = try( + local.secondary_server.id, + var.settings.secondary.server_id + ) + + database_ids = [ + for db_ref in sort(try(var.settings.database_refs, [])) : + local.primary_server.databases[db_ref].id + ] + + tags = try(var.settings.tags, null) +} diff --git a/src/modules/mssql_failover_group/_outputs.tf b/src/modules/mssql_failover_group/_outputs.tf new file mode 100644 index 00000000..12490513 --- /dev/null +++ b/src/modules/mssql_failover_group/_outputs.tf @@ -0,0 +1,7 @@ +output "id" { + value = azurerm_mssql_failover_group.main.id +} + +output "name" { + value = azurerm_mssql_failover_group.main.name +} \ No newline at end of file diff --git a/src/modules/mssql_failover_group/_variables.tf b/src/modules/mssql_failover_group/_variables.tf new file mode 100644 index 00000000..bb7a9d86 --- /dev/null +++ b/src/modules/mssql_failover_group/_variables.tf @@ -0,0 +1,18 @@ +variable "global_settings" { + description = "Global settings for tinycaf" +} + +variable "settings" { + description = "All the configuration for this resource" +} + +variable "resources" { + description = "All required resources" +} + +variable "client_config" { + description = "Client config such as current landingzone key" + type = object({ + landingzone_key = string + }) +} diff --git a/src/modules/mssql_failover_group/main.tf b/src/modules/mssql_failover_group/main.tf new file mode 100644 index 00000000..8fba8e00 --- /dev/null +++ b/src/modules/mssql_failover_group/main.tf @@ -0,0 +1,42 @@ +resource "azurerm_mssql_failover_group" "main" { + name = var.settings.name + server_id = local.primary_server_id + + partner_server { + id = local.secondary_server_id + } + + databases = local.database_ids + + dynamic "read_write_endpoint_failover_policy" { + for_each = ( + try(var.settings.read_write_endpoint_failover_policy.mode, "Automatic") == "Manual" + ? [1] + : [] + ) + + content { + mode = "Manual" + } + } + + dynamic "read_write_endpoint_failover_policy" { + for_each = ( + try(var.settings.read_write_endpoint_failover_policy.mode, "Automatic") != "Manual" + ? [1] + : [] + ) + + content { + mode = try(var.settings.read_write_endpoint_failover_policy.mode, "Automatic") + grace_minutes = try(var.settings.read_write_endpoint_failover_policy.grace_minutes, 60) + } + } + readonly_endpoint_failover_policy_enabled = try( + var.settings.readonly_endpoint_failover_policy.enabled, + false + ) + + tags = local.tags + +} diff --git a/src/modules/mssql_server/_outputs.tf b/src/modules/mssql_server/_outputs.tf index f062ede7..0e7143b3 100644 --- a/src/modules/mssql_server/_outputs.tf +++ b/src/modules/mssql_server/_outputs.tf @@ -9,3 +9,8 @@ output "name" { output "fully_qualified_domain_name" { value = azurerm_mssql_server.main.fully_qualified_domain_name } + +output "databases" { + description = "Map of database refs to database module outputs (includes id)" + value = module.mssql_databases +} diff --git a/src/mssql_servers.tf b/src/mssql_servers.tf index 9da908e3..e8dd0073 100644 --- a/src/mssql_servers.tf +++ b/src/mssql_servers.tf @@ -24,3 +24,28 @@ module "mssql_servers" { } ) } + + +module "mssql_failover_group" { + source = "./modules/mssql_failover_group" + for_each = var.mssql_failover_groups + + settings = each.value + global_settings = local.global_settings + client_config = { + landingzone_key = var.landingzone.key + } + + resources = merge( + { + (var.landingzone.key) = { + mssql_servers = module.mssql_servers + } + }, + { + for k, v in module.remote_states : k => v.outputs + } + ) +} + +