terraform-provider-scaleway: Accessing Kubernetes resources after cluster creation fails with "no such host"

Creating a fresh cluster and then accessing it via the Kubernetes provider fails with a “no such host” error. It seems like there needs to be some check in place to make sure the cluster is fully created and its API is accessible.

Example:

resource "scaleway_k8s_cluster_beta" "example" {
  name             = var.kubernetes_cluster_name
  version          = "1.18.3"
  cni              = "cilium"
  enable_dashboard = true
}

resource "scaleway_k8s_pool_beta" "default" {
  cluster_id = scaleway_k8s_cluster_beta.example.id
  name       = "default"
  node_type  = "DEV1-M"
  size       = 1
}

provider "kubernetes" {
  load_config_file = "false"
  host             = scaleway_k8s_cluster_beta.example.kubeconfig[0].host
  token            = scaleway_k8s_cluster_beta.example.kubeconfig[0].token
  cluster_ca_certificate = base64decode(
    scaleway_k8s_cluster_beta.example.kubeconfig[0].cluster_ca_certificate
  )
  version = "~> 1.11"
}

resource "kubernetes_namespace" "cert_manager" {
  metadata {
    name = "cert-manager"
  }
}

Result:

Terraform v0.12.26
Initializing plugins and modules...
2020/06/14 03:38:12 [DEBUG] Using modified User-Agent: Terraform/0.12.26 TFC/ad37d0d407
scaleway_k8s_cluster_beta.example: Creating...
scaleway_k8s_cluster_beta.example: Creation complete after 7s [id=fr-par/a1648e5d-3b7c-4845-a7a5-42d40874ede7]
scaleway_k8s_pool_beta.default: Creating...
kubernetes_service.example: Creating...
kubernetes_namespace.cert_manager: Creating...
kubernetes_secret.gitlab: Creating...
kubernetes_ingress.example: Creating...
kubernetes_namespace.example: Creating...
kubernetes_namespace.kong: Creating...
kubernetes_namespace.metallb: Creating...
kubernetes_namespace.wave: Creating...
kubernetes_deployment.example: Creating...
helm_release.cert_manager: Creating...
helm_release.wave: Creating...
scaleway_k8s_pool_beta.default: Still creating... [10s elapsed]
scaleway_k8s_pool_beta.default: Still creating... [20s elapsed]
scaleway_k8s_pool_beta.default: Still creating... [30s elapsed]
scaleway_k8s_pool_beta.default: Still creating... [40s elapsed]
scaleway_k8s_pool_beta.default: Still creating... [50s elapsed]
scaleway_k8s_pool_beta.default: Creation complete after 56s [id=fr-par/f061fbbb-b29e-41cf-8d80-9bf45520d881]
kubernetes_config_map.metallb: Creating...

Error: Post "https://a1648e5d-3b7c-4845-a7a5-42d40874ede7.api.k8s.fr-par.scw.cloud:6443/api/v1/namespaces": dial tcp: lookup a1648e5d-3b7c-4845-a7a5-42d40874ede7.api.k8s.fr-par.scw.cloud on 127.0.0.53:53: no such host

  on cert-manager.tf line 1, in resource "kubernetes_namespace" "cert_manager":
   1: resource "kubernetes_namespace" "cert_manager" {

Terraform Version

Terraform v0.12.26

  • provider.kubernetes v1.11.3
  • provider.scaleway v1.15.0

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 22 (11 by maintainers)

Most upvoted comments

Another solution not much cleaner could be

resource "scaleway_k8s_cluster_beta" "example" {}
resource "scaleway_k8s_pool_beta" "default" {}

resource "null_resource" "kubeconfig" {
    depends_on = [scaleway_k8s_pool_beta.default]
    triggers = {
         kubeconfig = scaleway_k8s_cluster_beta.example.kubeconfig[0]
    }
}

provider "kubernetes" {
  load_config_file = "false"
  host             = null_resource.kubeconfig.triggers.host
  token            = null_resource.kubeconfig.triggers.token
  cluster_ca_certificate = base64decode(
     null_resource.kubeconfig.triggers.cluster_ca_certificate
  )
  version = "~> 1.11"
}

The null_resource can be used as an intermediate dependency and allow waiting for other resources.