Динамические Вложенные Блоки для модулей

Я хотел бы создать модуль для шлюза приложений 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 = []) тогда ни один из этих динамических вложенных блоков не будет сгенерирован, и это, кажется, то, что вы хотите.

Другие вопросы по тегам