Терраформ - пораженное население - PullRequest
0 голосов
/ 14 февраля 2019

Я рассматривал внедрение Kubernetes с помощью Terraform на прошлой неделе, и у меня, похоже, возникла проблема с жизненным циклом.

Хотя я могу сделать ресурс Kubernetes зависимым от запуска кластера, KUBECONFIGфайл не обновляется в середине terraform apply.

kubernete

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}"
    }
  }

Хотя я могу извлечь файл CONFIG с помощью API, terraform не будетиспользуйте этот файл, потому что terraform plan уже находится в движении

Я видел несколько примеров использования троичных операторов (resource ? 1 : 0), но я не нашел обходного пути для не count созданных кластеров, кроме -target

В идеале я хотел бы создать это с одним репозиторием terraform.

1 Ответ

0 голосов
/ 16 февраля 2019

Оказывается, что у ресурса 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)}"
}

Это приводит к тому, что один поставщик зависит от другого, и действует соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...