Terraform循环遍历含可选键对象时属性不存在报错问题咨询
Terraform遍历可选属性对象报错解决方案
问题原因
直接访问对象不存在的属性会触发Terraform校验报错,你遇到的报错就是因为second对应的子对象没有定义specialkeys属性,直接调用v.specialkeys触发了属性不存在的校验逻辑。
解决方案
使用Terraform内置的try()函数处理可选属性,当属性不存在时返回空列表作为默认值,即可避免内层循环报错。
修正后代码如下:
data = flatten([ for k, v in var.foobars : [ for sk in try(v.specialkeys, []) : { special = sk, foo = k } ] ])
逻辑说明
try(v.specialkeys, [])会优先尝试读取当前对象的specialkeys属性,如果属性不存在、读取失败,就返回空列表[]- 内层循环遍历空列表时不会生成任何元素,
flatten处理后也不会产生冗余条目 - 最终生成的
data结果符合预期,只会包含first对应的三个对象,不会产生second相关的无效数据
内容的提问来源于stack exchange,提问作者A Akrm
相关产品推荐
相关产品推荐

