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  }