terraform apply fails on default install on Windows
GPWebb opened this issue · 2 comments
I have Terraform 0.14.11 installed with Jenkins-X 3.2.127 cli on Windows 10.
Following JX3's terraform quickstart guide (https://github.com/jx3-gitops-repositories/jx3-terraform-eks/blob/main/README.md), I've worked through to step 6 -
terraform init
terraform plan
terraform apply
(NB step 5 has already had to be specifically run via bash, it doesn't work on cmd.exe)
terraform apply
appears to fail on Windows on the default install, either in cmd.exe or bash.exe (from Git).
Expected behavior
The command should run and return without error.
Actual behavior
Error: Error running command 'for i in `seq 1 60`; do if `command -v wget > /dev/null`; then wget --no-check-certificate -O - -q $ENDPOINT/healthz >/dev/null && exit 0 || true; else curl -k -s $ENDPOINT/healthz >/dev/null && exit 0 || true;fi; sleep 5; done; echo TIMEOUT && exit 1': exec: "/bin/sh": file does not exist. Output:
Error: timed out waiting for the condition
on .terraform\modules\eks-jx\modules\vault\charts.tf line 1, in resource "helm_release" "vault-operator":
1: resource "helm_release" "vault-operator" {
terraform-aws-modules/terraform-aws-eks#925 suggests adding an additional section, but doesn't specify where. By trial and error I've found it helps if in the module "eks" {
section.
resource "null_resource" "kubeconfig" {
also references /bin/bash
Terraform version
Terraform v0.14.11
- provider registry.terraform.io/hashicorp/aws v3.42.0
- provider registry.terraform.io/hashicorp/helm v2.1.2
- provider registry.terraform.io/hashicorp/kubernetes v2.2.0
- provider registry.terraform.io/hashicorp/local v2.1.0
- provider registry.terraform.io/hashicorp/null v3.1.0
- provider registry.terraform.io/hashicorp/random v3.1.0
- provider registry.terraform.io/hashicorp/template v2.2.0
Operating system
Windows 10, 10.0.19041 N/A Build 19041
And, bang on cue, I've found the solution...
module "eks" {
...
# ADD THIS FOR WINDOWS ONLY
wait_for_cluster_interpreter = ["{{Your local path to sh.exe, usually installed with git}}", "-c"]
wait_for_cluster_cmd = "until curl -sk $ENDPOINT >/dev/null; do sleep 4; done"
resource "null_resource" "kubeconfig" {
depends_on = [
module.eks
]
provisioner "local-exec" {
command = "aws eks update-kubeconfig --name ${var.cluster_name} --region=${var.region}"
# CHANGE THIS FOR WINDOWS ONLY
interpreter = ["{{Your local path to bash.exe, also usually installed with git}}", "-c"]
}
}
(As an aside, why is one part depending on sh and another on bash?)
This still needs to go into the module, else everytime you remove .terraform, the change is gone!
(As an aside, why is one part depending on sh and another on bash?)
One is from this module, and the other from community eks module 😬