Skip to content

Commit 99a7f5a

Browse files
Promote container cluster enable_l4_ilb_subsetting from beta to ga (#6767) (#12988)
Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent 3539158 commit 99a7f5a

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

.changelog/6767.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
container: Added `enable_l4_ilb_subsetting` to GA `google_container_cluster`
3+
```

google/resource_container_cluster.go

+62
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,20 @@ func rfc5545RecurrenceDiffSuppress(k, o, n string, d *schema.ResourceData) bool
9696
return false
9797
}
9898

99+
// Has enable_l4_ilb_subsetting been enabled before?
100+
func isBeenEnabled(_ context.Context, old, new, _ interface{}) bool {
101+
if old == nil || new == nil {
102+
return false
103+
}
104+
105+
// if subsetting is enabled, but is not now
106+
if old.(bool) && !new.(bool) {
107+
return true
108+
}
109+
110+
return false
111+
}
112+
99113
func resourceContainerCluster() *schema.Resource {
100114
return &schema.Resource{
101115
UseJSONNumber: true,
@@ -106,6 +120,7 @@ func resourceContainerCluster() *schema.Resource {
106120

107121
CustomizeDiff: customdiff.All(
108122
resourceNodeConfigEmptyGuestAccelerator,
123+
customdiff.ForceNewIfChange("enable_l4_ilb_subsetting", isBeenEnabled),
109124
containerClusterAutopilotCustomizeDiff,
110125
containerClusterNodeVersionRemoveDefaultCustomizeDiff,
111126
containerClusterNetworkPolicyEmptyCustomizeDiff,
@@ -1384,6 +1399,12 @@ func resourceContainerCluster() *schema.Resource {
13841399
Description: `Whether Intra-node visibility is enabled for this cluster. This makes same node pod to pod traffic visible for VPC network.`,
13851400
ConflictsWith: []string{"enable_autopilot"},
13861401
},
1402+
"enable_l4_ilb_subsetting": {
1403+
Type: schema.TypeBool,
1404+
Optional: true,
1405+
Description: `Whether L4ILB Subsetting is enabled for this cluster.`,
1406+
Default: false,
1407+
},
13871408
"private_ipv6_google_access": {
13881409
Type: schema.TypeString,
13891410
Optional: true,
@@ -1591,6 +1612,7 @@ func resourceContainerClusterCreate(d *schema.ResourceData, meta interface{}) er
15911612
DefaultSnatStatus: expandDefaultSnatStatus(d.Get("default_snat_status")),
15921613
DatapathProvider: d.Get("datapath_provider").(string),
15931614
PrivateIpv6GoogleAccess: d.Get("private_ipv6_google_access").(string),
1615+
EnableL4ilbSubsetting: d.Get("enable_l4_ilb_subsetting").(bool),
15941616
DnsConfig: expandDnsConfig(d.Get("dns_config")),
15951617
},
15961618
MasterAuth: expandMasterAuth(d.Get("master_auth")),
@@ -1960,6 +1982,9 @@ func resourceContainerClusterRead(d *schema.ResourceData, meta interface{}) erro
19601982
if err := d.Set("notification_config", flattenNotificationConfig(cluster.NotificationConfig)); err != nil {
19611983
return err
19621984
}
1985+
if err := d.Set("enable_l4_ilb_subsetting", cluster.NetworkConfig.EnableL4ilbSubsetting); err != nil {
1986+
return fmt.Errorf("Error setting enable_l4_ilb_subsetting: %s", err)
1987+
}
19631988
if err := d.Set("cost_management_config", flattenManagementConfig(cluster.CostManagementConfig)); err != nil {
19641989
return fmt.Errorf("Error setting cost_management_config: %s", err)
19651990
}
@@ -2315,6 +2340,43 @@ func resourceContainerClusterUpdate(d *schema.ResourceData, meta interface{}) er
23152340
log.Printf("[INFO] GKE cluster %s Private IPv6 Google Access has been updated", d.Id())
23162341
}
23172342

2343+
if d.HasChange("enable_l4_ilb_subsetting") {
2344+
// This field can be changed from false to true but not from false to true. CustomizeDiff handles that check.
2345+
enabled := d.Get("enable_l4_ilb_subsetting").(bool)
2346+
req := &container.UpdateClusterRequest{
2347+
Update: &container.ClusterUpdate{
2348+
DesiredL4ilbSubsettingConfig: &container.ILBSubsettingConfig{
2349+
Enabled: enabled,
2350+
ForceSendFields: []string{"Enabled"},
2351+
},
2352+
},
2353+
}
2354+
updateF := func() error {
2355+
log.Println("[DEBUG] updating enable_l4_ilb_subsetting")
2356+
name := containerClusterFullName(project, location, clusterName)
2357+
clusterUpdateCall := config.NewContainerClient(userAgent).Projects.Locations.Clusters.Update(name, req)
2358+
if config.UserProjectOverride {
2359+
clusterUpdateCall.Header().Add("X-Goog-User-Project", project)
2360+
}
2361+
op, err := clusterUpdateCall.Do()
2362+
if err != nil {
2363+
return err
2364+
}
2365+
2366+
// Wait until it's updated
2367+
err = containerOperationWait(config, op, project, location, "updating L4", userAgent, d.Timeout(schema.TimeoutUpdate))
2368+
log.Println("[DEBUG] done updating enable_intranode_visibility")
2369+
return err
2370+
}
2371+
2372+
// Call update serially.
2373+
if err := lockedCall(lockKey, updateF); err != nil {
2374+
return err
2375+
}
2376+
2377+
log.Printf("[INFO] GKE cluster %s L4 ILB Subsetting has been updated to %v", d.Id(), enabled)
2378+
}
2379+
23182380
if d.HasChange("cost_management_config") {
23192381
c := d.Get("cost_management_config")
23202382
req := &container.UpdateClusterRequest{

google/resource_container_cluster_test.go

+83
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,45 @@ func TestAccContainerCluster_withConfidentialNodes(t *testing.T) {
323323
})
324324
}
325325

326+
func TestAccContainerCluster_withILBSubsetting(t *testing.T) {
327+
t.Parallel()
328+
329+
clusterName := fmt.Sprintf("tf-test-cluster-%s", randString(t, 10))
330+
npName := fmt.Sprintf("tf-test-cluster-nodepool-%s", randString(t, 10))
331+
332+
vcrTest(t, resource.TestCase{
333+
PreCheck: func() { testAccPreCheck(t) },
334+
Providers: testAccProviders,
335+
CheckDestroy: testAccCheckContainerClusterDestroyProducer(t),
336+
Steps: []resource.TestStep{
337+
{
338+
Config: testAccContainerCluster_disableILBSubSetting(clusterName, npName),
339+
},
340+
{
341+
ResourceName: "google_container_cluster.confidential_nodes",
342+
ImportState: true,
343+
ImportStateVerify: true,
344+
},
345+
{
346+
Config: testAccContainerCluster_withILBSubSetting(clusterName, npName),
347+
},
348+
{
349+
ResourceName: "google_container_cluster.confidential_nodes",
350+
ImportState: true,
351+
ImportStateVerify: true,
352+
},
353+
{
354+
Config: testAccContainerCluster_disableILBSubSetting(clusterName, npName),
355+
},
356+
{
357+
ResourceName: "google_container_cluster.confidential_nodes",
358+
ImportState: true,
359+
ImportStateVerify: true,
360+
},
361+
},
362+
})
363+
}
364+
326365
func TestAccContainerCluster_withMasterAuthConfig_NoCert(t *testing.T) {
327366
t.Parallel()
328367

@@ -3150,6 +3189,50 @@ resource "google_container_cluster" "confidential_nodes" {
31503189
`, clusterName, npName)
31513190
}
31523191

3192+
func testAccContainerCluster_withILBSubSetting(clusterName string, npName string) string {
3193+
return fmt.Sprintf(`
3194+
resource "google_container_cluster" "confidential_nodes" {
3195+
name = "%s"
3196+
location = "us-central1-a"
3197+
release_channel {
3198+
channel = "RAPID"
3199+
}
3200+
3201+
node_pool {
3202+
name = "%s"
3203+
initial_node_count = 1
3204+
node_config {
3205+
machine_type = "e2-medium"
3206+
}
3207+
}
3208+
3209+
enable_l4_ilb_subsetting = true
3210+
}
3211+
`, clusterName, npName)
3212+
}
3213+
3214+
func testAccContainerCluster_disableILBSubSetting(clusterName string, npName string) string {
3215+
return fmt.Sprintf(`
3216+
resource "google_container_cluster" "confidential_nodes" {
3217+
name = "%s"
3218+
location = "us-central1-a"
3219+
release_channel {
3220+
channel = "RAPID"
3221+
}
3222+
3223+
node_pool {
3224+
name = "%s"
3225+
initial_node_count = 1
3226+
node_config {
3227+
machine_type = "e2-medium"
3228+
}
3229+
}
3230+
3231+
enable_l4_ilb_subsetting = false
3232+
}
3233+
`, clusterName, npName)
3234+
}
3235+
31533236
func testAccContainerCluster_withNetworkPolicyEnabled(clusterName string) string {
31543237
return fmt.Sprintf(`
31553238
resource "google_container_cluster" "with_network_policy_enabled" {

0 commit comments

Comments
 (0)