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

Posted

技术标签:

【中文标题】Terraform 在单个条件中匹配多个条件【英文标题】:Terraform match multiple conditions in a single conditional 【发布时间】:2022-01-11 16:49:53 【问题描述】:

我有 4 个环境,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.

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

【问题讨论】:

【参考方案1】:

怎么样:

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

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

【讨论】:

谢谢,成功了!【参考方案2】:

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

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

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

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

【讨论】:

以上是关于Terraform 在单个条件中匹配多个条件的主要内容,如果未能解决你的问题,请参考以下文章

python正则中re.findall匹配多个条件

python正则中re.findall匹配多个条件

如何在Terraform 11中使用列表中的条件

linux-iptables匹配条件总结

Terraform:如何在单个资源块中提供多个 lambda 函数 zip 文件

在单个 case 语句中使用多个条件