diff --git a/autogen/main/cluster.tf.tmpl b/autogen/main/cluster.tf.tmpl index 0dd5a4aec2..ea4ae487cd 100644 --- a/autogen/main/cluster.tf.tmpl +++ b/autogen/main/cluster.tf.tmpl @@ -557,8 +557,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/cluster.tf b/cluster.tf index e9f0765be3..47e9451f5d 100644 --- a/cluster.tf +++ b/cluster.tf @@ -424,8 +424,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/examples/node_pool/README.md b/examples/node_pool/README.md index b032cd2fa5..6bcd09c49c 100644 --- a/examples/node_pool/README.md +++ b/examples/node_pool/README.md @@ -7,6 +7,8 @@ This example illustrates how to create a cluster with multiple custom node-pool | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| +| additional\_ip\_pod\_range | The secondary ip range to use for pods in the additional range | `any` | n/a | yes | +| additional\_ip\_pod\_range\_subnetwork | The subnetwork to host the additional pod range in | `any` | n/a | yes | | cluster\_autoscaling | Cluster autoscaling configuration. See [more details](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#clusterautoscaling) |
object({|
enabled = bool
autoscaling_profile = string
min_cpu_cores = number
max_cpu_cores = number
min_memory_gb = number
max_memory_gb = number
gpu_resources = list(object({
resource_type = string
minimum = number
maximum = number
}))
auto_repair = bool
auto_upgrade = bool
})
{| no | | cluster\_name\_suffix | A suffix to append to the default cluster name | `string` | `""` | no | | compute\_engine\_service\_account | Service account to associate to the nodes in the cluster | `any` | n/a | yes | @@ -22,6 +24,7 @@ This example illustrates how to create a cluster with multiple custom node-pool | Name | Description | |------|-------------| +| additional\_ip\_range\_pods | The secondary IP range used for pods in the additional range | | ca\_certificate | n/a | | client\_token | n/a | | cluster\_name | Cluster name | diff --git a/examples/node_pool/main.tf b/examples/node_pool/main.tf index 37a19e87da..595bafc6ae 100644 --- a/examples/node_pool/main.tf +++ b/examples/node_pool/main.tf @@ -61,6 +61,13 @@ module "gke" { logging_variant = "MAX_THROUGHPUT" dns_allow_external_traffic = true + additional_ip_ranges_config = [ + { + subnetwork = "projects/${var.project_id}/regions/${var.region}/subnetworks/${var.additional_ip_pod_range_subnetwork}" + pod_ipv4_range_names = [var.additional_ip_pod_range] + } + ] + resource_manager_tags = { "${var.project_id}/${google_tags_tag_key.key.short_name}" = google_tags_tag_value.value.short_name } diff --git a/examples/node_pool/test_outputs.tf b/examples/node_pool/test_outputs.tf index e64c40e477..182d412acd 100644 --- a/examples/node_pool/test_outputs.tf +++ b/examples/node_pool/test_outputs.tf @@ -52,6 +52,11 @@ output "ip_range_services" { value = var.ip_range_services } +output "additional_ip_range_pods" { + description = "The secondary IP range used for pods in the additional range" + value = var.additional_ip_pod_range +} + output "zones" { description = "List of zones in which the cluster resides" value = module.gke.zones diff --git a/examples/node_pool/variables.tf b/examples/node_pool/variables.tf index 4f3128ce7c..24d7b6aa41 100644 --- a/examples/node_pool/variables.tf +++ b/examples/node_pool/variables.tf @@ -48,6 +48,14 @@ variable "ip_range_services" { description = "The secondary ip range to use for services" } +variable "additional_ip_pod_range_subnetwork" { + description = "The subnetwork to host the additional pod range in" +} + +variable "additional_ip_pod_range" { + description = "The secondary ip range to use for pods in the additional range" +} + variable "compute_engine_service_account" { description = "Service account to associate to the nodes in the cluster" } diff --git a/modules/beta-autopilot-private-cluster/cluster.tf b/modules/beta-autopilot-private-cluster/cluster.tf index 582d0c42d8..848e2f9b7c 100644 --- a/modules/beta-autopilot-private-cluster/cluster.tf +++ b/modules/beta-autopilot-private-cluster/cluster.tf @@ -325,8 +325,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/beta-autopilot-public-cluster/cluster.tf b/modules/beta-autopilot-public-cluster/cluster.tf index 4b58fa1122..74ffc75025 100644 --- a/modules/beta-autopilot-public-cluster/cluster.tf +++ b/modules/beta-autopilot-public-cluster/cluster.tf @@ -325,8 +325,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/beta-private-cluster-update-variant/cluster.tf b/modules/beta-private-cluster-update-variant/cluster.tf index 010851c0cc..5df5f3e0e0 100644 --- a/modules/beta-private-cluster-update-variant/cluster.tf +++ b/modules/beta-private-cluster-update-variant/cluster.tf @@ -461,8 +461,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/beta-private-cluster/cluster.tf b/modules/beta-private-cluster/cluster.tf index 4a7c30bbbf..b5006e6365 100644 --- a/modules/beta-private-cluster/cluster.tf +++ b/modules/beta-private-cluster/cluster.tf @@ -461,8 +461,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/beta-public-cluster-update-variant/cluster.tf b/modules/beta-public-cluster-update-variant/cluster.tf index 1a8912df2d..0d3a3b285d 100644 --- a/modules/beta-public-cluster-update-variant/cluster.tf +++ b/modules/beta-public-cluster-update-variant/cluster.tf @@ -461,8 +461,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/beta-public-cluster/cluster.tf b/modules/beta-public-cluster/cluster.tf index b95f83f356..3e60118cc7 100644 --- a/modules/beta-public-cluster/cluster.tf +++ b/modules/beta-public-cluster/cluster.tf @@ -461,8 +461,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/private-cluster-update-variant/cluster.tf b/modules/private-cluster-update-variant/cluster.tf index 8700f849e0..47b5769c14 100644 --- a/modules/private-cluster-update-variant/cluster.tf +++ b/modules/private-cluster-update-variant/cluster.tf @@ -424,8 +424,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/modules/private-cluster/cluster.tf b/modules/private-cluster/cluster.tf index d48a2f9836..6692870264 100644 --- a/modules/private-cluster/cluster.tf +++ b/modules/private-cluster/cluster.tf @@ -424,8 +424,8 @@ resource "google_container_cluster" "primary" { dynamic "additional_ip_ranges_config" { for_each = var.additional_ip_ranges_config content { - subnetwork = var.additional_ip_ranges_config.subnetwork - pod_ipv4_range_names = var.additional_ip_ranges_config.pod_ipv4_range_names + subnetwork = additional_ip_ranges_config.value.subnetwork + pod_ipv4_range_names = additional_ip_ranges_config.value.pod_ipv4_range_names } } stack_type = var.stack_type diff --git a/test/fixtures/node_pool/example.tf b/test/fixtures/node_pool/example.tf index 673298e488..2ebc0f1ef4 100644 --- a/test/fixtures/node_pool/example.tf +++ b/test/fixtures/node_pool/example.tf @@ -21,15 +21,17 @@ locals { module "example" { source = "../../../examples/node_pool" - project_id = var.project_ids[0] - cluster_name_suffix = "-${random_string.suffix.result}" - region = "europe-west4" - zones = ["europe-west4-b"] - network = google_compute_network.main.name - subnetwork = google_compute_subnetwork.main.name - ip_range_pods = google_compute_subnetwork.main.secondary_ip_range[0].range_name - ip_range_services = google_compute_subnetwork.main.secondary_ip_range[1].range_name - compute_engine_service_account = local.compute_engine_service_account + project_id = var.project_ids[0] + cluster_name_suffix = "-${random_string.suffix.result}" + region = "europe-west4" + zones = ["europe-west4-b"] + network = google_compute_network.main.name + subnetwork = google_compute_subnetwork.main.name + ip_range_pods = google_compute_subnetwork.main.secondary_ip_range[0].range_name + ip_range_services = google_compute_subnetwork.main.secondary_ip_range[1].range_name + additional_ip_pod_range_subnetwork = google_compute_subnetwork.secondary.name + additional_ip_pod_range = google_compute_subnetwork.secondary.secondary_ip_range[0].range_name + compute_engine_service_account = local.compute_engine_service_account cluster_autoscaling = { enabled = true diff --git a/test/fixtures/node_pool/network.tf b/test/fixtures/node_pool/network.tf index 13e6e76076..dd585f05d1 100644 --- a/test/fixtures/node_pool/network.tf +++ b/test/fixtures/node_pool/network.tf @@ -50,3 +50,15 @@ resource "google_compute_subnetwork" "main" { ip_cidr_range = "172.16.0.0/18" } } + +resource "google_compute_subnetwork" "secondary" { + name = "cft-gke-test-2-${random_string.suffix.result}" + ip_cidr_range = "10.1.0.0/17" + region = "europe-west4" + network = google_compute_network.main.self_link + + secondary_ip_range { + range_name = "test2" + ip_cidr_range = "172.18.0.0/18" + } +} diff --git a/test/fixtures/node_pool/outputs.tf b/test/fixtures/node_pool/outputs.tf index eae00cd565..0259cb3b88 100644 --- a/test/fixtures/node_pool/outputs.tf +++ b/test/fixtures/node_pool/outputs.tf @@ -49,6 +49,11 @@ output "ip_range_services" { value = google_compute_subnetwork.main.secondary_ip_range[1].range_name } +output "additional_ip_range_pods" { + description = "The secondary IP range used for pods in the additional range" + value = google_compute_subnetwork.main.secondary_ip_range[2].range_name +} + output "zones" { description = "List of zones in which the cluster resides" value = module.example.zones diff --git a/test/integration/node_pool/testdata/TestNodePool.json b/test/integration/node_pool/testdata/TestNodePool.json index 3c4014a0c1..d55ac2dfd8 100644 --- a/test/integration/node_pool/testdata/TestNodePool.json +++ b/test/integration/node_pool/testdata/TestNodePool.json @@ -90,7 +90,13 @@ "servicesIpv4CidrBlock": "192.168.64.0/18", "servicesSecondaryRangeName": "cft-gke-test-services-RANDOM_STRING", "stackType": "IPV4", - "useIpAliases": true + "useIpAliases": true, + "additionalIpRangesConfigs": [ + { + "subnetwork": "projects/PROJECT_ID/regions/europe-west4/subnetworks/cft-gke-test-2-RANDOM_STRING", + "podIpv4RangeNames": ["test2"] + } + ] }, "labelFingerprint": "78cdf2f6", "legacyAbac": {},
"auto_repair": true,
"auto_upgrade": true,
"autoscaling_profile": "BALANCED",
"enabled": false,
"gpu_resources": [],
"max_cpu_cores": 0,
"max_memory_gb": 0,
"min_cpu_cores": 0,
"min_memory_gb": 0
}