我想为Azure应用程序网关创建一个模块。
我想使用内联块disable_rule_group禁用某些规则组,但是如何在模块中使其可配置?这应该是一个可选变量。
我找到了for_each
的嵌套块。
示例:
variable "disabled_rule_groups" {
default = [
{
rule_group_name = "REQUEST-931-APPLICATION-ATTACK-RFI"
rules = [
931100,
931130]
},
{
rule_group_name = "REQUEST-942-APPLICATION-ATTACK-SQLI"
rules = [
942100
]
}
]
}
resource "azurerm_application_gateway" "AppGateway" {
dynamic "disabled_rule_group" {
for_each = [var.disabled_rule_groups]
content {
rule_group_name = disabled_rule_group.value.rule_group_name
rules = disabled_rule_group.value.rules
}
}
}
但是这不起作用。
有人知道如何修复语法吗?
此外,变量disabled_rule_groups
应该是可选的。因此,如果未设置disabled_rule_groups,则应禁用该块。
我怎样才能做到这一点?我是否需要第二个布尔变量和for中的if?
答案 0 :(得分:2)
是的,您所使用的语法不正确。您显然是这个意思:
resource "azurerm_application_gateway" "AppGateway" {
dynamic "disabled_rule_group" {
for_each = var.disabled_rule_groups // Removed [ ] from this line.
content {
rule_group_name = disabled_rule_group.value.rule_group_name
rules = disabled_rule_group.value.rules
}
}
}
此外,变量
disabled_rule_groups
应该是可选的。因此,如果未设置disabled_rule_groups,则应禁用该块。我怎样才能做到这一点?我是否需要第二个布尔变量和for中的if?
使参数可选的最佳方法是允许其默认为空列表。但是,您编写的方式已经是 可选的,但未指定时,将默认为您已写出的默认值。
可能您想要的是这个
variable "disabled_rule_groups" {
default = []
}
然后,您不需要任何条件逻辑,因为如果您遍历一个空列表(即for_each = []
),那么将不会生成那些动态嵌套块,而这正是您想要的。