【问题标题】:terrafrom providers passed down to submodule doesn't work传递给子模块的 terraform 提供程序不起作用
【发布时间】:2021-03-29 10:02:03
【问题描述】:

我有一个模块调用另一个模块,我将 kubernetes 提供程序从主模块传递给第一个模块,然后将它传递给另一个模块。传递给第一个模块的提供者工作正常,但从第一个模块传递给其他模块的提供者不起作用

main.tf

data "google_container_cluster" "gke" {
  depends_on = [module.gke]

  name     = var.gke_cluster_name
  project  = var.project_id
  location = var.gke_zone
}

provider "kubernetes" {
  alias                  = "my-kuber"
  host                   = "https://${data.google_container_cluster.gke.endpoint}"
  token                  = data.google_client_config.provider.access_token
  cluster_ca_certificate = base64decode(data.google_container_cluster.gke.master_auth[0].cluster_ca_certificate)
  load_config_file       = false
}

module "first-module" {
  source = "./modules/first-module"

  providers {
    kubernetes.my-kuber = kubernetes.my-kuber
  }
  .
  .
  .
}

first-module.tf

provider "kubernetes" {
  alias = "my-kuber"
}

module "sub-module" {
  source = "./modules/second-module"

  providers {
    kubernetes.my-kuber = kubernetes.my-kuber
  }
  .
  .
  .
}

第二个模块.tf

provider "kubernetes" {
  alias = "my-kuber"
}

resource "kubernetes_namespace" "ns" {
  provider = kubernetes.my-kuber

  metadata {
    name = var.namespace
  }
}

这里传递给second_module.tf 的 kubernetes.my-kuber 没有正确的集群凭据并且它失败了

我错过了什么吗?是否支持将提供程序向下传递到子模块?

提前致谢

【问题讨论】:

    标签: kubernetes terraform google-kubernetes-engine


    【解决方案1】:

    您不需要将您的提供者“传递”给您的模块。仅当您有多个 kubernetes 提供程序时才需要模块中的 providers 属性,这似乎不是您的情况。仅在您正在执行terraform plan 的根模块中定义提供程序,您不需要子模块中的提供程序块。 Terraform 能够根据资源类型定义使用哪个提供者:kubernetes_namespace 表示提供者是 kubernetes。

    这样的东西应该可以正常工作:

    ma​​in.tf

    data "google_container_cluster" "gke" {
      depends_on = [module.gke]
    
      name     = var.gke_cluster_name
      project  = var.project_id
      location = var.gke_zone
    }
    
    provider "kubernetes" {
      host                   = "https://${data.google_container_cluster.gke.endpoint}"
      token                  = data.google_client_config.provider.access_token
      cluster_ca_certificate = base64decode(data.google_container_cluster.gke.master_auth[0].cluster_ca_certificate)
      load_config_file       = false
    }
    
    module "first-module" {
      source = "./modules/first-module"
    
      .
      .
      .
    }
    

    first-module.tf

    module "sub-module" {
      source = "./modules/second-module"
    
      .
      .
      .
    }
    

    second-module.tf

    resource "kubernetes_namespace" "ns" {
      metadata {
        name = var.namespace
      }
    }
    

    【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2023-02-05
    • 1970-01-01
    • 2018-09-07
    • 2021-01-03
    • 1970-01-01
    • 2021-04-02
    • 2022-01-20
    • 2021-09-28
    相关资源
    最近更新 更多