azure Terraform将元组扁平化为字符串集

yv5phkfx  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(91)

我有下面的terraform allowed_ips元组,它包含一个ip地址json和每个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.
任何帮助都将不胜感激

cwdobuhd

cwdobuhd1#

您可以使用简单的for循环来创建集合:

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

okxuctiv2#

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

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

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

相关问题