如何在Terraform的output.tf中检查对象空值与属性存在性
解决方案
要处理module.ilb_app中部分元素缺少health_check_ids或healthcheck属性的问题,不能直接对整个splat表达式使用try——因为splat会遍历所有元素,只要有一个元素属性缺失就会触发全局错误。正确的做法是用显式for循环逐个处理每个元素,在循环体内用try捕获单个元素的属性访问错误:
output "health_check_ids_app" { description = "Autogenerated health check ids." value = [ for app in module.ilb_app : try(app.health_check_ids.healthcheck, null) ] }
补充说明:
try(app.health_check_ids.healthcheck, null)会对每个app元素单独检查:如果能正常访问到health_check_ids.healthcheck就返回对应值,否则返回null,不会中断整个输出的生成。- 如果希望输出列表中自动过滤掉
null值,可以搭配compact函数:output "health_check_ids_app" { description = "Autogenerated health check ids." value = compact([ for app in module.ilb_app : try(app.health_check_ids.healthcheck, null) ]) } - 若需要更精细的判断(比如区分是
health_check_ids不存在还是healthcheck不存在),可以嵌套try:
这种写法会先检查try(try(app.health_check_ids, {}).healthcheck, null)app是否有health_check_ids属性,没有则返回空对象,再检查空对象的healthcheck属性,最终返回null。
内容的提问来源于stack exchange,提问作者ajit singh
相关产品推荐
相关产品推荐

