Terraform如何将list(map(string))转map实现参数覆盖?
Terraform列表参数合并实现方案
你当前的问题根源是merge函数仅支持map/object类型入参,而你定义的default_parameters和instances下的parameters都是list(map(string))类型,需要先做类型转换再合并。
转换逻辑
通过for表达式将参数列表转换为以参数name为key的map,再用merge合并,合并后实例的同名参数会自动覆盖默认参数,最后直接供给dynamic块使用即可,不需要修改你原有content块的逻辑。
最终可用代码
dynamic "parameters" { for_each = merge( # 转换默认参数列表为map { for param in var.default_parameters : param.name => param }, # 转换当前实例的参数列表为map,同name参数优先级更高 { for param in var.instances[each.key].parameters : param.name => param } ) content { name = parameters.value.name value = parameters.value.value } }
可选优化
如果存在实例未配置parameters的场景,可以加try函数做兜底避免报错:
{ for param in try(var.instances[each.key].parameters, []) : param.name => param }
内容的提问来源于stack exchange,提问作者user8750453
相关产品推荐
相关产品推荐

