hashicorp / terraform-provider-google

Terraform Provider for Google Cloud Platform
https://registry.terraform.io/providers/hashicorp/google/latest/docs
Mozilla Public License 2.0
2.28k stars 1.72k forks source link

google_container_cluster: Cannot determine region #6556

Closed LipingSun closed 4 years ago

LipingSun commented 4 years ago

Community Note

Terraform Version

Terraform v0.12.26

Affected Resource(s)

Terraform Configuration Files

locals {
  regions = ["us-central1"]
}

resource "google_container_cluster" "appsvc" {
  for_each                  = toset(local.regions)
  name                      = "cluster-${each.value}"
  project                   = google_project.appsvc.project_id
  location                  = each.value
  monitoring_service        = "monitoring.googleapis.com/kubernetes"
  logging_service           = "logging.googleapis.com/kubernetes"
  network                   = google_compute_network.internal.name
  subnetwork                = google_compute_subnetwork.internal[each.key].name
  enable_tpu                = false
  enable_shielded_nodes     = true
  remove_default_node_pool  = true
  default_max_pods_per_node = 64
  initial_node_count        = 1
  depends_on = [
    google_project_service.appsvc_container_api,
    google_project_iam_member.gke_node,
  ]
  master_auth {
    username = ""
    password = ""
    client_certificate_config {
      issue_client_certificate = false
    }
  }
  private_cluster_config {
    enable_private_nodes    = true
    enable_private_endpoint = false
    master_ipv4_cidr_block  = cidrsubnet(var.vpc_cidr, 12, (index(tolist(var.regions), each.value) * 16 + 14) * 16)
  }
  workload_identity_config {
    identity_namespace = "${google_project.appsvc.project_id}.svc.id.goog"
  }
  ip_allocation_policy {
    cluster_secondary_range_name  = "gke-${each.value}-pods"
    services_secondary_range_name = "gke-${each.value}-services"
  }
  master_authorized_networks_config {
    dynamic cidr_blocks {
      for_each = var.gke_master_networks

      content {
        display_name = cidr_blocks.key
        cidr_block   = cidr_blocks.value
      }
    }
  }
  vertical_pod_autoscaling {
    enabled = true
  }
  addons_config {
    network_policy_config { // for gke master
      disabled = var.env == "prod" && each.value == "us-central1" ? true : false
    }
  }
  network_policy { // for gke nodes
    enabled  = var.gke_network_policy
    provider = var.gke_network_policy ? "CALICO" : "PROVIDER_UNSPECIFIED"
  }
}

Debug Output

2020/06/09 05:50:36 [ERROR] module.prod.module.shared: eval: *terraform.EvalApplyPost, err: Cannot determine region: set in this resource, or set provider-level 'region' or 'zone'.
2020/06/09 05:50:36 [ERROR] module.prod.module.shared: eval: *terraform.EvalSequence, err: Cannot determine region: set in this resource, or set provider-level 'region' or 'zone'.

Error: Cannot determine region: set in this resource, or set provider-level 'region' or 'zone'.

  on modules/shared/kubernetes_engine.tf line 34, in resource "google_container_cluster" "appsvc":
  34: resource "google_container_cluster" "appsvc" {

Panic Output

Expected Behavior

GKE cluster created according to location field

Actual Behavior

Failed with error:

Error: Cannot determine region: set in this resource, or set provider-level 'region' or 'zone'.

  on modules/shared/kubernetes_engine.tf line 34, in resource "google_container_cluster" "appsvc":
  34: resource "google_container_cluster" "appsvc" {

Steps to Reproduce

  1. terraform apply

Important Factoids

References

venkykuberan commented 4 years ago

@LipingSun please share your plan output .

LipingSun commented 4 years ago

Hi @venkykuberan, please see plan output below:

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.prod.module.shared.google_container_cluster.appsvc["asia-southeast1"] will be created
  + resource "google_container_cluster" "appsvc" {
      + additional_zones            = (known after apply)
      + cluster_ipv4_cidr           = (known after apply)
      + default_max_pods_per_node   = 64
      + enable_binary_authorization = false
      + enable_intranode_visibility = false
      + enable_kubernetes_alpha     = false
      + enable_legacy_abac          = false
      + enable_shielded_nodes       = true
      + enable_tpu                  = false
      + endpoint                    = (known after apply)
      + id                          = (known after apply)
      + initial_node_count          = 1
      + instance_group_urls         = (known after apply)
      + label_fingerprint           = (known after apply)
      + location                    = "asia-southeast1"
      + logging_service             = "logging.googleapis.com/kubernetes"
      + master_version              = (known after apply)
      + monitoring_service          = "monitoring.googleapis.com/kubernetes"
      + name                        = "cluster-asia-southeast1"
      + network                     = "internal"
      + node_locations              = (known after apply)
      + node_version                = (known after apply)
      + operation                   = (known after apply)
      + project                     = "pan-prod-appsvc"
      + region                      = (known after apply)
      + remove_default_node_pool    = true
      + services_ipv4_cidr          = (known after apply)
      + subnetwork                  = "internal"
      + tpu_ipv4_cidr_block         = (known after apply)
      + zone                        = (known after apply)

      + addons_config {
          + cloudrun_config {
              + disabled = (known after apply)
            }

          + config_connector_config {
              + enabled = (known after apply)
            }

          + dns_cache_config {
              + enabled = (known after apply)
            }

          + gce_persistent_disk_csi_driver_config {
              + enabled = (known after apply)
            }

          + horizontal_pod_autoscaling {
              + disabled = (known after apply)
            }

          + http_load_balancing {
              + disabled = (known after apply)
            }

          + istio_config {
              + auth     = (known after apply)
              + disabled = (known after apply)
            }

          + kalm_config {
              + enabled = (known after apply)
            }

          + kubernetes_dashboard {
              + disabled = (known after apply)
            }

          + network_policy_config {
              + disabled = false
            }
        }

      + authenticator_groups_config {
          + security_group = (known after apply)
        }

      + cluster_autoscaling {
          + autoscaling_profile = (known after apply)
          + enabled             = (known after apply)

          + auto_provisioning_defaults {
              + min_cpu_platform = (known after apply)
              + oauth_scopes     = (known after apply)
              + service_account  = (known after apply)
            }

          + resource_limits {
              + maximum       = (known after apply)
              + minimum       = (known after apply)
              + resource_type = (known after apply)
            }
        }

      + database_encryption {
          + key_name = (known after apply)
          + state    = (known after apply)
        }

      + ip_allocation_policy {
          + cluster_ipv4_cidr_block       = (known after apply)
          + cluster_secondary_range_name  = "gke-asia-southeast1-pods"
          + node_ipv4_cidr_block          = (known after apply)
          + services_ipv4_cidr_block      = (known after apply)
          + services_secondary_range_name = "gke-asia-southeast1-services"
          + subnetwork_name               = (known after apply)
        }

      + master_auth {
          + client_certificate     = (known after apply)
          + client_key             = (sensitive value)
          + cluster_ca_certificate = (known after apply)

          + client_certificate_config {
              + issue_client_certificate = false
            }
        }

      + master_authorized_networks_config {
          + cidr_blocks {
              + cidr_block   = "0.0.0.0/0"
              + display_name = "Internet"
            }
        }

      + network_policy {
          + enabled = false
        }

      + node_config {
          + boot_disk_kms_key = (known after apply)
          + disk_size_gb      = (known after apply)
          + disk_type         = (known after apply)
          + guest_accelerator = (known after apply)
          + image_type        = (known after apply)
          + labels            = (known after apply)
          + local_ssd_count   = (known after apply)
          + machine_type      = (known after apply)
          + metadata          = (known after apply)
          + min_cpu_platform  = (known after apply)
          + oauth_scopes      = (known after apply)
          + preemptible       = (known after apply)
          + service_account   = (known after apply)
          + tags              = (known after apply)
          + taint             = (known after apply)

          + sandbox_config {
              + sandbox_type = (known after apply)
            }

          + shielded_instance_config {
              + enable_integrity_monitoring = (known after apply)
              + enable_secure_boot          = (known after apply)
            }

          + workload_metadata_config {
              + node_metadata = (known after apply)
            }
        }

      + node_pool {
          + initial_node_count  = (known after apply)
          + instance_group_urls = (known after apply)
          + max_pods_per_node   = (known after apply)
          + name                = (known after apply)
          + name_prefix         = (known after apply)
          + node_count          = (known after apply)
          + node_locations      = (known after apply)
          + version             = (known after apply)

          + autoscaling {
              + max_node_count = (known after apply)
              + min_node_count = (known after apply)
            }

          + management {
              + auto_repair  = (known after apply)
              + auto_upgrade = (known after apply)
            }

          + node_config {
              + boot_disk_kms_key = (known after apply)
              + disk_size_gb      = (known after apply)
              + disk_type         = (known after apply)
              + guest_accelerator = (known after apply)
              + image_type        = (known after apply)
              + labels            = (known after apply)
              + local_ssd_count   = (known after apply)
              + machine_type      = (known after apply)
              + metadata          = (known after apply)
              + min_cpu_platform  = (known after apply)
              + oauth_scopes      = (known after apply)
              + preemptible       = (known after apply)
              + service_account   = (known after apply)
              + tags              = (known after apply)
              + taint             = (known after apply)

              + sandbox_config {
                  + sandbox_type = (known after apply)
                }

              + shielded_instance_config {
                  + enable_integrity_monitoring = (known after apply)
                  + enable_secure_boot          = (known after apply)
                }

              + workload_metadata_config {
                  + node_metadata = (known after apply)
                }
            }

          + upgrade_settings {
              + max_surge       = (known after apply)
              + max_unavailable = (known after apply)
            }
        }

      + private_cluster_config {
          + enable_private_nodes   = true
          + master_ipv4_cidr_block = "172.23.62.0/28"
          + peering_name           = (known after apply)
          + private_endpoint       = (known after apply)
          + public_endpoint        = (known after apply)
        }

      + release_channel {
          + channel = (known after apply)
        }

      + vertical_pod_autoscaling {
          + enabled = true
        }

      + workload_identity_config {
          + identity_namespace = "appsvc-gke.svc.id.goog"
        }
    }
rileykarson commented 4 years ago

As a temporary workaround, you can use the self_link or id for network and subnetwork. We had a fix for when name was specified previously (#3337) but it ended up regressing when we removed the zone and region fields (in favour of just location).

ghost commented 4 years ago

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.

If you feel this issue should be reopened, we encourage creating a new issue linking back to this one for added context. If you feel I made an error 🤖 🙉 , please reach out to my human friends 👉 hashibot-feedback@hashicorp.com. Thanks!