【问题标题】:Terraform flatten tuple to stringTerraform 将元组展平为字符串
【发布时间】:2021-10-31 02:52:21
【问题描述】:

我有以下 terraform allowed_ips 元组,其中包含一个 json 的 ip 地址和有关每个 ip 的元数据。我正在尝试展平元组,以获取格式为 ["2.2.2.2", "3.3.3.3"] 的 IP 地址列表,然后将其传递给 ip_rules 变量

变量

allowed_ips = [
    {
      name       = "ip1"
      ip_address = "3.3.3.3"
    },
    {

      name       = "ip2"
      ip_address = "127.0.0.1"
    }
  ]


资源

variable "allowed_ips" {
  type = list(object({
    name       = string,
    priority   = string,
    ip_address = string
  }))
}

network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"

    ip_rules =  jsonencode(var.allowed_ips.*.ip_address)
  }

当我设置ip_rules = ["2.2.2.2", "3.3.3.3"] 时,规则创建没有问题,但我想以某种方式从上面的 allowed_ips 解析变量。

我尝试了各种方法,包括

  • jsonencode(var.allowed_ips.*.ip_address)
  • "${join("\\,", local.subnets.*.id)}"
  • 通过 foreach 进行迭代,

不幸的是,大多数解决方案都会抛出错误Inappropriate value for attribute "ip_rules": set of string required.

任何帮助将不胜感激

【问题讨论】:

    标签: string azure tuples terraform azure-rm


    【解决方案1】:

    试试这个:

    ip_rules = [for i in var.allowed_ips : i.ip_address]
    

    【讨论】:

      【解决方案2】:

      似乎ip_rules 参数需要set(string) 类型的值。如果您希望使用 allowed_ips 变量,您应该能够执行以下操作:

      ip_rules = toset(var.allowed_ips[*].ip_address)
      

      jsonencode 函数会将给定值编码为字符串,这不是ip_rules 参数所期望的类型。 join 函数也是如此,因为它的返回值是字符串类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 2021-09-05
        相关资源
        最近更新 更多