From 6a16a8fa29ca7f71a8d9c1006c1a4581d84cd5d8 Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Tue, 15 Aug 2023 10:23:03 +1000 Subject: [PATCH] fix: random zones only when zones are not provided --- autogen/main/cluster.tf.tmpl | 4 ++-- autogen/main/main.tf.tmpl | 10 +++++++--- cluster.tf | 6 +++--- main.tf | 10 +++++++--- modules/beta-autopilot-private-cluster/cluster.tf | 2 +- modules/beta-autopilot-private-cluster/main.tf | 10 +++++++--- modules/beta-autopilot-public-cluster/cluster.tf | 2 +- modules/beta-autopilot-public-cluster/main.tf | 10 +++++++--- modules/beta-private-cluster-update-variant/cluster.tf | 6 +++--- modules/beta-private-cluster-update-variant/main.tf | 10 +++++++--- modules/beta-private-cluster/cluster.tf | 6 +++--- modules/beta-private-cluster/main.tf | 10 +++++++--- modules/beta-public-cluster-update-variant/cluster.tf | 6 +++--- modules/beta-public-cluster-update-variant/main.tf | 10 +++++++--- modules/beta-public-cluster/cluster.tf | 6 +++--- modules/beta-public-cluster/main.tf | 10 +++++++--- modules/private-cluster-update-variant/cluster.tf | 6 +++--- modules/private-cluster-update-variant/main.tf | 10 +++++++--- modules/private-cluster/cluster.tf | 6 +++--- modules/private-cluster/main.tf | 10 +++++++--- 20 files changed, 95 insertions(+), 55 deletions(-) diff --git a/autogen/main/cluster.tf.tmpl b/autogen/main/cluster.tf.tmpl index 71e9720fa1..ce869c59ad 100644 --- a/autogen/main/cluster.tf.tmpl +++ b/autogen/main/cluster.tf.tmpl @@ -83,7 +83,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version {% if beta_cluster and autopilot_cluster != true %} dynamic "cluster_telemetry" { @@ -649,7 +649,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/autogen/main/main.tf.tmpl b/autogen/main/main.tf.tmpl index 6bb3477605..0a83acd52f 100644 --- a/autogen/main/main.tf.tmpl +++ b/autogen/main/main.tf.tmpl @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + {% if beta_cluster %} provider = google-beta {% else %} @@ -31,7 +33,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -43,7 +47,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -245,6 +249,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/cluster.tf b/cluster.tf index 4766e785ed..224a21e833 100644 --- a/cluster.tf +++ b/cluster.tf @@ -69,7 +69,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version # only one of logging/monitoring_service or logging/monitoring_config can be specified logging_service = local.logmon_config_is_set ? null : var.logging_service @@ -371,7 +371,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -557,7 +557,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/main.tf b/main.tf index 8c4cba5217..200e97fb9c 100644 --- a/main.tf +++ b/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -175,6 +179,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-autopilot-private-cluster/cluster.tf b/modules/beta-autopilot-private-cluster/cluster.tf index 5d836127bc..23b583d649 100644 --- a/modules/beta-autopilot-private-cluster/cluster.tf +++ b/modules/beta-autopilot-private-cluster/cluster.tf @@ -67,7 +67,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version cluster_autoscaling { dynamic "auto_provisioning_defaults" { diff --git a/modules/beta-autopilot-private-cluster/main.tf b/modules/beta-autopilot-private-cluster/main.tf index 241b1aa3d9..a9f9d7a5e1 100644 --- a/modules/beta-autopilot-private-cluster/main.tf +++ b/modules/beta-autopilot-private-cluster/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -143,6 +147,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-autopilot-public-cluster/cluster.tf b/modules/beta-autopilot-public-cluster/cluster.tf index 75e6e67f31..3e3c907726 100644 --- a/modules/beta-autopilot-public-cluster/cluster.tf +++ b/modules/beta-autopilot-public-cluster/cluster.tf @@ -67,7 +67,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version cluster_autoscaling { dynamic "auto_provisioning_defaults" { diff --git a/modules/beta-autopilot-public-cluster/main.tf b/modules/beta-autopilot-public-cluster/main.tf index f9c8f12b1e..2e0256d8f1 100644 --- a/modules/beta-autopilot-public-cluster/main.tf +++ b/modules/beta-autopilot-public-cluster/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -142,6 +146,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-private-cluster-update-variant/cluster.tf b/modules/beta-private-cluster-update-variant/cluster.tf index 14677e0af7..cbdd6e17ad 100644 --- a/modules/beta-private-cluster-update-variant/cluster.tf +++ b/modules/beta-private-cluster-update-variant/cluster.tf @@ -75,7 +75,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version dynamic "cluster_telemetry" { for_each = local.cluster_telemetry_type_is_set ? [1] : [] @@ -553,7 +553,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -779,7 +779,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/beta-private-cluster-update-variant/main.tf b/modules/beta-private-cluster-update-variant/main.tf index 69a88465d2..118f843b85 100644 --- a/modules/beta-private-cluster-update-variant/main.tf +++ b/modules/beta-private-cluster-update-variant/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -203,6 +207,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-private-cluster/cluster.tf b/modules/beta-private-cluster/cluster.tf index 9daec34d24..56e84c4a68 100644 --- a/modules/beta-private-cluster/cluster.tf +++ b/modules/beta-private-cluster/cluster.tf @@ -75,7 +75,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version dynamic "cluster_telemetry" { for_each = local.cluster_telemetry_type_is_set ? [1] : [] @@ -459,7 +459,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -684,7 +684,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/beta-private-cluster/main.tf b/modules/beta-private-cluster/main.tf index 69a88465d2..118f843b85 100644 --- a/modules/beta-private-cluster/main.tf +++ b/modules/beta-private-cluster/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -203,6 +207,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-public-cluster-update-variant/cluster.tf b/modules/beta-public-cluster-update-variant/cluster.tf index a4a9b4d379..6cd68e4192 100644 --- a/modules/beta-public-cluster-update-variant/cluster.tf +++ b/modules/beta-public-cluster-update-variant/cluster.tf @@ -75,7 +75,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version dynamic "cluster_telemetry" { for_each = local.cluster_telemetry_type_is_set ? [1] : [] @@ -534,7 +534,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -760,7 +760,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/beta-public-cluster-update-variant/main.tf b/modules/beta-public-cluster-update-variant/main.tf index 30220c7cc4..fedb05b7dd 100644 --- a/modules/beta-public-cluster-update-variant/main.tf +++ b/modules/beta-public-cluster-update-variant/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -202,6 +206,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/beta-public-cluster/cluster.tf b/modules/beta-public-cluster/cluster.tf index 72376a4e08..545e607f9b 100644 --- a/modules/beta-public-cluster/cluster.tf +++ b/modules/beta-public-cluster/cluster.tf @@ -75,7 +75,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version dynamic "cluster_telemetry" { for_each = local.cluster_telemetry_type_is_set ? [1] : [] @@ -440,7 +440,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -665,7 +665,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/beta-public-cluster/main.tf b/modules/beta-public-cluster/main.tf index 30220c7cc4..fedb05b7dd 100644 --- a/modules/beta-public-cluster/main.tf +++ b/modules/beta-public-cluster/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google-beta project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -202,6 +206,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/private-cluster-update-variant/cluster.tf b/modules/private-cluster-update-variant/cluster.tf index 9530a12217..2488222221 100644 --- a/modules/private-cluster-update-variant/cluster.tf +++ b/modules/private-cluster-update-variant/cluster.tf @@ -69,7 +69,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version # only one of logging/monitoring_service or logging/monitoring_config can be specified logging_service = local.logmon_config_is_set ? null : var.logging_service @@ -484,7 +484,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -671,7 +671,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/private-cluster-update-variant/main.tf b/modules/private-cluster-update-variant/main.tf index fe1520fca5..875608219a 100644 --- a/modules/private-cluster-update-variant/main.tf +++ b/modules/private-cluster-update-variant/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -176,6 +180,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id } diff --git a/modules/private-cluster/cluster.tf b/modules/private-cluster/cluster.tf index 693fcff790..82c977bcb3 100644 --- a/modules/private-cluster/cluster.tf +++ b/modules/private-cluster/cluster.tf @@ -69,7 +69,7 @@ resource "google_container_cluster" "primary" { disabled = var.disable_default_snat } - min_master_version = var.release_channel == null || var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version + min_master_version = var.release_channel == "UNSPECIFIED" ? local.master_version : var.kubernetes_version == "latest" ? null : var.kubernetes_version # only one of logging/monitoring_service or logging/monitoring_config can be specified logging_service = local.logmon_config_is_set ? null : var.logging_service @@ -390,7 +390,7 @@ resource "google_container_node_pool" "pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name @@ -576,7 +576,7 @@ resource "google_container_node_pool" "windows_pools" { project = var.project_id location = local.location // use node_locations if provided, defaults to cluster level node_locations if not specified - node_locations = lookup(each.value, "node_locations", "") != "" ? split(",", each.value["node_locations"]) : null + node_locations = local.node_locations cluster = google_container_cluster.primary.name diff --git a/modules/private-cluster/main.tf b/modules/private-cluster/main.tf index fe1520fca5..875608219a 100644 --- a/modules/private-cluster/main.tf +++ b/modules/private-cluster/main.tf @@ -20,6 +20,8 @@ Get available zones in region *****************************************/ data "google_compute_zones" "available" { + count = length(var.zones) == 0 ? 1 : 0 + provider = google project = var.project_id @@ -27,7 +29,9 @@ data "google_compute_zones" "available" { } resource "random_shuffle" "available_zones" { - input = data.google_compute_zones.available.names + count = length(var.zones) == 0 ? 1 : 0 + + input = data.google_compute_zones.available[0].names result_count = 3 } @@ -39,7 +43,7 @@ locals { location = var.regional ? var.region : var.zones[0] region = var.regional ? var.region : join("-", slice(split("-", var.zones[0]), 0, 2)) // for regional cluster - use var.zones if provided, use available otherwise, for zonal cluster use var.zones with first element extracted - node_locations = var.regional ? coalescelist(compact(var.zones), sort(random_shuffle.available_zones.result)) : slice(var.zones, 1, length(var.zones)) + node_locations = var.regional ? coalescelist(compact(var.zones), try(sort(random_shuffle.available_zones[0].result), [])) : slice(var.zones, 1, length(var.zones)) // Kubernetes version master_version_regional = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.region.latest_master_version master_version_zonal = var.kubernetes_version != "latest" ? var.kubernetes_version : data.google_container_engine_versions.zone.latest_master_version @@ -176,6 +180,6 @@ data "google_container_engine_versions" "zone" { // // data.google_container_engine_versions.zone: Cannot determine zone: set in this resource, or set provider-level zone. // - location = local.zone_count == 0 ? data.google_compute_zones.available.names[0] : var.zones[0] + location = local.zone_count == 0 ? data.google_compute_zones.available[0].names : var.zones[0] project = var.project_id }