如何根据变量定义Terraform中可能为空的列表?

akn*_*ds1 6 terraform

我需要在Terraform(v0.10.8)中定义一个资源,该资源有一个list属性,根据变量可能为空,也可能不为空,参见volume_ids以下定义:

resource "digitalocean_droplet" "worker_node" {
  count = "${var.droplet_count}"
  [...]
  volume_ids = [
    "${var.volume_size != 0 ? element(digitalocean_volume.worker.*.id, count.index) : ""}"
  ]
}

resource "digitalocean_volume" "worker" {
  count = "${var.volume_size != 0 ? var.droplet_count : 0}"
  [...]
}
Run Code Online (Sandbox Code Playgroud)

}

然而,我提出的解决方案在列表应为空(即为var.volume_size0)的情况下失败:

volume_ids = [
  "${var.volume_size != 0 ? element(digitalocean_volume.worker.*.id, count.index) : ""}"
]
Run Code Online (Sandbox Code Playgroud)

生成以下Terraform错误消息:

* module.workers.digitalocean_droplet.worker_node[1]: element: element() may not be used with an empty list in:

${var.volume_size != 0 ? element(digitalocean_volume.worker.*.id, count.index) : ""}
Run Code Online (Sandbox Code Playgroud)

我应该如何正确地写出我的定义volume_ids

RaG*_*aGe 7

不幸的是,这是terraform中许多语言缺陷之一.hacky解决方法是将空列表添加到空列表中.

${var.volume_size != 0 ? element(concat(digitalocean_volume.worker.*.id , list("")), count.index) : ""}
Run Code Online (Sandbox Code Playgroud)