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

Я хочу создать модуль для шлюза приложений 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 для каждой из них?


person MelleD    schedule 04.06.2019    source источник


Ответы (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, блок должен быть отключен. Как я могу этого добиться? Нужна ли мне вторая логическая переменная и if для каждой из них?

Лучший способ сделать параметр необязательным - разрешить по умолчанию использовать пустой список. Но в том виде, в котором вы это написали, он уже является необязательным, но, если он не указан, по умолчанию будет использоваться значение по умолчанию, которое вы выписали.

Наверное, вам нужно вот что:

variable "disabled_rule_groups" {
  default = []
}

Тогда вам не нужна никакая условная логика, потому что если вы перейдете к пустому списку (т.е. for_each = []), то ни один из этих динамических вложенных блоков не будет сгенерирован, и, похоже, это то, что вы хотите.

person Alex Harvey    schedule 05.06.2019