Terraform with Google Container Engine (Kubernetes): Error executing access token command "...\gcloud.cmd"

12/6/2017

I'm trying to deploy some module (Docker image) to google Google Container Engine. What I got in my Terraformconfig file:

terraform.tf

# Google Cloud provider
provider "google" {
  credentials = "${file("google_credentials.json")}"
  project     = "${var.google_project_id}"
  region      = "${var.google_region}"
}
# Google Container Engine (Kubernetes) cluster resource
resource "google_container_cluster" "secureskye" {
  name               = "secureskye"
  zone               = "${var.google_kubernetes_zone}"
  additional_zones   = "${var.google_kubernetes_additional_zones}"
  initial_node_count = 2
}
# Kubernetes provider
provider "kubernetes" {
  host     = "${google_container_cluster.secureskye.endpoint}"
  username = "${var.google_kubernetes_username}"
  password = "${var.google_kubernetes_password}"

  client_certificate     = "${base64decode(google_container_cluster.secureskye.master_auth.0.client_certificate)}"
  client_key             = "${base64decode(google_container_cluster.secureskye.master_auth.0.client_key)}"
  cluster_ca_certificate = "${base64decode(google_container_cluster.secureskye.master_auth.0.cluster_ca_certificate)}"
}
# Module UI
module "ui" {
  source                         = "./modules/ui"
}

My problem is: google_container_cluster was created successfully, but it fails on module ui creation (which contains 2 resource kubernetes_service and kubernetes_pod) with error

* kubernetes_pod.ui: Post https://<ip>/api/v1/namespaces/default/pods: error executing access token command "<user_path>\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gcloud.cmd config config-helper --format=json": err=exec: "<user_path>\\AppData\\Local\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gcloud.cmd": file does not exist output=

So, questions:
1. Do I need gcloud + kubectl installed? Even though google_container_cluster was created successfully before I install gcloud or kubectl installed.
2. I want to use independent, separated credentials info, project, region from the one in gcloud, kubectl CLI. Am I doing this right?

-- Thanh Nhan
gcloud
google-kubernetes-engine
kubectl
terraform

1 Answer

12/11/2017

I have been able to reproduce your scenario running the Terraform config file you provided (except the Module UI part), in a Linux machine, so your issue should be related to that last part of the code.

Regarding your questions:

  1. I am not sure, because I tried from Google Cloud Shell, and both gcloud and kubectl are already preinstalled there, although I would recommend you to install them just to make sure that is not the issue here.

  2. For the credentials part, I added two new variables to the variables.tf Terraform configuration file, as in this example (those credentials do not need to be the sames as in gcloud or kubectl:

Use your prefered credentials in this case.

variable "google_kubernetes_username" {
    default = "<YOUR_USERNAME>"
}

variable "google_kubernetes_password" {
    default = "<YOUR_PASSWORD>"
}

Maybe you could share more information regarding what can be found in your Module UI, in order to understand which file does not exist. I guess you are trying the deployment from a Windows machine, as for the notation in the paths to your files, but that should not be an important issue.

-- dsesto
Source: StackOverflow