github.com/swisspost/terratest@v0.0.0-20230214120104-7ec6de2e1ae0/examples/azure/terraform-azure-servicebus-example/main.tf (about) 1 # --------------------------------------------------------------------------------------------------------------------- 2 # DEPLOY AN AZURE SERVICE BUS 3 # This is an example of how to deploy an Azure service bus. 4 # See test/terraform_azure_example_test.go for how to write automated tests for this code. 5 # --------------------------------------------------------------------------------------------------------------------- 6 7 8 # --------------------------------------------------------------------------------------------------------------------- 9 # CONFIGURE OUR AZURE CONNECTION 10 # --------------------------------------------------------------------------------------------------------------------- 11 12 provider "azurerm" { 13 version = "~>2.29" 14 features {} 15 } 16 17 # --------------------------------------------------------------------------------------------------------------------- 18 # DEPLOY A RESOURCE GROUP 19 # --------------------------------------------------------------------------------------------------------------------- 20 21 resource "azurerm_resource_group" "servicebus_rg" { 22 name = "terratest-sb-rg-${var.postfix}" 23 location = var.location 24 } 25 26 # --------------------------------------------------------------------------------------------------------------------- 27 # Define locals variables 28 # --------------------------------------------------------------------------------------------------------------------- 29 locals { 30 topic_authorization_rules = flatten([ 31 for topic in var.topics : [ 32 for rule in topic.authorization_rules : 33 merge( 34 rule, { 35 topic_name = topic.name 36 }) 37 ] 38 ]) 39 40 topic_subscriptions = flatten([ 41 for topic in var.topics : [ 42 for subscription in topic.subscriptions : 43 merge( 44 subscription, { 45 topic_name = topic.name 46 }) 47 ] 48 ]) 49 50 topic_subscription_rules = flatten([ 51 for subscription in local.topic_subscriptions : 52 merge({ 53 filter_type = "" 54 sql_filter = "" 55 action = "" 56 }, subscription, { 57 topic_name = subscription.topic_name 58 subscription_name = subscription.name 59 }) 60 if subscription.filter_type != null 61 ]) 62 } 63 64 # --------------------------------------------------------------------------------------------------------------------- 65 # DEPLOY AZURE Service Bus Namespace 66 # --------------------------------------------------------------------------------------------------------------------- 67 resource "azurerm_servicebus_namespace" "servicebus" { 68 name = "terratest-namespace-${var.namespace_name}" 69 location = azurerm_resource_group.servicebus_rg.location 70 resource_group_name = azurerm_resource_group.servicebus_rg.name 71 sku = var.sku 72 tags = var.tags 73 } 74 75 # --------------------------------------------------------------------------------------------------------------------- 76 # DEPLOY AZURE Service Bus Namespace Authorization Rule 77 # --------------------------------------------------------------------------------------------------------------------- 78 resource "azurerm_servicebus_namespace_authorization_rule" "sbnamespaceauth" { 79 count = length(var.namespace_authorization_rules) 80 81 name = var.namespace_authorization_rules[count.index].policy_name 82 namespace_name = azurerm_servicebus_namespace.servicebus.name 83 resource_group_name = azurerm_resource_group.servicebus_rg.name 84 85 listen = var.namespace_authorization_rules[count.index].claims.listen 86 send = var.namespace_authorization_rules[count.index].claims.send 87 manage = var.namespace_authorization_rules[count.index].claims.manage 88 } 89 90 # --------------------------------------------------------------------------------------------------------------------- 91 # DEPLOY AZURE Service Bus Topic 92 # --------------------------------------------------------------------------------------------------------------------- 93 resource "azurerm_servicebus_topic" "sptopic" { 94 count = length(var.topics) 95 96 name = var.topics[count.index].name 97 resource_group_name = azurerm_resource_group.servicebus_rg.name 98 namespace_name = azurerm_servicebus_namespace.servicebus.name 99 100 requires_duplicate_detection = var.topics[count.index].requires_duplicate_detection 101 default_message_ttl = var.topics[count.index].default_message_ttl 102 enable_partitioning = var.topics[count.index].enable_partitioning 103 support_ordering = var.topics[count.index].support_ordering 104 } 105 106 # --------------------------------------------------------------------------------------------------------------------- 107 # DEPLOY AZURE Service Bus Topic Authorization Rule 108 # --------------------------------------------------------------------------------------------------------------------- 109 resource "azurerm_servicebus_topic_authorization_rule" "topicaauth" { 110 count = length(local.topic_authorization_rules) 111 112 name = local.topic_authorization_rules[count.index].policy_name 113 resource_group_name = azurerm_resource_group.servicebus_rg.name 114 namespace_name = azurerm_servicebus_namespace.servicebus.name 115 topic_name = local.topic_authorization_rules[count.index].topic_name 116 117 listen = local.topic_authorization_rules[count.index].claims.listen 118 send = local.topic_authorization_rules[count.index].claims.send 119 manage = local.topic_authorization_rules[count.index].claims.manage 120 121 depends_on = [azurerm_servicebus_topic.sptopic] 122 } 123 124 # --------------------------------------------------------------------------------------------------------------------- 125 # DEPLOY AZURE Service Bus Subscription 126 # --------------------------------------------------------------------------------------------------------------------- 127 resource "azurerm_servicebus_subscription" "subscription" { 128 count = length(local.topic_subscriptions) 129 130 name = local.topic_subscriptions[count.index].name 131 resource_group_name = azurerm_resource_group.servicebus_rg.name 132 namespace_name = azurerm_servicebus_namespace.servicebus.name 133 topic_name = local.topic_subscriptions[count.index].topic_name 134 135 max_delivery_count = local.topic_subscriptions[count.index].max_delivery_count 136 lock_duration = local.topic_subscriptions[count.index].lock_duration 137 forward_to = local.topic_subscriptions[count.index].forward_to 138 dead_lettering_on_message_expiration = local.topic_subscriptions[count.index].dead_lettering_on_message_expiration 139 140 depends_on = [azurerm_servicebus_topic.sptopic] 141 } 142 143 # --------------------------------------------------------------------------------------------------------------------- 144 # DEPLOY AZURE Service Bus Subscription Rules 145 # --------------------------------------------------------------------------------------------------------------------- 146 resource "azurerm_servicebus_subscription_rule" "subrules" { 147 count = length(local.topic_subscription_rules) 148 149 name = local.topic_subscription_rules[count.index].name 150 resource_group_name = azurerm_resource_group.servicebus_rg.name 151 namespace_name = azurerm_servicebus_namespace.servicebus.name 152 topic_name = local.topic_subscription_rules[count.index].topic_name 153 subscription_name = local.topic_subscription_rules[count.index].subscription_name 154 filter_type = local.topic_subscription_rules[count.index].filter_type != "" ? "SqlFilter" : null 155 sql_filter = local.topic_subscription_rules[count.index].sql_filter 156 action = local.topic_subscription_rules[count.index].action 157 158 depends_on = [azurerm_servicebus_subscription.subscription] 159 }