跳至主要内容

条件表达式

条件表达式使用布尔表达式的值来选择两个值之一。

语法

条件表达式的语法如下所示

代码块
condition ? true_val : false_val

如果 conditiontrue,则结果为 true_val。如果 conditionfalse,则结果为 false_val

条件表达式的常见用法是定义默认值以替换无效值

代码块
var.a != "" ? var.a : "default-a"

如果 var.a 为空字符串,则结果为 "default-a",否则为 var.a 的实际值。

条件

条件可以是任何解析为布尔值的表达式。这通常是使用相等、比较或逻辑运算符的表达式。

自定义条件检查

您可以为配置中的几种类型的对象创建产生自定义错误消息的条件。例如,您可以向输入变量添加一个条件,以检查传入的图像 ID 是否格式正确。

自定义条件可以帮助捕获假设,帮助未来的维护人员理解配置的设计和意图。它们还可以更早地在上下文中返回有关错误的有用信息,帮助使用者更轻松地诊断其配置中的问题。

有关详细信息,请参阅 自定义条件检查

结果类型

两个结果值可以是任何类型,但它们都必须是相同类型,以便 OpenTofu 可以在不知道条件值的情况下确定整个条件表达式将返回什么类型。

如果两个结果表达式没有产生相同的类型,则 OpenTofu 将尝试找到一个它们都可以转换到的类型,并在可能的情况下自动进行这些转换。

例如,以下表达式是有效的,并且将始终返回字符串,因为在 OpenTofu 中,所有数字都可以使用十进制数字自动转换为字符串

代码块
var.example ? 12 : "hello"

但是,对于不熟悉 OpenTofu 转换规则的人来说,依赖这种自动转换行为可能会令人困惑,因此我们建议在可能存在对预期结果类型的一些不确定性的任何情况下,使用类型转换函数明确说明。

以下示例是人为构造的,因为在这种情况下,编写常量 "12" 比编写类型转换更容易,但它展示了如何使用 tostring 将数字显式转换为字符串。

代码块
var.example ? tostring(12) : "hello"