有没有办法遍历json文件来填充我的aiven_kafka_topic资源。
我的尝试如下。但是,我在dynamic配置块上遇到了问题。Invalid value for "inputMap" parameter: lookup() requires a map as the first argument.
配置是key=value对的可选映射
{
"topics": [
{
"name": "elvis",
"partitions": 1,
"replicas": 1
},
{
"name": "chuck",
"partitions": 24,
"replicas": 7,
"config": {
"entry_one": "foo",
"entry_two": "bar"
}
}
]
}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 ...
}
}
}发布于 2020-10-23 07:40:58
您的输入数据结构的每个topic对象只有一个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)
# ...
}
}您在第一次尝试中看到错误的原因是,dynamic "config"块指示Terraform为配置对象中的每个元素生成一个config块,因此该块中的config.key是一个单独的配置项,而config.value是该项的值,该值是一个字符串,因此与lookup不兼容。
我上面的新示例只直接使用单个config对象,而不重复其元素,因此结果将只有一个config块,其参数是否设置取决于是否在源对象中设置了相应的属性。
https://stackoverflow.com/questions/64445456
复制相似问题