【问题标题】:Terraform match multiple conditions in a single conditionalTerraform 在单个条件中匹配多个条件
【发布时间】: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.

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

【问题讨论】:

    标签: if-statement terraform hcl


    【解决方案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"
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多