模块的动态嵌套块
Dynamic Nested Blocks for modules
我想为 Azure 应用程序网关创建一个模块。
我想用内联块 disabled_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,则应禁用该块。
我怎样才能做到这一点?我需要第二个布尔变量和每个变量中的 if 吗?
是的,您的语法不正确。你显然是这个意思:
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
}
}
}
Additionally, the variable disabled_rule_groups
should be optional. So if no disabled_rule_groups is set the block should be disabled. How can i achieve this? Do i need a second boolean variable and a if in the for each?
使参数可选的最好方法是允许它默认为一个空列表。但是你写的方式,它已经是可选的,但是如果没有指定,将默认为你写的默认值。
大概,你想要的是这个:
variable "disabled_rule_groups" {
default = []
}
然后,您不需要任何条件逻辑,因为如果您遍历一个空列表(即 for_each = []
),那么将生成 none 个动态嵌套块,并且出现成为你想要的。
我想为 Azure 应用程序网关创建一个模块。
我想用内联块 disabled_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,则应禁用该块。
我怎样才能做到这一点?我需要第二个布尔变量和每个变量中的 if 吗?
是的,您的语法不正确。你显然是这个意思:
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
}
}
}
Additionally, the variable
disabled_rule_groups
should be optional. So if no disabled_rule_groups is set the block should be disabled. How can i achieve this? Do i need a second boolean variable and a if in the for each?
使参数可选的最好方法是允许它默认为一个空列表。但是你写的方式,它已经是可选的,但是如果没有指定,将默认为你写的默认值。
大概,你想要的是这个:
variable "disabled_rule_groups" {
default = []
}
然后,您不需要任何条件逻辑,因为如果您遍历一个空列表(即 for_each = []
),那么将生成 none 个动态嵌套块,并且出现成为你想要的。