我有两个不同的列表 list_a
和 list_b
我想根据值 local.server
在它们之间进行选择
我试过了,还是不行
locals {
server = "ubuntu"
list_a = "${list("aaa")}"
list_b = "${list("bbb")}"
chosen = "${local.server == "ubuntu" ? local.list_a : local.list_b}"
}
output "chosen" {
value = "${local.chosen}"
}
Error: Error asking for user input: 1 error(s) occurred:
* local.chosen: local.chosen: At column 3, line 1: conditional operator cannot be used with list values in:
${local.server == "ubuntu" ? local.list_a : local.list_b}
最佳答案
在 Terraform v0.11 中,条件运算符仅适用于基本类型的值(字符串、数字、 bool 值)。您可以通过使用两个选项构建一个映射然后有条件地选择一个键来解决这个问题,而不是有条件地选择一个值:
locals {
lists = {
a = "${list("aaa")}"
b = "${list("bbb")}"
}
}
output "chosen" {
value = "${local.lists[local.server == "ubuntu" ? "a" : "b"]}"
}
在即将发布的(撰写本文时)Terraform v0.12 版本中,条件运算符适用于任何类型的值,只要在类型检查期间 true 和 false 表达式都可以转换为相同的类型,因此您的原始示例可以工作,但可以使用 v0.12 引入的一流表达式语法重写:
locals {
server = "ubuntu"
list_a = ["aaa"]
list_b = ["bbb"]
chosen = local.server == "ubuntu" ? local.list_a : local.list_b
}
output "chosen" {
value = local.chosen
}
关于terraform - 在 terraform 中使用三元在 2 个不同列表之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55597934/