Terraform 在单个条件中匹配多个条件

Terraform match multiple conditions in a single conditional

我有 4 个 envs,qa 和 dev 使用一个 ID,uat 和 prod 使用另一个。我正在尝试做一个 if else,基本上,如果 env 是 dev 或 qa,则使用 id1,否则使用 id2。这是我试过的:

locals{
  endpoint_id = "${var.env == "dev" || "qa" ? "id1" : "id2"}"
}

这就是我得到的:

Error: Invalid operand
│ 
│   on ssm-parameters.tf line 2, in locals:
│    2:   endpoint_id = "${var.env == "dev" || "qa" ? "id1" : "id2"}"
│ 
│ Unsuitable value for right operand: a bool is required.

显然我不能在这里做“或”。我该怎么做?谢谢。

怎么样:

locals{
  endpoint_id = length(regexall("dev|qa", var.env)) > 0 ? "id1" : "id2"
}

这将检查 var.env 是否匹配 devqa,输出是一个列表,如果有一些匹配,列表将至少有一个元素,否则为零。

or || 运算符两边必须是布尔表达式。我不知道您的语法有效的任何编程语言。它需要看起来像这样:

locals{
  endpoint_id = var.env == "dev" || var.env == "qa" ? "id1" : "id2"
}

这是因为布尔或运算符应用于其左侧的布尔表达式,而不是其左侧的字符串值。我在这里添加了括号以帮助可视化它:

locals{
  endpoint_id = (var.env == "dev") || (var.env == "qa") ? "id1" : "id2"
}