diff --git a/examples/dapr_component/README.md b/examples/dapr_component/README.md index 2dcddcb..2219f95 100644 --- a/examples/dapr_component/README.md +++ b/examples/dapr_component/README.md @@ -16,7 +16,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -27,14 +31,14 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } module "managedenvironment" { diff --git a/examples/dapr_component/main.tf b/examples/dapr_component/main.tf index b47f521..c01b290 100644 --- a/examples/dapr_component/main.tf +++ b/examples/dapr_component/main.tf @@ -10,7 +10,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -21,14 +25,14 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } module "managedenvironment" { diff --git a/examples/default/README.md b/examples/default/README.md index f6b5255..390e890 100644 --- a/examples/default/README.md +++ b/examples/default/README.md @@ -16,7 +16,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -27,14 +31,14 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } module "managedenvironment" { diff --git a/examples/default/main.tf b/examples/default/main.tf index 27dc4ee..95b540f 100644 --- a/examples/default/main.tf +++ b/examples/default/main.tf @@ -10,7 +10,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -21,14 +25,14 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } module "managedenvironment" { diff --git a/examples/storage_share/README.md b/examples/storage_share/README.md index ae09047..9679c2b 100644 --- a/examples/storage_share/README.md +++ b/examples/storage_share/README.md @@ -16,7 +16,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -27,28 +31,28 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } resource "azurerm_storage_account" "this" { + account_replication_type = "LRS" + account_tier = "Standard" + location = azurerm_resource_group.this.location name = module.naming.storage_account.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location - account_tier = "Standard" - account_replication_type = "LRS" } resource "azurerm_storage_share" "this" { name = "sharename" - storage_account_name = azurerm_storage_account.this.name quota = 5 + storage_account_name = azurerm_storage_account.this.name } module "managedenvironment" { diff --git a/examples/storage_share/main.tf b/examples/storage_share/main.tf index 9b147d6..d695156 100644 --- a/examples/storage_share/main.tf +++ b/examples/storage_share/main.tf @@ -10,7 +10,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -21,28 +25,28 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } resource "azurerm_storage_account" "this" { + account_replication_type = "LRS" + account_tier = "Standard" + location = azurerm_resource_group.this.location name = module.naming.storage_account.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location - account_tier = "Standard" - account_replication_type = "LRS" } resource "azurerm_storage_share" "this" { name = "sharename" - storage_account_name = azurerm_storage_account.this.name quota = 5 + storage_account_name = azurerm_storage_account.this.name } module "managedenvironment" { diff --git a/examples/workload_profile/README.md b/examples/workload_profile/README.md index 895b1aa..f99f06a 100644 --- a/examples/workload_profile/README.md +++ b/examples/workload_profile/README.md @@ -20,7 +20,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -31,31 +35,33 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } # Create the vnet to use with vnet integration resource "azurerm_virtual_network" "this" { - name = module.naming.virtual_network.name_unique + address_space = ["192.168.0.0/23"] location = azurerm_resource_group.this.location + name = module.naming.virtual_network.name_unique resource_group_name = azurerm_resource_group.this.name - address_space = ["192.168.0.0/23"] } resource "azurerm_subnet" "this" { + address_prefixes = ["192.168.0.0/23"] name = module.naming.subnet.name_unique resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name - address_prefixes = ["192.168.0.0/23"] + delegation { name = "Microsoft.App.environments" + service_delegation { name = "Microsoft.App/environments" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] diff --git a/examples/workload_profile/main.tf b/examples/workload_profile/main.tf index 9a3d15e..16086bb 100644 --- a/examples/workload_profile/main.tf +++ b/examples/workload_profile/main.tf @@ -10,7 +10,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -21,31 +25,33 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } # Create the vnet to use with vnet integration resource "azurerm_virtual_network" "this" { - name = module.naming.virtual_network.name_unique + address_space = ["192.168.0.0/23"] location = azurerm_resource_group.this.location + name = module.naming.virtual_network.name_unique resource_group_name = azurerm_resource_group.this.name - address_space = ["192.168.0.0/23"] } resource "azurerm_subnet" "this" { + address_prefixes = ["192.168.0.0/23"] name = module.naming.subnet.name_unique resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name - address_prefixes = ["192.168.0.0/23"] + delegation { name = "Microsoft.App.environments" + service_delegation { name = "Microsoft.App/environments" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] diff --git a/examples/workload_profile_internal/README.md b/examples/workload_profile_internal/README.md index ebe4a2b..c8c2a5e 100644 --- a/examples/workload_profile_internal/README.md +++ b/examples/workload_profile_internal/README.md @@ -16,7 +16,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -27,31 +31,33 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } # Create the vnet to use with vnet integration resource "azurerm_virtual_network" "this" { - name = module.naming.virtual_network.name_unique + address_space = ["192.168.0.0/23"] location = azurerm_resource_group.this.location + name = module.naming.virtual_network.name_unique resource_group_name = azurerm_resource_group.this.name - address_space = ["192.168.0.0/23"] } resource "azurerm_subnet" "this" { + address_prefixes = ["192.168.0.0/23"] name = module.naming.subnet.name_unique resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name - address_prefixes = ["192.168.0.0/23"] + delegation { name = "Microsoft.App.environments" + service_delegation { name = "Microsoft.App/environments" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] diff --git a/examples/workload_profile_internal/main.tf b/examples/workload_profile_internal/main.tf index 35601ef..66f52b3 100644 --- a/examples/workload_profile_internal/main.tf +++ b/examples/workload_profile_internal/main.tf @@ -10,7 +10,11 @@ terraform { provider "azurerm" { skip_provider_registration = true - features {} + features { + resource_group { + prevent_deletion_if_contains_resources = false + } + } } # This ensures we have unique CAF compliant names for our resources. @@ -21,31 +25,33 @@ module "naming" { # This is required for resource modules resource "azurerm_resource_group" "this" { - name = module.naming.resource_group.name_unique location = "australiaeast" + name = module.naming.resource_group.name_unique } resource "azurerm_log_analytics_workspace" "this" { + location = azurerm_resource_group.this.location name = module.naming.log_analytics_workspace.name_unique resource_group_name = azurerm_resource_group.this.name - location = azurerm_resource_group.this.location } # Create the vnet to use with vnet integration resource "azurerm_virtual_network" "this" { - name = module.naming.virtual_network.name_unique + address_space = ["192.168.0.0/23"] location = azurerm_resource_group.this.location + name = module.naming.virtual_network.name_unique resource_group_name = azurerm_resource_group.this.name - address_space = ["192.168.0.0/23"] } resource "azurerm_subnet" "this" { + address_prefixes = ["192.168.0.0/23"] name = module.naming.subnet.name_unique resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name - address_prefixes = ["192.168.0.0/23"] + delegation { name = "Microsoft.App.environments" + service_delegation { name = "Microsoft.App/environments" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] diff --git a/locals.telemetry.tf b/locals.telemetry.tf index 0e04de2..6ea9a91 100644 --- a/locals.telemetry.tf +++ b/locals.telemetry.tf @@ -1,14 +1,6 @@ locals { - # This is the unique id AVM Terraform modules that is supplied by the AVM team. - # See https://azure.github.io/Azure-Verified-Modules/specs/shared/#id-sfr3---category-telemetry---deploymentusage-telemetry - telem_puid = "46d3xgtf" - module_name = "app-managedenvironment" module_type = "res" - - # This ensures we don't get errors if telemetry is disabled. - telem_random_hex = can(random_id.telem[0].hex) ? random_id.telem[0].hex : "" - # This constructs the ARM deployment name that is used for the telemetry. # We shouldn't ever hit the 64 character limit but use substr just in case. telem_arm_deployment_name = substr( @@ -23,7 +15,6 @@ locals { 0, 64 ) - # This is an empty ARM deployment template. telem_arm_template_content = jsonencode( { @@ -40,4 +31,9 @@ locals { } } ) + # This is the unique id AVM Terraform modules that is supplied by the AVM team. + # See https://azure.github.io/Azure-Verified-Modules/specs/shared/#id-sfr3---category-telemetry---deploymentusage-telemetry + telem_puid = "46d3xgtf" + # This ensures we don't get errors if telemetry is disabled. + telem_random_hex = can(random_id.telem[0].hex) ? random_id.telem[0].hex : "" } diff --git a/locals.tf b/locals.tf index f388e63..2ff379c 100644 --- a/locals.tf +++ b/locals.tf @@ -1,31 +1,4 @@ locals { - role_definition_resource_substring = "/providers/Microsoft.Authorization/roleDefinitions" - - workload_profile_outputs = jsondecode(azapi_resource.this_environment.body).properties.workloadProfiles != null ? [ - for wp in jsondecode(azapi_resource.this_environment.body).properties.workloadProfiles : merge( - { - name = wp.name - workload_profile_type = wp.workloadProfileType - }, - # minimumCount and maximumCount are not applicable if the workloadProfileType is "Consumption" - wp.workloadProfileType != "Consumption" ? { - minimum_count = wp.minimumCount - maximum_count = wp.maximumCount - } : {} - ) - ] : null - - storages_outputs = { - for sk, sv in azapi_resource.storages : - sk => { - id = sv.id - access_mode = jsondecode(sv.body).properties.azureFile.accessMode - access_key = jsondecode(sv.body).properties.azureFile.accountKey - account_name = jsondecode(sv.body).properties.azureFile.accountName - share_name = jsondecode(sv.body).properties.azureFile.shareName - } - } - dapr_component_outputs = { for dk, dv in azapi_resource.dapr_components : dk => { @@ -53,4 +26,28 @@ locals { ] : null } } + role_definition_resource_substring = "/providers/Microsoft.Authorization/roleDefinitions" + storages_outputs = { + for sk, sv in azapi_resource.storages : + sk => { + id = sv.id + access_mode = jsondecode(sv.body).properties.azureFile.accessMode + access_key = jsondecode(sv.body).properties.azureFile.accountKey + account_name = jsondecode(sv.body).properties.azureFile.accountName + share_name = jsondecode(sv.body).properties.azureFile.shareName + } + } + workload_profile_outputs = jsondecode(azapi_resource.this_environment.body).properties.workloadProfiles != null ? [ + for wp in jsondecode(azapi_resource.this_environment.body).properties.workloadProfiles : merge( + { + name = wp.name + workload_profile_type = wp.workloadProfileType + }, + # minimumCount and maximumCount are not applicable if the workloadProfileType is "Consumption" + wp.workloadProfileType != "Consumption" ? { + minimum_count = wp.minimumCount + maximum_count = wp.maximumCount + } : {} + ) + ] : null } diff --git a/locals.version.tf.json b/locals.version.tf.json index 9b9d12e..6c322ee 100644 --- a/locals.version.tf.json +++ b/locals.version.tf.json @@ -1,5 +1,5 @@ { "locals": { - "module_version": "0.1.1" + "module_version": "0.1.2" } } \ No newline at end of file diff --git a/main.dapr_component.tf b/main.dapr_component.tf index e9ca389..ec1a502 100644 --- a/main.dapr_component.tf +++ b/main.dapr_component.tf @@ -1,9 +1,7 @@ resource "azapi_resource" "dapr_components" { for_each = var.dapr_components - type = "Microsoft.App/managedEnvironments/daprComponents@2023-05-01" - name = each.key - parent_id = azapi_resource.this_environment.id + type = "Microsoft.App/managedEnvironments/daprComponents@2023-05-01" body = jsonencode({ properties = { componentType = each.value.component_type @@ -31,6 +29,8 @@ resource "azapi_resource" "dapr_components" { ] : null } }) + name = each.key + parent_id = azapi_resource.this_environment.id dynamic "timeouts" { for_each = each.value.timeouts == null ? [] : [each.value.timeouts] diff --git a/main.storage.tf b/main.storage.tf index 4b053cd..0a015bc 100644 --- a/main.storage.tf +++ b/main.storage.tf @@ -1,9 +1,7 @@ resource "azapi_resource" "storages" { for_each = var.storages - type = "Microsoft.App/managedEnvironments/storages@2023-05-01" - name = each.key - parent_id = azapi_resource.this_environment.id + type = "Microsoft.App/managedEnvironments/storages@2023-05-01" body = jsonencode({ properties = { azureFile = { @@ -14,6 +12,8 @@ resource "azapi_resource" "storages" { } } }) + name = each.key + parent_id = azapi_resource.this_environment.id dynamic "timeouts" { for_each = each.value.timeouts == null ? [] : [each.value.timeouts] diff --git a/main.telemetry.tf b/main.telemetry.tf index 6d520a6..ca2cca2 100644 --- a/main.telemetry.tf +++ b/main.telemetry.tf @@ -12,7 +12,6 @@ resource "azurerm_resource_group_template_deployment" "telemetry" { deployment_mode = "Incremental" name = local.telem_arm_deployment_name resource_group_name = var.resource_group_name + tags = var.tags template_content = local.telem_arm_template_content - - tags = var.tags } diff --git a/main.tf b/main.tf index 573d79f..87af213 100644 --- a/main.tf +++ b/main.tf @@ -53,6 +53,7 @@ resource "azapi_resource" "this_environment" { ] schema_validation_enabled = true tags = var.tags + dynamic "timeouts" { for_each = var.timeouts == null ? [] : [var.timeouts] content { @@ -86,15 +87,16 @@ resource "azurerm_role_assignment" "this" { } resource "azurerm_monitor_diagnostic_setting" "this" { - for_each = var.diagnostic_settings + for_each = var.diagnostic_settings + name = each.value.name != null ? each.value.name : "diag-${var.name}" target_resource_id = azapi_resource.this_environment.id - storage_account_id = each.value.storage_account_resource_id eventhub_authorization_rule_id = each.value.event_hub_authorization_rule_resource_id eventhub_name = each.value.event_hub_name - partner_solution_id = each.value.marketplace_partner_resource_id - log_analytics_workspace_id = each.value.workspace_resource_id log_analytics_destination_type = each.value.log_analytics_destination_type + log_analytics_workspace_id = each.value.workspace_resource_id + partner_solution_id = each.value.marketplace_partner_resource_id + storage_account_id = each.value.storage_account_resource_id dynamic "enabled_log" { for_each = each.value.log_categories @@ -102,14 +104,12 @@ resource "azurerm_monitor_diagnostic_setting" "this" { category = enabled_log.value } } - dynamic "enabled_log" { for_each = each.value.log_groups content { category_group = enabled_log.value } } - dynamic "metric" { for_each = each.value.metric_categories content { diff --git a/outputs.tf b/outputs.tf index bf34d4b..d17d007 100644 --- a/outputs.tf +++ b/outputs.tf @@ -1,5 +1,17 @@ -# Module owners should include the full resource via a 'resource' output -# https://azure.github.io/Azure-Verified-Modules/specs/terraform/#id-tffr2---category-outputs---additional-terraform-outputs +output "dapr_components" { + description = "A map of dapr components connected to this environment. The map key is the supplied input to var.storages. The map value is the azurerm-formatted version of the entire dapr_components resource." + value = local.dapr_component_outputs +} + +output "id" { + description = "The ID of the resource." + value = azapi_resource.this_environment.id +} + +output "name" { + description = "The name of the resource" + value = azapi_resource.this_environment.name +} output "resource" { description = "The Container Apps Managed Environment resource." @@ -33,22 +45,7 @@ output "resource" { } } -output "id" { - description = "The ID of the resource." - value = azapi_resource.this_environment.id -} - -output "name" { - description = "The name of the resource" - value = azapi_resource.this_environment.name -} - output "storages" { description = "A map of storage shares connected to this environment. The map key is the supplied input to var.storages. The map value is the azurerm-formatted version of the entire storage shares resource." value = local.storages_outputs } - -output "dapr_components" { - description = "A map of dapr components connected to this environment. The map key is the supplied input to var.storages. The map value is the azurerm-formatted version of the entire dapr_components resource." - value = local.dapr_component_outputs -} diff --git a/variables.tf b/variables.tf index dcfb79a..5935c04 100644 --- a/variables.tf +++ b/variables.tf @@ -1,9 +1,3 @@ -variable "location" { - type = string - default = null - description = "Azure region where the resource should be deployed. If null, the location will be inferred from the resource group location." -} - variable "name" { type = string description = "The name of the Container Apps Managed Environment." @@ -90,12 +84,6 @@ If it is set to false, then no telemetry will be collected. DESCRIPTION } -variable "infrastructure_subnet_id" { - type = string - default = null - description = "The existing Subnet to use for the Container Apps Control Plane. **NOTE:** The Subnet must have a `/21` or larger address space." -} - variable "infrastructure_resource_group_name" { type = string default = null @@ -105,12 +93,25 @@ If a subnet ID is provided, this resource group will be created in the same subs If not specified, then one will be generated automatically, in the form ``ME___``. DESCRIPTION } + +variable "infrastructure_subnet_id" { + type = string + default = null + description = "The existing Subnet to use for the Container Apps Control Plane. **NOTE:** The Subnet must have a `/21` or larger address space." +} + variable "internal_load_balancer_enabled" { type = bool default = false description = "Should the Container Environment operate in Internal Load Balancing Mode? Defaults to `false`. **Note:** can only be set to `true` if `infrastructure_subnet_id` is specified." } +variable "location" { + type = string + default = null + description = "Azure region where the resource should be deployed. If null, the location will be inferred from the resource group location." +} + variable "lock" { type = object({ name = optional(string, null) @@ -202,6 +203,12 @@ variable "timeouts" { EOT } +variable "workload_consumption_profile_enabled" { + type = bool + default = false + description = "Whether to use workload profiles, this will create the default Consumption Plan, for dedicated plans use `workload_profiles`" +} + variable "workload_profile" { type = set(object({ maximum_count = number @@ -210,7 +217,6 @@ variable "workload_profile" { workload_profile_type = string })) default = [] - nullable = false description = <<-EOT This lists the workload profiles that will be configured for the Managed Environment. @@ -221,6 +227,7 @@ This is in addition to the default Consumpion Plan workload profile. - `name` - (Required) The name of the workload profile. - `workload_profile_type` - (Required) Workload profile type for the workloads to run on. Possible values include `D4`, `D8`, `D16`, `D32`, `E4`, `E8`, `E16` and `E32`. EOT + nullable = false validation { condition = var.workload_profile == null ? true : can([for wp in var.workload_profile : regex("^[a-zA-Z][a-zA-Z0-9_-]{0,14}[a-zA-Z0-9]$", wp.name)]) @@ -232,12 +239,6 @@ EOT } } -variable "workload_consumption_profile_enabled" { - type = bool - default = false - description = "Whether to use workload profiles, this will create the default Consumption Plan, for dedicated plans use `workload_profiles`" -} - variable "zone_redundancy_enabled" { type = bool default = true