modules/connectivity/variables.tf (385 lines of code) (raw):
# The following variables are used to determine the archetype
# definition to use and create the required resources.
#
# Further information provided within the description block
# for each variable
variable "enabled" {
type = bool
description = "Controls whether to manage the connectivity landing zone policies and deploy the connectivity resources into the current Subscription context."
}
variable "root_id" {
type = string
description = "Specifies the ID of the Enterprise-scale root Management Group, used as a prefix for resources created by this module."
validation {
condition = can(regex("[a-zA-Z0-9-_\\(\\)\\.]", var.root_id))
error_message = "Value must consist of alphanumeric characters and hyphens."
}
}
variable "subscription_id" {
type = string
description = "Specifies the Subscription ID for the Subscription containing all connectivity resources."
validation {
condition = can(regex("^[a-z0-9-]{36}$", var.subscription_id)) || var.subscription_id == ""
error_message = "Value must be a valid Subscription ID (GUID)."
}
}
variable "location" {
type = string
description = "Sets the default location used for resource deployments where needed."
default = "eastus"
}
variable "tags" {
type = map(string)
description = "If specified, will set the default tags for all resources deployed by this module where supported."
default = {}
}
variable "settings" {
type = object({
hub_networks = optional(list(
object({
enabled = optional(bool, true)
config = object({
address_space = list(string)
location = optional(string, "")
link_to_ddos_protection_plan = optional(bool, false)
dns_servers = optional(list(string), [])
bgp_community = optional(string, "")
subnets = optional(list(
object({
name = string
address_prefixes = list(string)
network_security_group_id = optional(string, "")
route_table_id = optional(string, "")
})
), [])
virtual_network_gateway = optional(object({
enabled = optional(bool, false)
config = optional(object({
address_prefix = optional(string, "")
gateway_sku_expressroute = optional(string, "")
gateway_sku_vpn = optional(string, "")
remote_vnet_traffic_enabled = optional(bool, false)
virtual_wan_traffic_enabled = optional(bool, false)
advanced_vpn_settings = optional(object({
enable_bgp = optional(bool, null)
active_active = optional(bool, null)
private_ip_address_allocation = optional(string, "")
default_local_network_gateway_id = optional(string, "")
vpn_client_configuration = optional(list(
object({
address_space = list(string)
aad_tenant = optional(string, null)
aad_audience = optional(string, null)
aad_issuer = optional(string, null)
root_certificate = optional(list(
object({
name = string
public_cert_data = string
})
), [])
revoked_certificate = optional(list(
object({
name = string
thumbprint = string
})
), [])
radius_server_address = optional(string, null)
radius_server_secret = optional(string, null)
vpn_client_protocols = optional(list(string), null)
vpn_auth_types = optional(list(string), null)
})
), [])
bgp_settings = optional(list(
object({
asn = optional(number, null)
peer_weight = optional(number, null)
peering_addresses = optional(list(
object({
ip_configuration_name = optional(string, null)
apipa_addresses = optional(list(string), null)
})
), [])
})
), [])
custom_route = optional(list(
object({
address_prefixes = optional(list(string), [])
})
), [])
}), {})
}), {})
}), {})
azure_firewall = optional(object({
enabled = optional(bool, false)
config = optional(object({
address_prefix = optional(string, "")
address_management_prefix = optional(string, "")
enable_dns_proxy = optional(bool, true)
dns_servers = optional(list(string), [])
sku_tier = optional(string, "Standard")
base_policy_id = optional(string, "")
private_ip_ranges = optional(list(string), [])
threat_intelligence_mode = optional(string, "Alert")
threat_intelligence_allowlist = optional(map(list(string)), {})
availability_zones = optional(object({
zone_1 = optional(bool, true)
zone_2 = optional(bool, true)
zone_3 = optional(bool, true)
}), {})
}), {})
}), {})
spoke_virtual_network_resource_ids = optional(list(string), [])
enable_outbound_virtual_network_peering = optional(bool, false)
enable_hub_network_mesh_peering = optional(bool, false)
})
})
), [])
vwan_hub_networks = optional(list(
object({
enabled = optional(bool, true)
config = object({
address_prefix = string
location = string
sku = optional(string, "")
routes = optional(list(
object({
address_prefixes = list(string)
next_hop_ip_address = string
})
), [])
routing_intent = optional(object({
enabled = optional(bool, false)
config = optional(object({
routing_policies = optional(list(object({
name = string
destinations = list(string)
})), [])
}), {})
}), {})
expressroute_gateway = optional(object({
enabled = optional(bool, false)
config = optional(object({
scale_unit = optional(number, 1)
allow_non_virtual_wan_traffic = optional(bool, false)
}), {})
}), {})
vpn_gateway = optional(object({
enabled = optional(bool, false)
config = optional(object({
bgp_settings = optional(list(
object({
asn = number
peer_weight = number
instance_0_bgp_peering_address = optional(list(
object({
custom_ips = list(string)
})
), [])
instance_1_bgp_peering_address = optional(list(
object({
custom_ips = list(string)
})
), [])
})
), [])
routing_preference = optional(string, "Microsoft Network")
scale_unit = optional(number, 1)
}), {})
}), {})
azure_firewall = optional(object({
enabled = optional(bool, false)
config = optional(object({
enable_dns_proxy = optional(bool, true)
dns_servers = optional(list(string), [])
sku_tier = optional(string, "Standard")
base_policy_id = optional(string, "")
private_ip_ranges = optional(list(string), [])
threat_intelligence_mode = optional(string, "Alert")
threat_intelligence_allowlist = optional(map(list(string)), {})
availability_zones = optional(object({
zone_1 = optional(bool, true)
zone_2 = optional(bool, true)
zone_3 = optional(bool, true)
}), {})
}), {})
}), {})
spoke_virtual_network_resource_ids = optional(list(string), [])
secure_spoke_virtual_network_resource_ids = optional(list(string), [])
enable_virtual_hub_connections = optional(bool, false)
})
})
), [])
ddos_protection_plan = optional(object({
enabled = optional(bool, false)
config = optional(object({
location = optional(string, "")
}), {})
}), {})
dns = optional(object({
enabled = optional(bool, true)
config = optional(object({
location = optional(string, "")
enable_private_link_by_service = optional(object({
azure_api_management = optional(bool, true)
azure_app_configuration_stores = optional(bool, true)
azure_arc = optional(bool, true)
azure_arc_guest_configuration = optional(bool, true)
azure_arc_hybrid_resource_provider = optional(bool, true)
azure_arc_kubernetes = optional(bool, true)
azure_automation_dscandhybridworker = optional(bool, true)
azure_automation_webhook = optional(bool, true)
azure_backup = optional(bool, true)
azure_batch_account = optional(bool, true)
azure_bot_service_bot = optional(bool, true)
azure_bot_service_token = optional(bool, true)
azure_cache_for_redis = optional(bool, true)
azure_cache_for_redis_enterprise = optional(bool, true)
azure_container_registry = optional(bool, true)
azure_cosmos_db_cassandra = optional(bool, true)
azure_cosmos_db_gremlin = optional(bool, true)
azure_cosmos_db_mongodb = optional(bool, true)
azure_cosmos_db_sql = optional(bool, true)
azure_cosmos_db_table = optional(bool, true)
azure_data_explorer = optional(bool, true)
azure_data_factory = optional(bool, true)
azure_data_factory_portal = optional(bool, true)
azure_data_health_data_services = optional(bool, true)
azure_data_lake_file_system_gen2 = optional(bool, true)
azure_database_for_mariadb_server = optional(bool, true)
azure_database_for_mysql_server = optional(bool, true)
azure_database_for_postgresql_server = optional(bool, true)
azure_databricks = optional(bool, true)
azure_digital_twins = optional(bool, true)
azure_event_grid_domain = optional(bool, true)
azure_event_grid_topic = optional(bool, true)
azure_event_hubs_namespace = optional(bool, true)
azure_file_sync = optional(bool, true)
azure_hdinsights = optional(bool, true)
azure_iot_dps = optional(bool, true)
azure_iot_hub = optional(bool, true)
azure_key_vault = optional(bool, true)
azure_key_vault_managed_hsm = optional(bool, true)
azure_kubernetes_service_management = optional(bool, true)
azure_machine_learning_workspace = optional(bool, true)
azure_managed_disks = optional(bool, true)
azure_managed_grafana = optional(bool, true)
azure_media_services = optional(bool, true)
azure_migrate = optional(bool, true)
azure_monitor = optional(bool, true)
azure_openai_service = optional(bool, true)
azure_purview_account = optional(bool, true)
azure_purview_studio = optional(bool, true)
azure_relay_namespace = optional(bool, true)
azure_search_service = optional(bool, true)
azure_service_bus_namespace = optional(bool, true)
azure_site_recovery = optional(bool, true)
azure_sql_database_sqlserver = optional(bool, true)
azure_synapse_analytics_dev = optional(bool, true)
azure_synapse_analytics_sql = optional(bool, true)
azure_synapse_studio = optional(bool, true)
azure_virtual_desktop = optional(bool, true)
azure_web_apps_sites = optional(bool, true)
azure_web_apps_static_sites = optional(bool, true)
cognitive_services_account = optional(bool, true)
microsoft_power_bi = optional(bool, true)
signalr = optional(bool, true)
signalr_webpubsub = optional(bool, true)
storage_account_blob = optional(bool, true)
storage_account_file = optional(bool, true)
storage_account_queue = optional(bool, true)
storage_account_table = optional(bool, true)
storage_account_web = optional(bool, true)
}), {})
private_link_locations = optional(list(string), [])
public_dns_zones = optional(list(string), [])
private_dns_zones = optional(list(string), [])
enable_private_dns_zone_virtual_network_link_on_hubs = optional(bool, true)
enable_private_dns_zone_virtual_network_link_on_spokes = optional(bool, true)
virtual_network_resource_ids_to_link = optional(list(string), [])
}), {})
}), {})
})
description = "If specified, will customize the \"Connectivity\" landing zone settings and resources."
default = {}
}
variable "resource_prefix" {
type = string
description = "If specified, will set the resource name prefix for connectivity resources (default value determined from \"var.root_id\")."
default = ""
validation {
condition = can(regex("^[a-zA-Z0-9-]{2,10}$", var.resource_prefix)) || var.resource_prefix == ""
error_message = "Value must be between 2 to 10 characters long, consisting of alphanumeric characters and hyphens."
}
}
variable "resource_suffix" {
type = string
description = "If specified, will set the resource name suffix for connectivity resources."
default = ""
validation {
condition = can(regex("^[a-zA-Z0-9-]{2,36}$", var.resource_suffix)) || var.resource_suffix == ""
error_message = "Value must be between 2 to 36 characters long, consisting of alphanumeric characters and hyphens."
}
}
variable "existing_ddos_protection_plan_resource_id" {
type = string
description = "If specified, module will skip creation of DDoS Protection Plan and use existing."
default = ""
}
variable "existing_virtual_wan_resource_id" {
type = string
description = "If specified, module will skip creation of the Virtual WAN and use existing. All Virtual Hubs created by the module will be associated with the specified Virtual WAN."
default = ""
}
variable "existing_virtual_wan_resource_group_name" {
type = string
description = "If specified, module will skip creation of the Virtual WAN resource group and use existing. All Virtual Hubs created by the module will be created in the specified Virtual WAN resource group."
default = ""
}
variable "resource_group_per_virtual_hub_location" {
type = bool
description = "If set to true, module will place each Virtual Hub (and associated resources) in a location-specific Resource Group. Default behaviour is to colocate Virtual Hub resources in the same Resource Group as the Virtual WAN resource."
default = false
}
variable "custom_azure_backup_geo_codes" {
type = map(string)
description = <<DESCRIPTION
If specified, the custom_azure_backup_geo_codes variable will override or append Geo Codes (value) used to generate region-specific DNS zone names for Azure Backup private endpoints.
For more information, please refer to: https://learn.microsoft.com/azure/backup/private-endpoints#when-using-custom-dns-server-or-host-files
DESCRIPTION
default = {}
}
variable "custom_privatelink_azurestaticapps_partitionids" {
type = list(number)
nullable = false
description = <<DESCRIPTION
As a uncertanty in the partition id for the azure static web app, this variable is used to specify the partition ids deployed for the azure static web app private DNS zones.
For more information, please refer to: https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-dns#web and https://learn.microsoft.com/en-us/azure/static-web-apps/private-endpoint
DESCRIPTION
default = [1, 2, 3, 4, 5]
}
variable "custom_settings_by_resource_type" {
type = any
description = "If specified, allows full customization of common settings for all resources (by type) deployed by this module."
default = {}
validation {
condition = (
can([for k in keys(var.custom_settings_by_resource_type) : contains([
"azurerm_dns_zone",
"azurerm_express_route_gateway",
"azurerm_firewall_policy",
"azurerm_firewall",
"azurerm_network_ddos_protection_plan",
"azurerm_private_dns_zone_virtual_network_link",
"azurerm_private_dns_zone",
"azurerm_public_ip",
"azurerm_resource_group",
"azurerm_subnet",
"azurerm_virtual_hub_connection",
"azurerm_virtual_hub",
"azurerm_virtual_network_gateway",
"azurerm_virtual_network_peering",
"azurerm_virtual_network",
"azurerm_virtual_wan",
"azurerm_vpn_gateway",
], k)]) ||
var.custom_settings_by_resource_type == {} ||
var.custom_settings_by_resource_type == null
)
error_message = "Invalid key specified. Please check the list of allowed resource types supported by the connectivity module for caf-enterprise-scale."
}
}