diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_internal_test.go.tmpl b/mmv1/third_party/terraform/services/container/resource_container_cluster_internal_test.go.tmpl index fd84d987f04c..e48e516d2545 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_cluster_internal_test.go.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_internal_test.go.tmpl @@ -664,6 +664,10 @@ func TestUnitFlattenClusterNodePools(t *testing.T) { Optional: true, Elem: &schema.Resource{Schema: map[string]*schema.Schema{"create_pod_range": {Type: schema.TypeBool}}}, }, + "ignore_node_count_changes": { + Type: schema.TypeBool, + Optional: true, + }, }, }, Optional: true, @@ -701,6 +705,7 @@ func TestUnitFlattenClusterNodePools(t *testing.T) { "managed_instance_group_urls": []string{}, "version": "", "network_config": []map[string]interface{}{}, + "ignore_node_count_changes": false, }, { "name": "pool-2", @@ -713,6 +718,7 @@ func TestUnitFlattenClusterNodePools(t *testing.T) { "managed_instance_group_urls": []string{}, "version": "", "network_config": []map[string]interface{}{}, + "ignore_node_count_changes": false, }, }, expectError: false, diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl index da21832b9613..4fef9ccf9eb3 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl @@ -1992,7 +1992,7 @@ func TestAccContainerCluster_regionalWithNodePool(t *testing.T) { ResourceName: "google_container_cluster.regional", ImportState: true, ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"deletion_protection", "ignore_node_count_changes", "node_pool.0.ignore_node_count_changes"}, + ImportStateVerifyIgnore: []string{"deletion_protection", "ignore_node_count_changes", "node_pool.0.ignore_node_count_changes", "node_pool.0.managed_instance_group_urls"}, }, }, }) diff --git a/mmv1/third_party/terraform/services/container/resource_container_node_pool.go.tmpl b/mmv1/third_party/terraform/services/container/resource_container_node_pool.go.tmpl index e808ce486cb7..5716217bb398 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_node_pool.go.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_node_pool.go.tmpl @@ -158,6 +158,17 @@ func (instanceGroupManagerCache *instanceGroupManagerCache) needsRefresh(fullyQu return time.Since(igm.updateTime) > instanceGroupManagerCache.ttl } +func (instanceGroupManagerCache *instanceGroupManagerCache) invalidate(igmUrl string) { + instanceGroupManagerCache.mutex.Lock() + defer instanceGroupManagerCache.mutex.Unlock() + + matches := instanceGroupManagerURL.FindStringSubmatch(igmUrl) + if len(matches) >= 4 { + delete(instanceGroupManagerCache.instanceGroupManagers, matches[0]) + } +} + + // We need to set ttl to 0 to disable caching in VCR testing. // This ensure all NP/MIG LIST requests are made consistently, // preventing non-deterministic behavior that would break VCR. @@ -1524,6 +1535,7 @@ func flattenNodePool(d *schema.ResourceData, config *transport_tpg.Config, np *c // or leave them empty. Passing the API URLs to igmUrls at least populates them for basic usage. for _, url := range np.InstanceGroupUrls { igmUrls = append(igmUrls, url) + igmCache.invalidate(url) } } else { for _, url := range np.InstanceGroupUrls { @@ -1563,6 +1575,7 @@ func flattenNodePool(d *schema.ResourceData, config *transport_tpg.Config, np *c "managed_instance_group_urls": managedIgmUrls, "version": np.Version, "network_config": flattenNodeNetworkConfig(np.NetworkConfig, d, prefix), + "ignore_node_count_changes": d.Get(prefix + "ignore_node_count_changes"), } if np.Autoscaling != nil { @@ -1867,6 +1880,11 @@ func nodePoolUpdate(d *schema.ResourceData, meta interface{}, nodePoolInfo *Node if err := retryWhileIncompatibleOperation(timeout, npLockKey, updateF); err != nil { return err } + if urls, ok := d.GetOk(prefix + "instance_group_urls"); ok { + for _, u := range urls.([]interface{}) { + igmCache.invalidate(u.(string)) + } + } log.Printf("[INFO] GKE node pool %s size has been updated to %d", name, newSize) }