main.tf (71 lines of code) (raw):
resource "azurerm_servicebus_namespace" "this" {
location = var.location
name = var.name
resource_group_name = var.resource_group_name
sku = var.sku
capacity = local.normalized_capacity
local_auth_enabled = var.local_auth_enabled
minimum_tls_version = var.minimum_tls_version
premium_messaging_partitions = local.normalized_premium_messaging_partitions
public_network_access_enabled = var.public_network_access_enabled
tags = var.tags
dynamic "customer_managed_key" {
for_each = var.sku == local.premium_sku_name && var.customer_managed_key != null ? [1] : []
content {
identity_id = var.customer_managed_key.user_assigned_identity.resource_id
key_vault_key_id = local.normalized_cmk_key_url
infrastructure_encryption_enabled = var.infrastructure_encryption_enabled
}
}
dynamic "identity" {
for_each = local.managed_identities.system_assigned_user_assigned
content {
type = identity.value.type
identity_ids = identity.value.user_assigned_resource_ids
}
}
network_rule_set {
default_action = var.network_rule_config.default_action
ip_rules = var.network_rule_config.cidr_or_ip_rules
public_network_access_enabled = var.public_network_access_enabled
trusted_services_allowed = var.network_rule_config.trusted_services_allowed
dynamic "network_rules" {
for_each = var.sku == local.premium_sku_name ? var.network_rule_config.network_rules : []
content {
subnet_id = network_rules.value.subnet_id
ignore_missing_vnet_service_endpoint = false
}
}
}
dynamic "timeouts" {
for_each = var.timeouts == null ? [] : [var.timeouts]
content {
create = timeouts.value.create
delete = timeouts.value.delete
read = timeouts.value.read
update = timeouts.value.update
}
}
# These cases are handled in the normalized_xxx variables. Serves as unit testing in case of future changes to those variables
lifecycle {
precondition {
condition = var.sku != local.premium_sku_name ? local.normalized_premium_messaging_partitions == 0 : true
error_message = "Premium messaging partitions requires Premium SKU"
}
precondition {
condition = var.network_rule_config.default_action == "Deny" && length(var.network_rule_config.cidr_or_ip_rules) == 0 && (var.sku != local.premium_sku_name || length(var.network_rule_config.network_rules) == 0) ? false : true
error_message = "The 'network_rule_config.default_action' can only be set to 'Allow' if no 'network_rule_config.cidr_or_ip_rules' are set and no 'network_rule_config.network_rules' are set for Premium"
}
precondition {
condition = var.sku != local.premium_sku_name ? local.normalized_capacity == 0 : true
error_message = "Capacity parameter requires Premium SKU"
}
}
}
resource "azurerm_servicebus_namespace_authorization_rule" "this" {
for_each = var.authorization_rules
name = coalesce(each.value.name, each.key)
namespace_id = azurerm_servicebus_namespace.this.id
listen = each.value.manage ? true : each.value.listen
manage = each.value.manage
send = each.value.manage ? true : each.value.send
}