web-dev-qa-db-ja.com

変数によっては空になる可能性があるTerraformのリストを定義する方法は?

変数によって空の場合も空でない場合もあるリストプロパティを持つリソースをTerraform(v0.10.8)で定義する必要があります。次の定義の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}"
  [...]
}

}

私が思いついた解決策は失敗しますが、リストが空である必要がある場合(つまり、var.volume_sizeは0です):

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

次の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) : ""}

volume_idsの定義を正しく書くにはどうすればよいですか?

7
aknuds1

残念ながら、これはterraformの多くの言語の欠点の1つです。ハックな回避策は、空のリストを空のリストに追加することです。

${var.volume_size != 0 ? element(concat(digitalocean_volume.worker.*.id , list("")), count.index) : ""}
8
RaGe