Terraform条件赋值不同类型Map报错:如何统一赋值给fvar?
解决Terraform条件赋值类型不一致问题
Terraform是强类型语言,条件表达式的两个分支必须返回完全一致的类型结构,这就是你遇到报错的原因:local.pri里的对象包含vpc字段,而local.pub没有,两者类型不匹配。
要实现需求,必须让两个分支的结构统一,以下是两种可行方案:
方案一:统一两个local的结构
让local.pub也包含vpc字段,只是将值设为null或空列表,后续使用时可通过判断值是否为空来区分场景:
locals { pub = { (var.zname) = { comment = var.zname vpc = null # 若后续需要列表类型,可改为 [] } } pri = { (var.zname) = { comment = var.zname vpc = [{ id = var.ids }] } } fvar = length(var.ids) != 0 ? local.pri : local.pub }
方案二:直接在条件表达式中动态构建对象
跳过提前定义两个不同结构的local,直接在fvar里根据条件动态设置字段值,代码更简洁:
locals { fvar = { (var.zname) = { comment = var.zname # 仅当var.ids非空时,vpc字段赋值有效,否则为null vpc = length(var.ids) != 0 ? [{ id = var.ids }] : null } } }
两种方案的核心都是保证fvar的类型结构始终一致,通过值的差异(null/空值 vs 有效数据)来实现逻辑分支。
内容的提问来源于stack exchange,提问作者nmakb
相关产品推荐
相关产品推荐

