如何在地形中构建地图列表



我想在Terraform中构建一个地图列表。有没有一个手术可以让我这样做。

例如:我想构建结构(来自aws_instance.test.*.private_ip(

addresses = [
   {
     address = private_ip-1
   },
   {
     address = private_ip-2
   }
   ...
]

抱歉,如果这已经解决了,我看到这是一个较老的问题。

我不确定这是否是最佳实践,但这是我尝试达到所需状态的方式。

使用该null_resource,您将能够执行以下操作:

variable "addresses" {
  type = "list"
  default = [
    "private_ip-1",
    "private_ip-2",
    "private_ip-3"
  ]
}
resource "null_resource" "test" {
  count = "${length(var.addresses)}"
  triggers {
    address = "${element(var.addresses, count.index)}"
  }
}
output "addresses" {
  value = "${null_resource.test.*.triggers}"
}

并具有以下输出:

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
addresses = [
    {
        address = private_ip-1
    },
    {
        address = private_ip-2
    },
    {
        address = private_ip-3
    }
]

我目前在地形 0.11.5 上,null_resource似乎是在 0.6.7 中添加

不过,null_resource触发器存在限制。 内插变量只能产生字符串。因此,不幸的是,您将无法插入会导致列表或地图的值;例如:

resource "null_resource" "test" {
  triggers {
    mylist = "${var.addresses}"
  }
}

将导致错误

错误:null_resource.test:触发器(地址(:"预期类型"字符串",获得不可转换的类型"[]接口 {}">

使用地形 10.8 你可以

  output "private_subnets" { 
      value = [
          "${aws_subnet.private.*.id}"
      ]
   }

https://github.com/hashicorp/terraform/issues/7430

最新更新