-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.tf
233 lines (193 loc) · 8.63 KB
/
main.tf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# data "azurerm_resource_group" "main" {
# name = var.resource_group_name
# }
locals {
authorization_rules = [
for rule in var.authorization_rules : merge({
name = ""
rights = []
}, rule)
]
topics = [
for topic in var.topics : merge({
name = ""
status = "Active"
auto_delete_on_idle = null
default_message_ttl = null
enable_batched_operations = null
enable_express = null
enable_partitioning = null
max_size = null
enable_duplicate_detection = null
enable_ordering = null
authorization_rules = []
subscriptions = []
duplicate_detection_history_time_window = null
}, topic)
]
topic_authorization_rules = flatten([
for topic in local.topics : [
for rule in topic.authorization_rules : merge({
name = ""
rights = []
}, rule, {
topic_name = topic.name
})
]
])
topic_subscriptions = flatten([
for topic in local.topics : [
for subscription in topic.subscriptions :
merge({
name = ""
auto_delete_on_idle = null
default_message_ttl = null
lock_duration = null
enable_batched_operations = null
max_delivery_count = null
enable_session = null
forward_to = null
rules = []
enable_dead_lettering_on_message_expiration = null
}, subscription, {
topic_name = topic.name
})
]
])
topic_subscription_rules = flatten([
for subscription in local.topic_subscriptions : [
for rule in subscription.rules : merge({
name = ""
sql_filter = ""
action = ""
}, rule, {
topic_name = subscription.topic_name
subscription_name = subscription.name
})
]
])
queues = [
for queue in var.queues : merge({
name = ""
auto_delete_on_idle = null
default_message_ttl = null
enable_express = false
enable_partitioning = false
lock_duration = null
max_size = null
enable_duplicate_detection = false
enable_session = false
max_delivery_count = 10
authorization_rules = []
enable_dead_lettering_on_message_expiration = false
duplicate_detection_history_time_window = null
}, queue)
]
queue_authorization_rules = flatten([
for queue in local.queues : [
for rule in queue.authorization_rules : merge({
name = ""
rights = []
}, rule, {
queue_name = queue.name
})
]
])
}
module "labels" {
source = "clouddrove/labels/azure"
version = "1.0.0"
name = var.name
environment = var.environment
managedby = var.managedby
label_order = var.label_order
repository = var.repository
}
resource "azurerm_servicebus_namespace" "main" {
name = format("%s-service-bus", module.labels.id)
location = var.location
resource_group_name = var.resource_group_name
sku = var.sku
capacity = var.capacity
tags = module.labels.tags
}
resource "azurerm_servicebus_namespace_authorization_rule" "main" {
count = length(local.authorization_rules)
name = local.authorization_rules[count.index].name
namespace_id = azurerm_servicebus_namespace.main.id
listen = contains(local.authorization_rules[count.index].rights, "listen") ? true : false
send = contains(local.authorization_rules[count.index].rights, "send") ? true : false
manage = contains(local.authorization_rules[count.index].rights, "manage") ? true : false
}
resource "azurerm_servicebus_topic" "main" {
count = length(local.topics)
name = local.topics[count.index].name
namespace_id = azurerm_servicebus_namespace.main.id
status = local.topics[count.index].status
auto_delete_on_idle = local.topics[count.index].auto_delete_on_idle
default_message_ttl = local.topics[count.index].default_message_ttl
batched_operations_enabled = local.topics[count.index].enable_batched_operations
express_enabled = local.topics[count.index].enable_express
partitioning_enabled = local.topics[count.index].enable_partitioning
max_size_in_megabytes = local.topics[count.index].max_size
requires_duplicate_detection = local.topics[count.index].enable_duplicate_detection
support_ordering = local.topics[count.index].enable_ordering
duplicate_detection_history_time_window = local.topics[count.index].duplicate_detection_history_time_window
}
resource "azurerm_servicebus_topic_authorization_rule" "main" {
count = length(local.topic_authorization_rules)
name = local.topic_authorization_rules[count.index].name
topic_id = azurerm_servicebus_topic.main[count.index].id
listen = contains(local.topic_authorization_rules[count.index].rights, "listen") ? true : false
send = contains(local.topic_authorization_rules[count.index].rights, "send") ? true : false
manage = contains(local.topic_authorization_rules[count.index].rights, "manage") ? true : false
depends_on = [azurerm_servicebus_topic.main]
}
resource "azurerm_servicebus_subscription" "main" {
count = length(local.topic_subscriptions)
name = local.topic_subscriptions[count.index].name
topic_id = azurerm_servicebus_topic.main[count.index].id
max_delivery_count = local.topic_subscriptions[count.index].max_delivery_count
auto_delete_on_idle = local.topic_subscriptions[count.index].auto_delete_on_idle
default_message_ttl = local.topic_subscriptions[count.index].default_message_ttl
lock_duration = local.topic_subscriptions[count.index].lock_duration
batched_operations_enabled = local.topic_subscriptions[count.index].enable_batched_operations
requires_session = local.topic_subscriptions[count.index].enable_session
forward_to = local.topic_subscriptions[count.index].forward_to
dead_lettering_on_message_expiration = local.topic_subscriptions[count.index].enable_dead_lettering_on_message_expiration
depends_on = [azurerm_servicebus_topic.main]
}
resource "azurerm_servicebus_subscription_rule" "main" {
count = length(local.topic_subscription_rules)
name = local.topic_subscription_rules[count.index].name
subscription_id = azurerm_servicebus_subscription.main[count.index].id
filter_type = local.topic_subscription_rules[count.index].sql_filter != "" ? "SqlFilter" : null
sql_filter = local.topic_subscription_rules[count.index].sql_filter
action = local.topic_subscription_rules[count.index].action
depends_on = [azurerm_servicebus_subscription.main]
}
resource "azurerm_servicebus_queue" "main" {
count = length(local.queues)
name = local.queues[count.index].name
namespace_id = azurerm_servicebus_namespace.main.id
auto_delete_on_idle = local.queues[count.index].auto_delete_on_idle
default_message_ttl = local.queues[count.index].default_message_ttl
express_enabled = local.queues[count.index].enable_express
partitioning_enabled = local.queues[count.index].enable_partitioning
lock_duration = local.queues[count.index].lock_duration
max_size_in_megabytes = local.queues[count.index].max_size
requires_duplicate_detection = local.queues[count.index].enable_duplicate_detection
requires_session = local.queues[count.index].enable_session
dead_lettering_on_message_expiration = local.queues[count.index].enable_dead_lettering_on_message_expiration
max_delivery_count = local.queues[count.index].max_delivery_count
duplicate_detection_history_time_window = local.queues[count.index].duplicate_detection_history_time_window
}
resource "azurerm_servicebus_queue_authorization_rule" "main" {
count = length(local.queue_authorization_rules)
name = local.queue_authorization_rules[count.index].name
queue_id = azurerm_servicebus_queue.main[count.index].id
listen = contains(local.queue_authorization_rules[count.index].rights, "listen") ? true : false
send = contains(local.queue_authorization_rules[count.index].rights, "send") ? true : false
manage = contains(local.queue_authorization_rules[count.index].rights, "manage") ? true : false
depends_on = [azurerm_servicebus_queue.main]
}