# Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 provider "google" { project = var.project } resource "random_id" "suffix" { byte_length = 4 } data "google_container_engine_versions" "main" { location = var.zone version_prefix = "1.19." } data "google_service_account" "gcpapi" { account_id = var.gcp_service_account } resource "google_container_cluster" "cluster" { name = "vault-helm-dev-${random_id.suffix.dec}" project = var.project enable_legacy_abac = true initial_node_count = 3 location = var.zone min_main_version = data.google_container_engine_versions.main.latest_main_version node_version = data.google_container_engine_versions.main.latest_node_version node_config { #service account for nodes to use oauth_scopes = [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/devstorage.read_write", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append", ] service_account = data.google_service_account.gcpapi.email } } resource "null_resource" "kubectl" { count = var.init_cli ? 1 : 0 triggers = { cluster = "${google_container_cluster.cluster.id}" } # On creation, we want to setup the kubectl credentials. The easiest way # to do this is to shell out to gcloud. provisioner "local-exec" { command = "gcloud container clusters get-credentials --zone=${var.zone} ${google_container_cluster.cluster.name}" } # On destroy we want to try to clean up the kubectl credentials. This # might fail if the credentials are already cleaned up or something so we # want this to continue on failure. Generally, this works just fine since # it only operates on local data. provisioner "local-exec" { when = "destroy" on_failure = "continue" command = "kubectl config get-clusters | grep ${google_container_cluster.cluster.name} | xargs -n1 kubectl config delete-cluster" } provisioner "local-exec" { when = "destroy" on_failure = "continue" command = "kubectl config get-contexts | grep ${google_container_cluster.cluster.name} | xargs -n1 kubectl config delete-context" } }