【问题标题】:Terraform - refering to list object's value as outputTerraform - 引用列表对象值作为输出
【发布时间】:2021-10-04 09:49:00
【问题描述】:

我的 Terraform 子模块中有以下 main.tf,位于 ./network

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 3.3.0"
  project_id   = var.project_id
  network_name = var.network_name
  mtu          = 1460

  subnets = [
     {
      subnet_name           = "xxx-private"
      subnet_ip             = "172.16.3.0/24"
      subnet_region         = "us-central1"
      subnet_private_access = "true"
    },{
      subnet_name           = "us-central1-gke"
      subnet_ip             = "172.16.5.0/24"
      subnet_region         = "us-central1"
      subnet_private_access = "true"
    },  
  ]

  secondary_ranges = {
  us-central1-gke = [
      {
          range_name    = "gke-cluster-pods"
          ip_cidr_range = "10.188.0.0/14"
      },
      {
          range_name    = "gke-cluster-services"
          ip_cidr_range = "10.192.0.0/20"           },
    ]
  }
}

我想相应地将两个次要范围的range_name 的值公开为ip_range_pods_gkeip_range_ser_gke。所以我的 output.tf 文件看起来像这样:

output "ip_range_pods_gke" {
  description = "GKE PODs IP ranage."
  value       = module.test-vpc-module.secondary_ranges.us-central1-gke[0].range_name
}

output "ip_range_services_gke" {
  description = "GKE Services IP ranage."
  value       = module.test-vpc-module.secondary_ranges.us-central1-gke[1].range_name
}

我的 main.tf 文件,位于调用此模块的根文件夹中。

module "networking"{

    source = "./network"
    project_id = "xxxxx-project"
    network_name = "xxxxx"

}

但是,当我运行 plan 命令时,出现以下错误。

Error: Unsupported attribute
│
│   on network/outputs.tf line 4, in output "ip_range_pods_gke":
│    4:   value       = module.test-vpc-module.secondary_ranges.us-central1-gke[0].range_name
│     ├────────────────
│     │ module.test-vpc-module is a object, known only after apply
│
│ This object does not have an attribute named "secondary_ranges".

为每个secondary_ranges 公开range_name 的正确方法是什么?

更新:我的文件夹结构如下(我知道状态文件应该在存储桶中,但这只是测试):

├── main.tf
├── network
│   ├── main.tf
│   ├── outputs.tf
│   └── variables.tf
├── terraform.tfstate
└── terraform.tfstate.backup

【问题讨论】:

  • 您的配置和模块组织有点不清楚。您能否详细说明根模块的层次结构、声明的模块和输出配置?
  • @MattSchuchard 请查看我的更新。
  • 并且test-vpc-module 模块是在networking 模块中声明的?由于它的源不受您的控制,您需要利用其记录的输出,然后从networking 模块向上输出。如果您不嵌套模块声明,这可以稍微简化。

标签: google-cloud-platform terraform terraform-provider-gcp gke-networking


【解决方案1】:

terraform-google-modules/network/google 没有secondary_ranges 等输出。相反,您可能需要的输出称为subnets_secondary_ranges

如果这不是你想要的输出,你必须 fork 模块,并修改它的输出。

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2021-04-26
    • 2022-01-19
    • 2021-09-20
    • 2021-12-13
    • 2016-08-30
    相关资源
    最近更新 更多