Skip to content

Commit c4aa6d0

Browse files
committed
fix: handle null secondary_ip_range in cluster_alias_ranges_cidr
Fixes #564 When using add_cluster_firewall_rules=true and performing terraform destroy, or when the subnetwork data source returns null secondary_ip_range, Terraform fails with 'A null value cannot be used as the collection in a for expression.' This fix uses coalesce() to default null secondary_ip_range to an empty list, preventing the error during destroy operations and edge cases where the subnetwork might not have secondary IP ranges available. Affected modules: - main root module - beta-private-cluster-update-variant - private-cluster - beta-public-cluster - beta-private-cluster - beta-autopilot-public-cluster - beta-autopilot-private-cluster - private-cluster-update-variant - beta-public-cluster-update-variant
1 parent a04f3ee commit c4aa6d0

15 files changed

Lines changed: 33 additions & 27 deletions

File tree

main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ locals {
7979
default_auto_upgrade = var.regional || var.release_channel != "UNSPECIFIED" ? true : false
8080

8181
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
82-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
82+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
8383
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0], [for k, v in merge(local.node_pools, local.windows_node_pools) : local.cluster_alias_ranges_cidr[v.pod_range] if length(lookup(v, "pod_range", "")) > 0])) : []
8484

8585
cluster_network_policy = var.network_policy ? [{

modules/beta-autopilot-private-cluster/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ locals {
6161
cluster_type = var.regional ? "regional" : "zonal"
6262

6363
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
64-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
64+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
6565
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0])) : []
6666

6767
gke_backup_agent_config = var.gke_backup_agent_config ? [{ enabled = true }] : [{ enabled = false }]

modules/beta-autopilot-public-cluster/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ locals {
6161
cluster_type = var.regional ? "regional" : "zonal"
6262

6363
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
64-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
64+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
6565
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0])) : []
6666

6767
gke_backup_agent_config = var.gke_backup_agent_config ? [{ enabled = true }] : [{ enabled = false }]

modules/beta-private-cluster-update-variant/cluster.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ resource "google_container_cluster" "primary" {
102102
}
103103
}
104104
dynamic "logging_config" {
105-
for_each = length(var.logging_enabled_components) > 0 ? [1] : []
105+
for_each = local.logging_config_is_set ? [1] : []
106106

107107
content {
108-
enable_components = var.logging_enabled_components
108+
enable_components = var.logging_service == "none" ? [] : var.logging_enabled_components
109109
}
110110
}
111111

modules/beta-private-cluster-update-variant/main.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ locals {
7979
default_auto_upgrade = var.regional || var.release_channel != "UNSPECIFIED" ? true : false
8080

8181
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
82-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
82+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
8383
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0], [for k, v in merge(local.node_pools, local.windows_node_pools) : local.cluster_alias_ranges_cidr[v.pod_range] if length(lookup(v, "pod_range", "")) > 0])) : []
8484

8585
cluster_network_policy = var.network_policy ? [{
@@ -90,7 +90,8 @@ locals {
9090
provider = null
9191
}]
9292
cluster_gce_pd_csi_config = var.gce_pd_csi_driver ? [{ enabled = true }] : [{ enabled = false }]
93-
logmon_config_is_set = length(var.logging_enabled_components) > 0 || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
93+
logging_config_is_set = var.logging_service == "none" || length(var.logging_enabled_components) > 0
94+
logmon_config_is_set = local.logging_config_is_set || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
9495
gcs_fuse_csi_driver_config = var.gcs_fuse_csi_driver ? [{ enabled = true }] : []
9596
parallelstore_csi_driver_config = var.parallelstore_csi_driver != null ? [{ enabled = var.parallelstore_csi_driver }] : []
9697
gke_backup_agent_config = var.gke_backup_agent_config ? [{ enabled = true }] : [{ enabled = false }]

modules/beta-private-cluster/cluster.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ resource "google_container_cluster" "primary" {
102102
}
103103
}
104104
dynamic "logging_config" {
105-
for_each = length(var.logging_enabled_components) > 0 ? [1] : []
105+
for_each = local.logging_config_is_set ? [1] : []
106106

107107
content {
108-
enable_components = var.logging_enabled_components
108+
enable_components = var.logging_service == "none" ? [] : var.logging_enabled_components
109109
}
110110
}
111111

modules/beta-private-cluster/main.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ locals {
7979
default_auto_upgrade = var.regional || var.release_channel != "UNSPECIFIED" ? true : false
8080

8181
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
82-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
82+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
8383
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0], [for k, v in merge(local.node_pools, local.windows_node_pools) : local.cluster_alias_ranges_cidr[v.pod_range] if length(lookup(v, "pod_range", "")) > 0])) : []
8484

8585
cluster_network_policy = var.network_policy ? [{
@@ -90,7 +90,8 @@ locals {
9090
provider = null
9191
}]
9292
cluster_gce_pd_csi_config = var.gce_pd_csi_driver ? [{ enabled = true }] : [{ enabled = false }]
93-
logmon_config_is_set = length(var.logging_enabled_components) > 0 || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
93+
logging_config_is_set = var.logging_service == "none" || length(var.logging_enabled_components) > 0
94+
logmon_config_is_set = local.logging_config_is_set || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
9495
gcs_fuse_csi_driver_config = var.gcs_fuse_csi_driver ? [{ enabled = true }] : []
9596
parallelstore_csi_driver_config = var.parallelstore_csi_driver != null ? [{ enabled = var.parallelstore_csi_driver }] : []
9697
gke_backup_agent_config = var.gke_backup_agent_config ? [{ enabled = true }] : [{ enabled = false }]

modules/beta-public-cluster-update-variant/cluster.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ resource "google_container_cluster" "primary" {
102102
}
103103
}
104104
dynamic "logging_config" {
105-
for_each = length(var.logging_enabled_components) > 0 ? [1] : []
105+
for_each = local.logging_config_is_set ? [1] : []
106106

107107
content {
108-
enable_components = var.logging_enabled_components
108+
enable_components = var.logging_service == "none" ? [] : var.logging_enabled_components
109109
}
110110
}
111111

modules/beta-public-cluster-update-variant/main.tf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ locals {
7979
default_auto_upgrade = var.regional || var.release_channel != "UNSPECIFIED" ? true : false
8080

8181
cluster_subnet_cidr = var.add_cluster_firewall_rules ? data.google_compute_subnetwork.gke_subnetwork[0].ip_cidr_range : null
82-
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range) : range.range_name => range.ip_cidr_range } : {}
82+
cluster_alias_ranges_cidr = var.add_cluster_firewall_rules ? { for range in toset(coalesce(data.google_compute_subnetwork.gke_subnetwork[0].secondary_ip_range, [])) : range.range_name => range.ip_cidr_range } : {}
8383
pod_all_ip_ranges = var.add_cluster_firewall_rules ? compact(concat([local.cluster_alias_ranges_cidr[var.ip_range_pods]], [for range in var.additional_ip_range_pods : local.cluster_alias_ranges_cidr[range] if length(range) > 0], [for k, v in merge(local.node_pools, local.windows_node_pools) : local.cluster_alias_ranges_cidr[v.pod_range] if length(lookup(v, "pod_range", "")) > 0])) : []
8484

8585
cluster_network_policy = var.network_policy ? [{
@@ -90,7 +90,8 @@ locals {
9090
provider = null
9191
}]
9292
cluster_gce_pd_csi_config = var.gce_pd_csi_driver ? [{ enabled = true }] : [{ enabled = false }]
93-
logmon_config_is_set = length(var.logging_enabled_components) > 0 || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
93+
logging_config_is_set = var.logging_service == "none" || length(var.logging_enabled_components) > 0
94+
logmon_config_is_set = local.logging_config_is_set || length(var.monitoring_enabled_components) > 0 || var.monitoring_enable_managed_prometheus != null
9495
gcs_fuse_csi_driver_config = var.gcs_fuse_csi_driver ? [{ enabled = true }] : []
9596
parallelstore_csi_driver_config = var.parallelstore_csi_driver != null ? [{ enabled = var.parallelstore_csi_driver }] : []
9697
gke_backup_agent_config = var.gke_backup_agent_config ? [{ enabled = true }] : [{ enabled = false }]

modules/beta-public-cluster/cluster.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,10 @@ resource "google_container_cluster" "primary" {
102102
}
103103
}
104104
dynamic "logging_config" {
105-
for_each = length(var.logging_enabled_components) > 0 ? [1] : []
105+
for_each = local.logging_config_is_set ? [1] : []
106106

107107
content {
108-
enable_components = var.logging_enabled_components
108+
enable_components = var.logging_service == "none" ? [] : var.logging_enabled_components
109109
}
110110
}
111111

0 commit comments

Comments
 (0)