首页 > 解决方案 > Terraform - 交错的提供者群体

问题描述

过去一周,我一直在考虑使用 Terraform 实现 Kubernetes,但我似乎遇到了生命周期问题。

虽然我可以使 Kubernetes 资源依赖于正在启动的集群,但该KUBECONFIG文件不会在terraform apply.

Kubernetes

resource "kubernetes_service" "example" {
  ...
depends_on = ["digitalocean_kubernetes_cluster.example"]
}
resource "digitalocean_kubernetes_cluster" "example" {
  name    = "example"
  region  = "${var.region}"
  version = "1.12.1-do.2"

  node_pool {
    name       = "woker-pool"
    size       = "s-1vcpu-2gb"
    node_count = 1
  }

  provisioner "local-exec" {
    command = "sh ./get-kubeconfig.sh" // gets KUBECONFIG file from digitalocean API.

    environment = {
      digitalocean_kubernetes_cluster_id = "${digitalocean_kubernetes_cluster.k8s.id}"
      digitalocean_kubernetes_cluster_name = "${digitalocean_kubernetes_cluster.k8s.name}"
      digitalocean_api_token = "${var.digitalocean_token}"
    }
  }

虽然我可以使用 API 拉下 CONFIG 文件,但 terraform 不会使用这个文件,因为terraform plan它已经在运行

我已经看到了一些使用三元运算符 ( ) 的示例,但除了未创建的集群之外resource ? 1 : 0,我还没有找到解决方法count-target

理想情况下,我想用一个 terraform repo 来创建它。

标签: kubernetesterraformdigital-ocean

解决方案


事实证明,digitalocean_kubernetes_cluster资源具有可以传递给provider "kubernetes" {}类似的属性:

resource "digitalocean_kubernetes_cluster" "k8s" {
  name    = "k8s"
  region  = "${var.region}"
  version = "1.12.1-do.2"

  node_pool {
    name       = "woker-pool"
    size       = "s-1vcpu-2gb"
    node_count = 1
  }
}

provider "kubernetes" {
  host = "${digitalocean_kubernetes_cluster.k8s.endpoint}"

  client_certificate     = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_certificate)}"
  client_key             = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.client_key)}"
  cluster_ca_certificate = "${base64decode(digitalocean_kubernetes_cluster.k8s.kube_config.0.cluster_ca_certificate)}"
}

它导致一个提供者依赖于另一个提供者,并相应地采取行动。


推荐阅读