【问题标题】:Dynamic Nested Blocks for modules模块的动态嵌套块
【发布时间】:2019-10-20 04:22:42
【问题描述】:

我想为 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 吗?

【问题讨论】:

    标签: terraform terraform-provider-azure terraform0.12+


    【解决方案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 = []),则不会生成任何动态嵌套块,这似乎是您想要的。

    【讨论】:

    • @alex Harvey,变量不是列表,实际上是与列表和映射嵌套。 v0.12 现在支持更多类型。 terraform.io/docs/configuration/variables.html#type-constraints
    • @BMW 这些类型约束是可选的,并且 OP 没有询问它们或表示任何使用它们的愿望,所以我不确定它在这里是否相关,除非我遗漏了什么?
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2020-09-25
    • 2020-10-13
    • 2021-08-25
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多