我需要在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?
不幸的是,这是terraform中许多语言缺陷之一.hacky解决方法是将空列表添加到空列表中.
${var.volume_size != 0 ? element(concat(digitalocean_volume.worker.*.id , list("")), count.index) : ""}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6815 次 |
| 最近记录: |