Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit 2e46f98

Browse files
authored
Issue combine actions (#19)
* fix issue to combine multiple rules_engine actions
1 parent 24bf3c9 commit 2e46f98

3 files changed

Lines changed: 75 additions & 37 deletions

File tree

main.tf

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ resource "azurerm_frontdoor" "frontdoor" {
179179
frontend_endpoints = local.frontdoor[each.key].routing_rule[routing_rule.key].frontend_endpoints
180180
/** if forwarding_configuration is set */
181181
dynamic "forwarding_configuration" {
182-
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.forwarding_protocol != "" && local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.cache_enabled == false ? [1] : []
182+
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.backend_pool_name != "" && local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.cache_enabled == false ? [1] : []
183183
content {
184184
forwarding_protocol = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.forwarding_protocol
185185
backend_pool_name = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.backend_pool_name
@@ -188,7 +188,7 @@ resource "azurerm_frontdoor" "frontdoor" {
188188
}
189189
}
190190
dynamic "forwarding_configuration" {
191-
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.forwarding_protocol != "" && local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.cache_enabled == true ? [1] : []
191+
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.backend_pool_name != "" && local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.cache_enabled == true ? [1] : []
192192
content {
193193
forwarding_protocol = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.forwarding_protocol
194194
backend_pool_name = local.frontdoor[each.key].routing_rule[routing_rule.key].forwarding_configuration.backend_pool_name
@@ -202,7 +202,7 @@ resource "azurerm_frontdoor" "frontdoor" {
202202
}
203203
/** if redirect_configuration is set */
204204
dynamic "redirect_configuration" {
205-
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].redirect_configuration.redirect_protocol != "" ? [1] : []
205+
for_each = local.frontdoor[each.key].routing_rule[routing_rule.key].redirect_configuration.redirect_type != "" ? [1] : []
206206
content {
207207
custom_host = local.frontdoor[each.key].routing_rule[routing_rule.key].redirect_configuration.custom_host
208208
redirect_protocol = local.frontdoor[each.key].routing_rule[routing_rule.key].redirect_configuration.redirect_protocol
@@ -244,7 +244,7 @@ resource "azurerm_frontdoor_custom_https_configuration" "frontdoor_custom_https_
244244
# * https://docs.microsoft.com/en-us/cli/azure/ext/front-door/network/front-door/rules-engine?view=azure-cli-latest
245245
# */
246246
resource "azurerm_resource_group_template_deployment" "frontdoor_rules_engine" {
247-
for_each = toset(local.frontdoor_rules_engine_keys.override)
247+
for_each = toset(local.frontdoor_rules_engine_action.override)
248248

249249
name = local.frontdoor_rules_engine[each.key].name == "" ? each.key : local.frontdoor_rules_engine[each.key].name
250250
resource_group_name = local.frontdoor_rules_engine[each.key].resource_group_name
@@ -265,8 +265,24 @@ resource "azurerm_resource_group_template_deployment" "frontdoor_rules_engine" {
265265
"name": "${format("%s", local.frontdoor_rules_engine[each.key].rule[rule].name == "" ? rule : local.frontdoor_rules_engine[each.key].resource_group_name.rule[rule].name)}",
266266
"matchProcessingBehavior": "${local.frontdoor_rules_engine[each.key].rule[rule].match_processing_behavior}",
267267
"action": {
268-
"requestHeaderActions": [],
269-
"responseHeaderActions": [],
268+
"requestHeaderActions": [
269+
%{for request_header in keys(local.frontdoor_rules_engine[each.key].rule[rule].action.request_header)}
270+
%{if index(keys(local.frontdoor_rules_engine[each.key].rule[rule].action.request_header), request_header) > 0},{%{else}{%{endif}
271+
"headerActionType": "${local.frontdoor_rules_engine[each.key].rule[rule].action.request_header[request_header].header_action_type}",
272+
"headerName": "${local.frontdoor_rules_engine[each.key].rule[rule].action.request_header[request_header].header_name}",
273+
"value": "${local.frontdoor_rules_engine[each.key].rule[rule].action.request_header[request_header].value}"
274+
}
275+
%{endfor}
276+
],
277+
"responseHeaderActions": [
278+
%{for response_header in keys(local.frontdoor_rules_engine[each.key].rule[rule].action.response_header)}
279+
%{if index(keys(local.frontdoor_rules_engine[each.key].rule[rule].action.response_header), response_header) > 0},{%{else}{%{endif}
280+
"headerActionType": "${local.frontdoor_rules_engine[each.key].rule[rule].action.response_header[response_header].header_action_type}",
281+
"headerName": "${local.frontdoor_rules_engine[each.key].rule[rule].action.response_header[response_header].header_name}",
282+
"value": "${local.frontdoor_rules_engine[each.key].rule[rule].action.response_header[response_header].value}"
283+
}
284+
%{endfor}
285+
],
270286
"routeConfigurationOverride": {
271287
"@odata.type": "#Microsoft.Azure.FrontDoor.Models.FrontdoorRedirectConfiguration",
272288
%{if local.frontdoor_rules_engine[each.key].rule[rule].action.route_configuration_override.custom_path != null}"customPath": "${local.frontdoor_rules_engine[each.key].rule[rule].action.route_configuration_override.custom_path}",%{else}%{endif}
@@ -300,20 +316,21 @@ resource "azurerm_resource_group_template_deployment" "frontdoor_rules_engine" {
300316

301317
/** add rules engine to routing rule */
302318
resource "null_resource" "frontdoor_routing_rule-rules_engine" {
303-
for_each = toset(local.frontdoor_rules_engine_keys.override)
319+
for_each = var.frontdoor_rules_engine
304320

305321
triggers = {
306-
routing_rule = local.frontdoor_rules_engine[each.key].routing_rule_name
307-
frontdoor_name = local.frontdoor_rules_engine[each.key].frontdoor_name
308-
parameters_content = azurerm_resource_group_template_deployment.frontdoor_rules_engine[each.key].parameters_content
322+
frontdoor_name = local.frontdoor_rules_engine[each.key].frontdoor_name
323+
routing_rule_name = local.frontdoor_rules_engine[each.key].routing_rule_name
324+
rules_engine_name = contains(local.frontdoor_rules_engine_action.override, each.key) == true ? azurerm_resource_group_template_deployment.frontdoor_rules_engine[each.key].name : azurerm_frontdoor_rules_engine.frontdoor_rules_engine[each.key].name
325+
content = contains(local.frontdoor_rules_engine_action.override, each.key) == true ? azurerm_resource_group_template_deployment.frontdoor_rules_engine[each.key].parameters_content : yamlencode(azurerm_frontdoor_rules_engine.frontdoor_rules_engine[each.key].rule)
309326
}
310327

311328
provisioner "local-exec" {
312329
environment = {
313330
ROUTING_RULES = local.frontdoor_rules_engine[each.key].routing_rule_name
314331
}
315332

316-
command = "for ROUTING_RULE in $($ROUTING_RULES); do $(az network front-door routing-rule update --name $ROUTING_RULE --resource-group ${azurerm_resource_group_template_deployment.frontdoor_rules_engine[each.key].resource_group_name} --front-door-name ${local.frontdoor_rules_engine[each.key].frontdoor_name} --rules-engine ${azurerm_resource_group_template_deployment.frontdoor_rules_engine[each.key].name}); done"
333+
command = "for ROUTING_RULE in $ROUTING_RULES; do az network front-door routing-rule update --name $ROUTING_RULE --resource-group ${local.frontdoor_rules_engine[each.key].resource_group_name} --front-door-name ${local.frontdoor_rules_engine[each.key].frontdoor_name} --rules-engine ${each.key}; done"
317334
}
318335
}
319336

@@ -323,20 +340,20 @@ resource "null_resource" "frontdoor_rules_engine" {
323340

324341
triggers = {
325342
frontdoor_name = azurerm_frontdoor.frontdoor[each.key].name
326-
rules_engine = join(" ", local.frontdoor_rules_engine_keys.override)
343+
rules_engine = join(" ", keys(var.frontdoor_rules_engine))
327344
}
328345

329346
provisioner "local-exec" {
330347
environment = {
331-
RULES = join("|", local.frontdoor_rules_engine_keys.override)
348+
RULES = join("|", keys(var.frontdoor_rules_engine))
332349
}
333350

334351
command = "for REMOVE_RULE in $(az network front-door rules-engine list --resource-group ${azurerm_frontdoor.frontdoor[each.key].resource_group_name} --front-door-name ${azurerm_frontdoor.frontdoor[each.key].name} --query '[].name' -o tsv | egrep -v $RULES); do $(az network front-door rules-engine delete --resource-group ${azurerm_frontdoor.frontdoor[each.key].resource_group_name} --front-door-name ${azurerm_frontdoor.frontdoor[each.key].name} --name $REMOVE_RULE); done"
335352
}
336353
}
337354

338355
resource "azurerm_frontdoor_rules_engine" "frontdoor_rules_engine" {
339-
for_each = toset(local.frontdoor_rules_engine_keys.header)
356+
for_each = setsubtract(local.frontdoor_rules_engine_action.header, local.frontdoor_rules_engine_action.override)
340357

341358
name = local.frontdoor_rules_engine[each.key].name == "" ? each.key : local.frontdoor_rules_engine[each.key].name
342359
frontdoor_name = local.frontdoor_rules_engine[each.key].frontdoor_name

outputs.tf

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
output "frontdoor_firewall_policy" {
2+
description = "azurerm_frontdoor_firewall_policy results"
3+
value = {
4+
for firewall_policy in keys(azurerm_frontdoor_firewall_policy.frontdoor_firewall_policy) :
5+
firewall_policy => {
6+
id = azurerm_frontdoor_firewall_policy.frontdoor_firewall_policy[firewall_policy].id
7+
}
8+
}
9+
}
10+
111
output "frontdoor" {
212
description = "azurerm_frontdoor results"
313
value = {
@@ -10,12 +20,24 @@ output "frontdoor" {
1020
}
1121
}
1222

13-
output "frontdoor_firewall_policy" {
14-
description = "azurerm_frontdoor_firewall_policy results"
23+
output "frontdoor_custom_https_configuration" {
24+
description = "azurerm_frontdoor_custom_https_configuration results"
1525
value = {
16-
for firewall_policy in keys(azurerm_frontdoor_firewall_policy.frontdoor_firewall_policy) :
17-
firewall_policy => {
18-
id = azurerm_frontdoor_firewall_policy.frontdoor_firewall_policy[firewall_policy].id
26+
for frontdoor_custom_https_configuration in keys(azurerm_frontdoor_custom_https_configuration.frontdoor_custom_https_configuration) :
27+
frontdoor_custom_https_configuration => {
28+
id = azurerm_frontdoor_custom_https_configuration.frontdoor_custom_https_configuration[frontdoor_custom_https_configuration].id
29+
frontend_endpoint_id = azurerm_frontdoor_custom_https_configuration.frontdoor_custom_https_configuration[frontdoor_custom_https_configuration].frontend_endpoint_id
30+
}
31+
}
32+
}
33+
34+
output "frontdoor_rules_engine" {
35+
description = "azurerm_frontdoor_rules_engine results"
36+
value = {
37+
for frontdoor_rules_engine in keys(var.frontdoor_rules_engine) :
38+
frontdoor_rules_engine => {
39+
id = contains(local.frontdoor_rules_engine_action.override, frontdoor_rules_engine) == true ? azurerm_resource_group_template_deployment.frontdoor_rules_engine[frontdoor_rules_engine].id : azurerm_frontdoor_rules_engine.frontdoor_rules_engine[frontdoor_rules_engine].id
40+
name = contains(local.frontdoor_rules_engine_action.override, frontdoor_rules_engine) == true ? azurerm_resource_group_template_deployment.frontdoor_rules_engine[frontdoor_rules_engine].name : azurerm_frontdoor_rules_engine.frontdoor_rules_engine[frontdoor_rules_engine].name
1941
}
2042
}
2143
}

variables.tf

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,18 @@ locals {
9292
name = ""
9393
session_affinity_enabled = false
9494
session_affinity_ttl_seconds = 0
95-
web_application_firewall_policy_link_id = ""
95+
web_application_firewall_policy_link_id = null
9696
}
9797
routing_rule = {
9898
name = ""
9999
backend_pool_name = "default"
100-
accepted_protocols = ["Http", "Https"]
100+
accepted_protocols = ["Https"]
101101
patterns_to_match = ["/*"]
102102
enabled = true
103103
frontend_endpoints = ["frontendendpoint"]
104104
forwarding_configuration = {
105-
forwarding_protocol = ""
105+
forwarding_protocol = "HttpsOnly"
106+
backend_pool_name = ""
106107
patterns_to_match = ["/*"]
107108
cache_enabled = true
108109
cache_use_dynamic_compression = true
@@ -113,8 +114,8 @@ locals {
113114
}
114115
redirect_configuration = {
115116
custom_host = null
116-
redirect_protocol = ""
117-
redirect_type = "Found"
117+
redirect_protocol = "HttpsOnly"
118+
redirect_type = ""
118119
custom_fragment = null
119120
custom_path = null
120121
custom_query_string = null
@@ -125,9 +126,9 @@ locals {
125126
frontdoor_custom_https_configuration = {
126127
custom_https_provisioning_enabled = false
127128
certificate_source = "FrontDoor"
128-
azure_key_vault_certificate_vault_id = ""
129-
azure_key_vault_certificate_secret_name = ""
130-
azure_key_vault_certificate_secret_version = ""
129+
azure_key_vault_certificate_vault_id = null
130+
azure_key_vault_certificate_secret_name = null
131+
azure_key_vault_certificate_secret_version = null
131132
}
132133
frontdoor_rules_engine = {
133134
name = ""
@@ -313,15 +314,15 @@ locals {
313314
config => merge(
314315
merge(local.default.frontdoor_rules_engine.rule[config], local.frontdoor_rules_engine_rule_values[frontdoor_rules_engine][rulekey][config]),
315316
{
316-
for subconfig in ["route_configuration_override"] :
317+
for subconfig in keys(local.frontdoor_rules_engine_rule_values[frontdoor_rules_engine][rulekey][config]) :
317318
subconfig => merge(local.default.frontdoor_rules_engine.rule[config][subconfig], local.frontdoor_rules_engine_rule_values[frontdoor_rules_engine][rulekey][config][subconfig])
318319
}
319320
)
320321
},
321322
{
322323
for config in ["match_condition"] :
323324
config => {
324-
for key in keys(local.frontdoor_rules_engine_rule_values[frontdoor_rules_engine][rulekey][config]) :
325+
for key in keys(lookup(local.frontdoor_rules_engine_values[frontdoor_rules_engine].rule[rulekey], config, {})) :
325326
key => merge(local.default.frontdoor_rules_engine.rule[config], local.frontdoor_rules_engine_rule_values[frontdoor_rules_engine][rulekey][config][key])
326327
}
327328
}
@@ -335,18 +336,16 @@ locals {
335336
* resource "azurerm_frontdoor_rules_engine" "frontdoor_rules_engine"
336337
* resource "azurerm_resource_group_template_deployment" "frontdoor_rules_engine"
337338
*/
338-
frontdoor_rules_engine_keys = {
339+
frontdoor_rules_engine_action = {
339340
for engine_key, engine_match in {
340341
header = false
341342
override = true
342343
} :
343-
engine_key => compact(distinct(flatten(
344-
[
345-
for frontdoor_rules_engine in keys(local.frontdoor_rules_engine) : [
346-
for rulekey in keys(local.frontdoor_rules_engine[frontdoor_rules_engine].rule) :
347-
contains(keys(local.frontdoor_rules_engine[frontdoor_rules_engine].rule[rulekey].action), "route_configuration_override") == engine_match ? frontdoor_rules_engine : ""
348-
]
344+
engine_key => compact(distinct(flatten([
345+
for frontdoor_rules_engine in keys(var.frontdoor_rules_engine) : [
346+
for rulekey in keys(var.frontdoor_rules_engine[frontdoor_rules_engine].rule) :
347+
contains(keys(var.frontdoor_rules_engine[frontdoor_rules_engine].rule[rulekey].action), "route_configuration_override") == engine_match ? frontdoor_rules_engine : ""
349348
]
350-
)))
349+
])))
351350
}
352351
}

0 commit comments

Comments
 (0)