変数によって空の場合も空でない場合もあるリストプロパティを持つリソースを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
の定義を正しく書くにはどうすればよいですか?
残念ながら、これはterraformの多くの言語の欠点の1つです。ハックな回避策は、空のリストを空のリストに追加することです。
${var.volume_size != 0 ? element(concat(digitalocean_volume.worker.*.id , list("")), count.index) : ""}