我正在努力调试yaml文件中的一个问题,该文件每个条目包含两个属性:
topics:
- name: topic_one
partitions: 24
- name: topic_two
partitions: 1
- name: topic_three
partitions: 12
- name: topic_four
partitions: 6我把这个拉到TF里
locals {
confluent = yamldecode(file("./confluent.yaml"))["topics"]
confluent_topics = flatten([for topic in local.confluent :
{
"name" = topic.name
"partitions" = topic.partitions
}])
}进入模块时:
module "confluent" {
source = "./modules/confluent-cloud"
count = var.confluent_cluster ? 1 : 0
topics = local.confluent_topics
region = var.region
}然后在模块中:
resource "confluent_kafka_topic" "kafka" {
for_each = {
for topic in var.topics : topic.name => name
}
kafka_cluster {
id = confluent_kafka_cluster.kafka.id
}
topic_name = each.value.name
partitions_count = each.value.partitions
...我试过了几乎每一个组合,并且我已经将模块variables.tf中的变量类型设置为几乎所有可以想象的东西。但错误是,它认为对象没有一个名为partitions的属性--我尝试过简化本地而不平缓列表,我尝试了很多不同的变体。但总是这样;
│ Error: Unsupported attribute
│
│ on main.tf line 40, in locals:
│ 40: "partitions" = topic.partitions
│
│ This object does not have an attribute named "partitions".控制台给了我:
> local.confluent
[
{
"name" = "topic_one"
"partitions" = 24
},
{
"name" = "topic_two"
"partitions" = 1
},
{
"name" = "topic_three"
"partitions" = 12
},
{
"name" = "topic_four"
"partitions" = 6
}在扁平的本地控制台上只返回:
> local.confluent_topics
(known after apply)...which有点令人费解,因为我认为它应该知道这一点,而不适用。我确信这不是我的问题。
最烦人的是我以前做过这件事。因此,我想知道这是否是TF版本的情况,必须以不同的方式处理?
❯ terraform version
Terraform v1.1.7
on darwin_arm64
+ provider registry.terraform.io/confluentinc/confluent v0.7.0
+ provider registry.terraform.io/hashicorp/aws v4.12.1
+ provider registry.terraform.io/hashicorp/kubernetes v2.11.0
+ provider registry.terraform.io/hashicorp/null v3.1.1
+ provider registry.terraform.io/hashicorp/random v3.1.3
+ provider registry.terraform.io/hashicorp/tls v3.3.0
Your version of Terraform is out of date! The latest version
is 1.1.9. You can update by downloading from https://www.terraform.io/downloads.html发布于 2022-05-10 09:49:48
您的逻辑都很好,除了循环属性name。您不能拥有name属性&从它获取partitions字段。它只能从topic对象中获取。
试试这个..。
resource "confluent_kafka_topic" "kafka" {
for_each = {
for topic in var.topics : topic.name => topic
}
kafka_cluster {
id = confluent_kafka_cluster.kafka.id
}
topic_name = each.value.name
partitions_count = each.value.partitions
...您有唯一的键形式的topic.name & topic是具有partitions字段的对象。
https://stackoverflow.com/questions/72183425
复制相似问题