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
是否匹配 dev
或 qa
,输出是一个列表,如果有一些匹配,列表将至少有一个元素,否则为零。
or ||
运算符两边必须是布尔表达式。我不知道您的语法有效的任何编程语言。它需要看起来像这样:
locals{
endpoint_id = var.env == "dev" || var.env == "qa" ? "id1" : "id2"
}
这是因为布尔或运算符应用于其左侧的布尔表达式,而不是其左侧的字符串值。我在这里添加了括号以帮助可视化它:
locals{
endpoint_id = (var.env == "dev") || (var.env == "qa") ? "id1" : "id2"
}
我有 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
是否匹配 dev
或 qa
,输出是一个列表,如果有一些匹配,列表将至少有一个元素,否则为零。
or ||
运算符两边必须是布尔表达式。我不知道您的语法有效的任何编程语言。它需要看起来像这样:
locals{
endpoint_id = var.env == "dev" || var.env == "qa" ? "id1" : "id2"
}
这是因为布尔或运算符应用于其左侧的布尔表达式,而不是其左侧的字符串值。我在这里添加了括号以帮助可视化它:
locals{
endpoint_id = (var.env == "dev") || (var.env == "qa") ? "id1" : "id2"
}