我如何建立terraform中的地图列表

时间:2017-11-13 21:19:37

标签: loops terraform

我想建立一个terraform的地图列表。是否有操作可以让我这样做。

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

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

2 个答案:

答案 0 :(得分:5)

如果这已经得到解决,我知道这是一个较旧的问题。

我不确定这是否是最佳做法,但这是我试图达到理想状态的方式。

使用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
    }
]

我目前正在使用terraform 0.11.5,null_resource似乎已添加到0.6.7

但是null_resource触发器有一些限制。插值变量只能产生字符串。所以,遗憾的是,您无法插入导致列表或地图的值;例如:

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

会导致错误

  

错误:null_resource.test:触发器(地址):''期望的类型'字符串',得到了不可转换的类型' [] interface {}'

答案 1 :(得分:0)

使用terraform 10.8,你可以

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

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