terraform - 在 terraform 中使用三元在 2 个不同列表之间进行选择

标签 terraform

我有两个不同的列表 list_alist_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/

相关文章:

for_each 中动态 block 的地形错误

terraform - 如何在不破坏现有客户端的情况下扩展 terraform 模块输入变量模式?

Terraform 文件配置器使用 WinRM 上传到 Azure VM : Error: i/o timeout

azure - 如何创建安装了网络观察程序的 azurerm_virtual_machine_extension

azure - 如何使用 Terraform 在 Azure 中创建 API 应用程序?

azure - 在 Azure 上使用 Terraform 部署具有托管标识的 VM 失败

azure - 使用 terraform 轮换 Azure 存储帐户访问 key

azure - 在 Terraform for Azure 中隐藏 secret 并发出警告

amazon-web-services - Terraform启用vpc流日志到亚马逊s3

terraform - 在 gcp 监控过滤器中使用正则表达式