如何在Terraform规划阶段判断值是否为已知状态?
在Terraform规划阶段判断值是否已知
Terraform没有内置的knownatplan函数,但可以通过can()函数结合特定操作来模拟这个判断逻辑,核心思路是利用已知值能成功执行某些确定性操作,而未知值会触发求值失败的特性。
基础实现(字符串类型)
针对字符串类型的值,可以使用substr函数尝试截取字符,未知字符串无法在规划阶段完成截取操作,can()会捕获这个失败并返回false;已知字符串则能成功执行,返回true。
示例代码:
locals { foo = "hello world" bar = uuid() # uuid()的值在apply阶段才确定,规划阶段为未知 } # 定义复用的判断逻辑 locals { known_at_plan = func(val) { return can(substr(val, 0, 1)) } } output "foo_known" { value = local.known_at_plan(local.foo) } output "bar_known" { value = local.known_at_plan(local.bar) }
执行terraform plan后,输出结果会符合预期:
Outputs: foo_known = true bar_known = false
适配其他数据类型
针对不同类型的值,需要调整对应的判断操作:
- 数字类型:尝试执行加法操作,未知数字无法完成计算:
can(val + 0) - 布尔类型:尝试转换为数字,未知布尔值无法转换:
can(tonumber(val)) - 列表/集合类型:尝试获取长度,未知集合无法返回确定长度:
can(length(val))
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

