如何在以后的 Terraform 步骤中使用尚不可用的信息?

How to use not available yet info in later Terraform steps?

我正在使用以下身份验证设置创建这样的 GKE 集群:

master_auth {
    # Setting an empty username and password explicitly disables basic auth
    username = ""
    password = ""

    # Whether client certificate authorization is enabled for this cluster.
    client_certificate_config {
      issue_client_certificate = false
    }
  }

创建集群后,我将使用另一个提供商来安装 helm 图表:

provider "helm" {
  kubernetes {
    host = ...
  }
  tiller_image = "gcr.io/kubernetes-helm/tiller:v2.14.1"
}

我的问题是如何使用大概可从集群创建步骤获得的身份验证信息填充 kubernetes 块?

您可以像在 Terraform 中使用其他任何东西一样插入值来设置提供者。

因此,在您的情况下,您可以使用如下内容:

resource "google_container_cluster" "cluster" {
  # ...
}

provider "helm" {
    kubernetes {
        host     = "https://${google_container_cluster.cluster.endpoint}"
        username = "${google_container_cluster.cluster.master_auth.0.username}"
        password = "${google_container_cluster.cluster.master_auth.0.password}"

        client_certificate     = "${google_container_cluster.cluster.master_auth.0.client_certificate}"
        client_key             = "${google_container_cluster.cluster.master_auth.0.client_key}"
        cluster_ca_certificate = "${google_container_cluster.cluster.master_auth.0.cluster_ca_certificate}"
    }
}

请注意,并非所有提供程序都可以从不存在的资源进行插值,因为某些提供程序会在提供程序初始化期间进行功能检测,这发生在依赖图需要使用提供程序之前。 Postgresql 提供程序就是一个例子。一旦资源已经创建,这些提供者仍然可以使用它,或者如果相关资源是在另一个 context/state 文件中创建的,它们可以使用数据源来访问信息。