Динамические Вложенные Блоки для модулей - PullRequest
2 голосов
/ 04 июня 2019

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

1 Ответ

2 голосов
/ 05 июня 2019

Да, у вас там неправильный синтаксис.Вы, очевидно, имеете в виду это:

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

...