main.queues.tf (71 lines of code) (raw):
resource "azurerm_servicebus_queue" "base_queues" {
for_each = local.base_queues
name = each.key
namespace_id = azurerm_servicebus_namespace.this.id
auto_delete_on_idle = var.sku != local.basic_sku_name ? each.value.auto_delete_on_idle : null
batched_operations_enabled = each.value.enable_batched_operations
dead_lettering_on_message_expiration = each.value.dead_lettering_on_message_expiration
default_message_ttl = each.value.default_message_ttl
duplicate_detection_history_time_window = each.value.duplicate_detection_history_time_window
express_enabled = var.sku == local.standard_sku_name ? each.value.enable_express : null
forward_dead_lettered_messages_to = each.value.forward_dead_lettered_messages_to
forward_to = var.sku != local.basic_sku_name ? each.value.forward_to : null
lock_duration = each.value.lock_duration
max_delivery_count = each.value.max_delivery_count
max_message_size_in_kilobytes = var.sku == local.premium_sku_name ? coalesce(each.value.max_message_size_in_kilobytes, local.smallest_premium_max_message_size_in_kilobytes) : null
max_size_in_megabytes = each.value.max_size_in_megabytes
partitioning_enabled = var.sku != local.premium_sku_name ? each.value.enable_partitioning : local.normalized_premium_messaging_partitions > 1
requires_duplicate_detection = var.sku != local.basic_sku_name ? each.value.requires_duplicate_detection : null
requires_session = var.sku != local.basic_sku_name ? each.value.requires_session : null
status = each.value.status
lifecycle {
precondition {
condition = var.sku != local.premium_sku_name || each.value.max_message_size_in_kilobytes == null ? true : var.sku == local.premium_sku_name && each.value.max_message_size_in_kilobytes >= local.smallest_premium_max_message_size_in_kilobytes && each.value.max_message_size_in_kilobytes <= local.biggest_premium_max_message_size_in_kilobytes
error_message = "The max_message_size_in_kilobytes parameter if specified must be between ${local.smallest_premium_max_message_size_in_kilobytes} and ${local.biggest_premium_max_message_size_in_kilobytes} for Premium"
}
precondition {
condition = var.sku == local.standard_sku_name && coalesce(each.value.enable_express, false) && coalesce(each.value.requires_duplicate_detection, false) ? false : true
error_message = "The requires_duplicate_detection parameter must be false when enable_express is true for Standard"
}
}
}
resource "azurerm_servicebus_queue" "forward_queues" {
for_each = local.forward_queues
name = each.key
namespace_id = azurerm_servicebus_namespace.this.id
auto_delete_on_idle = var.sku != local.basic_sku_name ? each.value.auto_delete_on_idle : null
batched_operations_enabled = each.value.enable_batched_operations
dead_lettering_on_message_expiration = each.value.dead_lettering_on_message_expiration
default_message_ttl = each.value.default_message_ttl
duplicate_detection_history_time_window = each.value.duplicate_detection_history_time_window
express_enabled = var.sku == local.standard_sku_name ? each.value.enable_express : null
forward_dead_lettered_messages_to = each.value.forward_dead_lettered_messages_to
forward_to = var.sku != local.basic_sku_name ? each.value.forward_to : null
lock_duration = each.value.lock_duration
max_delivery_count = each.value.max_delivery_count
max_message_size_in_kilobytes = var.sku == local.premium_sku_name ? coalesce(each.value.max_message_size_in_kilobytes, local.smallest_premium_max_message_size_in_kilobytes) : null
max_size_in_megabytes = each.value.max_size_in_megabytes
partitioning_enabled = var.sku != local.premium_sku_name ? each.value.enable_partitioning : local.normalized_premium_messaging_partitions > 1
requires_duplicate_detection = var.sku != local.basic_sku_name ? each.value.requires_duplicate_detection : null
requires_session = var.sku != local.basic_sku_name ? each.value.requires_session : null
status = each.value.status
depends_on = [azurerm_servicebus_queue.base_queues]
lifecycle {
precondition {
condition = var.sku != local.premium_sku_name || each.value.max_message_size_in_kilobytes == null ? true : var.sku == local.premium_sku_name && each.value.max_message_size_in_kilobytes >= local.smallest_premium_max_message_size_in_kilobytes && each.value.max_message_size_in_kilobytes <= local.biggest_premium_max_message_size_in_kilobytes
error_message = "The max_message_size_in_kilobytes parameter if specified must be between ${local.smallest_premium_max_message_size_in_kilobytes} and ${local.biggest_premium_max_message_size_in_kilobytes} for Premium"
}
precondition {
condition = var.sku == local.standard_sku_name && coalesce(each.value.enable_express, false) && coalesce(each.value.requires_duplicate_detection, false) ? false : true
error_message = "The requires_duplicate_detection parameter must be false when enable_express is true for Standard"
}
}
}
resource "azurerm_servicebus_queue_authorization_rule" "this" {
for_each = local.queue_rules
name = each.value.rule_name
queue_id = try(azurerm_servicebus_queue.base_queues[each.value.queue_name].id, azurerm_servicebus_queue.forward_queues[each.value.queue_name].id)
listen = each.value.rule_params.manage ? true : each.value.rule_params.listen
manage = each.value.rule_params.manage
send = each.value.rule_params.manage ? true : each.value.rule_params.send
}