Динамические Вложенные Блоки для модулей
Я хотел бы создать модуль для шлюза приложений 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, блок следует отключить. Как я могу достичь этого? Нужна ли мне вторая логическая переменная и если в для каждого?
1 ответ
Да, синтаксис у вас там неверный. Вы, очевидно, имеете в виду это:
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, блок следует отключить. Как я могу достичь этого? Нужна ли мне вторая логическая переменная и если в для каждого?
Лучший способ сделать параметр необязательным - разрешить ему по умолчанию пустой список. Но способ, которым вы это написали, уже является необязательным, но если он не указан, по умолчанию будет использоваться значение по умолчанию, которое вы выписали.
Вероятно, то, что вы хотите, это:
variable "disabled_rule_groups" {
default = []
}
Тогда вам не нужна никакая условная логика, потому что если вы зацикливаетесь на пустом списке (т.е. for_each = []
) тогда ни один из этих динамических вложенных блоков не будет сгенерирован, и это, кажется, то, что вы хотите.