Terraform 通过包含嵌套映射的json填充资源的地形

Terraform 通过包含嵌套映射的json填充资源的地形,terraform,Terraform,有没有一种方法可以循环使用json文件来填充我的aiven_kafka\u主题资源 我的尝试如下。但是,我在dynamicconfig块上遇到了问题。 参数“inputMap”的值无效:lookup()需要一个映射作为第一个参数。 config是键=值对的可选映射 { “主题”:[ { “姓名”:“猫王”, “分区”:1, “复制品”:1 }, { “姓名”:“查克”, “分区”:24, “复制品”:7, “配置”:{ “第一条”:“foo”, “第二条”:“酒吧” } } ] } 每个主题

有没有一种方法可以循环使用json文件来填充我的
aiven_kafka\u主题
资源

我的尝试如下。但是,我在
dynamic
config块上遇到了问题。
参数“inputMap”的值无效:lookup()需要一个映射作为第一个参数。

config是键=值对的可选映射


{
“主题”:[
{
“姓名”:“猫王”,
“分区”:1,
“复制品”:1
},
{
“姓名”:“查克”,
“分区”:24,
“复制品”:7,
“配置”:{
“第一条”:“foo”,
“第二条”:“酒吧”
}
}
]
}

每个主题对象的输入数据结构只有一个
config
对象,因此资源中的
config
块不需要
dynamic
块:

resource "aiven_kafka_topic" "this" {
  for_each = { for topic in local.topics : topic.name => topic }

  project      = var.project_name
  service_name = var.kafka_service_name

  topic_name  = each.value.name
  partitions  = each.value.partitions
  replication = each.value.replicas

  config {
    cleanup_policy   = try(each.value.config.cleanup_policy, null)
    compression_type = try(each.value.config.compression_type, null)
    # ...
  }
}
您在第一次尝试中看到的错误原因是
动态“config”
块指示Terraform在config对象中为每个元素生成一个
config
块,因此该块中的
config.key
是一个单独的配置项,
config.value
是该项的值,这是一个字符串,因此与
查找
不兼容


我上面的新示例只直接使用单个
config
对象,而不在其元素上重复,因此结果将只有一个
config
块,其参数可以设置,也可以不设置,这取决于源对象中是否设置了相应的属性。

已更新。我从查找开始,但没有真正起作用。我想要的是从json文件转换配置映射,并将其用作资源的配置。
resource "aiven_kafka_topic" "this" {
  for_each = { for topic in local.topics : topic.name => topic }

  project      = var.project_name
  service_name = var.kafka_service_name

  topic_name  = each.value.name
  partitions  = each.value.partitions
  replication = each.value.replicas

  config {
    cleanup_policy   = try(each.value.config.cleanup_policy, null)
    compression_type = try(each.value.config.compression_type, null)
    # ...
  }
}