0

我正在尝试利用 Rancher Terraform 提供程序创建一个新的 RKE 集群,然后使用 Kubernetes 和 Helm Terraform 提供程序为创建的集群创建/部署资源。我正在使用此https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster_v2#kube_config属性来创建具有新集群的 kube 配置的本地文件。Helm 和 Kubernetes 提供者需要提供者配置中的 kube 配置:https ://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs 。有什么方法可以让提供程序配置等待本地文件被创建?

4

3 回答 3

0

我建议将您的功能分为两层

  1. 运行第一层以生成kube_config文件。
  2. 运行将使用此文件的第二层。
于 2021-11-16T23:21:20.280 回答
0

一般来说,Terraform 总是需要在计划步骤中评估提供者配置,因为提供者可以依赖这些设置来创建计划,因此通常不可能让提供者配置引用仅在计划阶段创建的内容。应用步骤。

但是,作为在这种情况下支持引导的一种方式,在这种情况下,可以合理地使用-target=...选项 to terraform apply,计划并仅应用足够的操作来首先创建 Rancher 集群,然后跟进正常计划并申请完成其他所有事情:

terraform apply -target=rancher2_cluster_v2.example
terraform apply

kube_config只有在属性未知的情况下才需要这个两步过程。只要此资源类型具有收敛行为,您就应该能够terraform apply正常使用,除非您将来进行需要更换集群的更改。

(这是关于资源属性的提供者配置的一般答案。我对 Rancher 并不特别熟悉,因此可能有一些关于该特定资源类型的细节,我在这里没有提及。)

于 2021-11-16T22:49:55.447 回答
0

我找到了一种解决方法。我将 rancher2_cluster.cluster.kube_config 对象输出到一个变量中。然后在我的 Kubernetes 模块中引用了该变量。我没有在提供程序配置中使用 kube_config 属性,而是使用了 token 和 host 属性,并使用 yamldecode 直接从 kube_config 变量解析凭据。

provider "kubernetes" {
  token = "${yamldecode(var.kube_config)["users"][0]["user"]["token"]}"
  host = "${yamldecode(var.kube_config)["clusters"][0]["cluster"]["server"]}"
}
于 2021-11-23T19:17:47.863 回答