@@ -14323,17 +14323,85 @@ resource "google_container_cluster" "primary" {
1432314323`, name, networkName, subnetworkName, config)
1432414324}
1432514325
14326+ type subnetRangeInfo struct {
14327+ SubnetName string
14328+ RangeNames []string
14329+ }
14330+
14331+ func bootstrapAdditionalIpRangesNetworkConfig(t *testing.T, name string, additionalSubnetCount int, secondaryRangeCount int) (string, []subnetRangeInfo) {
14332+ sri := []subnetRangeInfo{}
14333+
14334+ // We create our network to ensure no range collisions.
14335+ networkName := acctest.BootstrapSharedTestNetwork(t, fmt.Sprintf("%s-network", name))
14336+ mainSubnet := acctest.BootstrapSubnetWithOverrides(t, fmt.Sprintf("%s-subnet-main", name), networkName, map[string]interface{}{
14337+ "ipCidrRange": "10.2.0.0/24",
14338+ "secondaryIpRanges": []map[string]interface{}{
14339+ {
14340+ "rangeName": "pods",
14341+ "ipCidrRange": "10.3.0.0/16",
14342+ },
14343+ {
14344+ "rangeName": "services",
14345+ "ipCidrRange": "10.4.0.0/16",
14346+ },
14347+ },
14348+ })
14349+
14350+ si := subnetRangeInfo{
14351+ SubnetName: mainSubnet,
14352+ RangeNames: []string{"pods"},
14353+ }
14354+ sri = append(sri, si)
14355+
14356+ cumulativeRangeIndex := 0
14357+ for subnetIndex := 0; subnetIndex < additionalSubnetCount; subnetIndex++ {
14358+ ranges := []map[string]interface{}{}
14359+ rangeNames := []string{}
14360+ for rangeIndex := 0; rangeIndex < secondaryRangeCount; rangeIndex++ {
14361+ rangeName := fmt.Sprintf("range-%d", cumulativeRangeIndex)
14362+ r := map[string]interface{}{
14363+ "rangeName": rangeName,
14364+ "ipCidrRange": fmt.Sprintf("10.0.%d.0/24", cumulativeRangeIndex),
14365+ }
14366+ rangeNames = append(rangeNames, rangeName)
14367+ ranges = append(ranges, r)
14368+ cumulativeRangeIndex++
14369+ }
14370+
14371+ subnetOverrides := map[string]interface{}{
14372+ "ipCidrRange": fmt.Sprintf("10.1.%d.0/24", subnetIndex),
14373+ "secondaryIpRanges": ranges,
14374+ }
14375+
14376+ subnetName := fmt.Sprintf("%s-subnet-add-%d", name, subnetIndex)
14377+ acctest.BootstrapSubnetWithOverrides(t, subnetName, networkName, subnetOverrides)
14378+
14379+ si := subnetRangeInfo{
14380+ SubnetName: subnetName,
14381+ RangeNames: rangeNames,
14382+ }
14383+
14384+ sri = append(sri, si)
14385+ }
14386+
14387+ return networkName, sri
14388+ }
14389+
1432614390func TestAccContainerCluster_additional_ip_ranges_config_on_create(t *testing.T) {
1432714391 t.Parallel()
1432814392
14393+ testName := "gke-msc"
14394+ network, sri := bootstrapAdditionalIpRangesNetworkConfig(t, testName, 2, 2)
14395+
14396+
1432914397 clusterName := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10))
1433014398 acctest.VcrTest(t, resource.TestCase{
1433114399 PreCheck: func() { acctest.AccTestPreCheck(t) },
1433214400 ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
1433314401 CheckDestroy: testAccCheckContainerClusterDestroyProducer(t),
1433414402 Steps: []resource.TestStep{
1433514403 {
14336- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 2, 2 ),
14404+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri ),
1433714405 },
1433814406 {
1433914407 ResourceName: "google_container_cluster.primary",
@@ -14349,14 +14417,17 @@ func TestAccContainerCluster_additional_ip_ranges_config_on_create(t *testing.T)
1434914417func TestAccContainerCluster_additional_ip_ranges_config_on_update(t *testing.T) {
1435014418 t.Parallel()
1435114419
14420+ testName := "gke-msc-update"
14421+ network, sri := bootstrapAdditionalIpRangesNetworkConfig(t, testName, 2, 2)
14422+
1435214423 clusterName := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10))
1435314424 acctest.VcrTest(t, resource.TestCase{
1435414425 PreCheck: func() { acctest.AccTestPreCheck(t) },
1435514426 ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
1435614427 CheckDestroy: testAccCheckContainerClusterDestroyProducer(t),
1435714428 Steps: []resource.TestStep{
1435814429 {
14359- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 0, 0 ),
14430+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri ),
1436014431 },
1436114432 {
1436214433 ResourceName: "google_container_cluster.primary",
@@ -14366,7 +14437,7 @@ func TestAccContainerCluster_additional_ip_ranges_config_on_update(t *testing.T)
1436614437 Check: resource.TestCheckResourceAttrSet("google_container_cluster.primary", "node_pool.0.network_config.subnetwork"),
1436714438 },
1436814439 {
14369- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 1, 1 ),
14440+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri[:len(sri)-1] ),
1437014441 },
1437114442 {
1437214443 ResourceName: "google_container_cluster.primary",
@@ -14375,7 +14446,7 @@ func TestAccContainerCluster_additional_ip_ranges_config_on_update(t *testing.T)
1437514446 ImportStateVerifyIgnore: []string{"deletion_protection"},
1437614447 },
1437714448 {
14378- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 0, 0 ),
14449+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri[:1] ),
1437914450 },
1438014451 {
1438114452 ResourceName: "google_container_cluster.primary",
@@ -14384,7 +14455,7 @@ func TestAccContainerCluster_additional_ip_ranges_config_on_update(t *testing.T)
1438414455 ImportStateVerifyIgnore: []string{"deletion_protection"},
1438514456 },
1438614457 {
14387- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 2, 2 ),
14458+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri ),
1438814459 },
1438914460 {
1439014461 ResourceName: "google_container_cluster.primary",
@@ -14393,7 +14464,7 @@ func TestAccContainerCluster_additional_ip_ranges_config_on_update(t *testing.T)
1439314464 ImportStateVerifyIgnore: []string{"deletion_protection"},
1439414465 },
1439514466 {
14396- Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, 0, 0 ),
14467+ Config: testAccContainerCluster_additional_ip_ranges_config(clusterName, network, sri[:1] ),
1439714468 },
1439814469 {
1439914470 ResourceName: "google_container_cluster.primary",
@@ -14445,76 +14516,31 @@ func TestAccContainerCluster_withAnonymousAuthenticationConfig(t *testing.T) {
1444514516 })
1444614517}
1444714518
14448- func testAccContainerCluster_additional_ip_ranges_config(name string, additionalSubnetCount int, secondaryRangeCount int) string {
14449- var subnetStr string
14519+ func testAccContainerCluster_additional_ip_ranges_config(clusterName string, networkName string, sri []subnetRangeInfo) string {
1445014520 var additionalIpRangesStr string
14451- cumulativeRangeIndex := 0
14452- for subnetIndex := 0; subnetIndex < additionalSubnetCount; subnetIndex++ {
14453- var secondaryRangeStr string
14521+
14522+ for _, si := range sri[1:] {
1445414523 var podIpv4RangeStr string
14455- for rangeIndex := 0; rangeIndex < secondaryRangeCount; rangeIndex++ {
14456- secondaryRangeStr += fmt.Sprintf(`
14457- secondary_ip_range {
14458- range_name = "range-%d"
14459- ip_cidr_range = "10.0.%d.0/24"
14460- }
14461- `, cumulativeRangeIndex, cumulativeRangeIndex)
14462-
14463- podIpv4RangeStr += fmt.Sprintf("google_compute_subnetwork.extra_%d.secondary_ip_range[%d].range_name", subnetIndex, rangeIndex)
14464- if rangeIndex != secondaryRangeCount - 1 {
14524+ for i, rn := range si.RangeNames {
14525+ podIpv4RangeStr += fmt.Sprintf("\"%s\"", rn)
14526+ if i != len(si.RangeNames) - 1 {
1446514527 podIpv4RangeStr += ", "
1446614528 }
14467- cumulativeRangeIndex++
1446814529 }
14469-
14470- subnetStr += fmt.Sprintf(`
14471- resource "google_compute_subnetwork" "extra_%d" {
14472- ip_cidr_range = "10.1.%d.0/24"
14473- name = "tf-test-subnet-%d"
14474- network = google_compute_network.main.self_link
14475- region = "us-central1"
14476- %s
14477- }
14478- `, subnetIndex, subnetIndex, subnetIndex, secondaryRangeStr)
14479-
1448014530 additionalIpRangesStr += fmt.Sprintf(`
1448114531 additional_ip_ranges_config {
14482- subnetwork = google_compute_subnetwork.extra_%d.id
14532+ subnetwork = "%s"
1448314533 pod_ipv4_range_names = [%s]
1448414534 }
14485- `, subnetIndex , podIpv4RangeStr)
14535+ `, si.SubnetName , podIpv4RangeStr)
1448614536 }
1448714537
1448814538 return fmt.Sprintf(`
14489- resource "google_compute_network" "main" {
14490- name = "%s"
14491- auto_create_subnetworks = false
14492- }
14493-
14494- resource "google_compute_subnetwork" "main" {
14495- ip_cidr_range = "10.2.0.0/24"
14496- name = "%s"
14497- network = google_compute_network.main.self_link
14498- region = "us-central1"
14499-
14500- secondary_ip_range {
14501- range_name = "services"
14502- ip_cidr_range = "10.3.0.0/16"
14503- }
14504-
14505- secondary_ip_range {
14506- range_name = "pods"
14507- ip_cidr_range = "10.4.0.0/16"
14508- }
14509- }
14510-
14511- %s
14512-
1451314539 resource "google_container_cluster" "primary" {
1451414540 name = "%s"
1451514541 location = "us-central1-a"
14516- network = google_compute_network.main.name
14517- subnetwork = google_compute_subnetwork.main.name
14542+ network = "%s"
14543+ subnetwork = "%s"
1451814544 initial_node_count = 1
1451914545
1452014546 ip_allocation_policy {
@@ -14525,7 +14551,7 @@ func testAccContainerCluster_additional_ip_ranges_config(name string, additional
1452514551
1452614552 deletion_protection = false
1452714553 }
14528- `, name, name, subnetStr, name , additionalIpRangesStr)
14554+ `, clusterName, networkName, sri[0].SubnetName , additionalIpRangesStr)
1452914555}
1453014556
1453114557func testAccContainerCluster_withAnonymousAuthenticationConfig(name, networkName, subnetworkName string, mode string) string {
0 commit comments