2

In my main.tf I have this, that I run via terraform 0.12.24 on ubuntu:

module "eks_cluster" {
  source = "git::https://github.com/cloudposse/terraform-aws-eks-cluster.git?ref=tags/0.20.0"

  namespace             = null
  stage                 = null
  name                  = var.stack_name
  attributes            = []
  tags                  = var.tags
  region                = var.region
  vpc_id                = module.vpc.vpc_id
  subnet_ids            = module.subnets.public_subnet_ids
  kubernetes_version    = var.kubernetes_version
  oidc_provider_enabled = var.oidc_provider_enabled

  workers_role_arns = [
    module.eks_node_group.eks_node_group_role_arn,
    # module.eks_fargate_profile_fg.eks_fargate_profile_role_arn,
  ]
  workers_security_group_ids = []
}

...

resource "local_file" "k8s_service_account_pods_default" {
  filename = "${path.root}/kubernetes-default.yaml"
  content  = <<SERVICE_ACCOUNT
apiVersion: v1
kind: ServiceAccount
metadata:
  name: aws-for-pods
  namespace: default
  annotations:
    eks.amazonaws.com/role-arn: ${var.pod_role_arn}
SERVICE_ACCOUNT

  provisioner "local-exec" {
    command = "kubectl apply -f ${local_file.k8s_service_account_pods_default.filename}"
  }
}

This works well most of the time; sometimes, I get this error:

Error: Error running command 'kubectl apply -f ./kubernetes-default.yaml': 
  exit status 1. Output: error: unable to recognize "./kubernetes-default.yaml": 
  Get https://<redacted>.us-east-2.eks.amazonaws.com/api?timeout=32s: dial tcp: 
  lookup <redacted>.us-east-2.eks.amazonaws.com on 192.168.2.1:53: no such host

If I run terraform apply even immediately after, that time the kubectl apply works. I'm guessing there's about 30 sec - 1 min delay between the two kubectl apply's, so probably the api server just wasn't really ready yet.

Looks like there is time_sleep resource, but that seems hackish. Doesn't seem like I can mark the local_file with depends-on on a resource inside a module either (seems like terraform is working on this).

Any suggestions, is time_sleep my only option?

Old Pro
  • 24,624
  • 7
  • 58
  • 106
Oliver
  • 27,510
  • 9
  • 72
  • 103
  • 1
    Why not use the Kubernetes provider, https://www.terraform.io/docs/providers/kubernetes/r/service_account.html these resources have a depence_on block – Chris Jun 04 '20 at 17:03
  • 1
    @christophraab I will try and report – Oliver Jun 06 '20 at 17:16

0 Answers0