Terraform处理含缺失属性的对象时如何判断是否存在assign=true项
错误原因
原代码使用[*].assign批量提取属性时,只要任意一个对象不存在assign属性,就会在属性提取阶段直接抛出错误,即使外层套try也无法捕获该异常。
修复方案
改用for表达式逐个处理每个对象,单独用try处理单个对象的属性读取逻辑,缺失assign属性时默认返回false即可:
output "atLeastOneAssign" { value = anytrue([ for obj in values(merge(local.assignments.users, local.assignments.groups)) : try(obj.assign, false) ]) }
逻辑说明
- 遍历合并后的所有用户、组权限对象
- 对单个对象尝试读取
assign属性,属性不存在时返回默认值false - 所有处理后的布尔值传入
anytrue,判断是否存在至少一个为true的assign属性
你也可以用can函数实现等价效果,写法如下:
output "atLeastOneAssign" { value = anytrue([ for obj in values(merge(local.assignments.users, local.assignments.groups)) : can(obj.assign) ? obj.assign : false ]) }
内容的提问来源于stack exchange,提问作者FrankS77
相关产品推荐
相关产品推荐

