首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform通过包含嵌套映射的json填充资源

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

Stack Overflow用户
提问于 2020-10-20 20:45:03
回答 1查看 225关注 0票数 0

有没有办法遍历json文件来填充我的aiven_kafka_topic资源。

我的尝试如下。但是,我在dynamic配置块上遇到了问题。Invalid value for "inputMap" parameter: lookup() requires a map as the first argument.

配置是key=value对的可选映射

代码语言:javascript
复制
{
  "topics": [
      {
          "name": "elvis",
          "partitions": 1,
          "replicas": 1
      },
      {
          "name": "chuck",
          "partitions": 24,
          "replicas": 7,
          "config": {
            "entry_one": "foo",
            "entry_two": "bar"
          }
      }
  ]
}
代码语言:javascript
复制
locals {
  topics = jsondecode(file(var.topics_config))["topics"]
}

output "locals_topics" {
  value = local.topics
}

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

  dynamic "config" {
    for_each = each.value.config

    content {
      # config.key = config.value
      entry_one = lookup(config.key, "entry_one", null)
      entry_two = lookup(config.key, "entry_two", null)
      # etc ...
    }
  }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 07:40:58

您的输入数据结构的每个topic对象只有一个config对象,因此您不需要在资源中为config块使用dynamic块:

代码语言:javascript
复制
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)
    # ...
  }
}

您在第一次尝试中看到错误的原因是,dynamic "config"块指示Terraform为配置对象中的每个元素生成一个config块,因此该块中的config.key是一个单独的配置项,而config.value是该项的值,该值是一个字符串,因此与lookup不兼容。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64445456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档