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
是否与dev
或qa
匹配,输出是一个列表,如果匹配,则该列表将至少包含一个元素,否则为零。
【讨论】:
谢谢,成功了!【参考方案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 在单个条件中匹配多个条件的主要内容,如果未能解决你的问题,请参考以下文章