Skip to content

Commit 245f145

Browse files
Allow setting serial-port-logging-enable in google_workbench_instance metadata (#14243) (#10253)
[upstream:1922be09ce7cae0f115ba9d229a2765f19b5ced3] Signed-off-by: Modular Magician <[email protected]>
1 parent 3a03d87 commit 245f145

File tree

5 files changed

+64
-5
lines changed

5 files changed

+64
-5
lines changed

.changelog/14243.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
google_workbench_instance: serial-port-logging-enable` metadata key is now settable.
3+
```

google-beta/services/workbench/resource_workbench_instance.go

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package workbench
2121

2222
import (
23+
"context"
2324
"fmt"
2425
"log"
2526
"net/http"
@@ -61,6 +62,10 @@ func WorkbenchInstanceLabelsDiffSuppress(k, old, new string, d *schema.ResourceD
6162
return false
6263
}
6364

65+
var WorkbenchInstanceSettableUnmodifiableDefaultMetadata = []string{
66+
"serial-port-logging-enable",
67+
}
68+
6469
var WorkbenchInstanceProvidedMetadata = []string{
6570
"agent-health-check-interval-seconds",
6671
"agent-health-check-path",
@@ -107,7 +112,6 @@ var WorkbenchInstanceProvidedMetadata = []string{
107112
"report-system-status",
108113
"resource-url",
109114
"restriction",
110-
"serial-port-logging-enable",
111115
"service-account-mode",
112116
"shutdown-script",
113117
"title",
@@ -132,6 +136,12 @@ func WorkbenchInstanceMetadataDiffSuppress(k, old, new string, d *schema.Resourc
132136
}
133137
}
134138

139+
for _, metadata := range WorkbenchInstanceSettableUnmodifiableDefaultMetadata {
140+
if strings.Contains(k, metadata) && new == "" {
141+
return true
142+
}
143+
}
144+
135145
// Let diff be determined by metadata
136146
if strings.Contains(k, "gce_setup.0.metadata.%") {
137147
return true
@@ -299,6 +309,34 @@ func mergeMaps(oldMap, newMap map[string]interface{}) map[string]string {
299309
return modifiedMap
300310
}
301311

312+
func workbenchMetadataCustomizeDiff(_ context.Context, diff *schema.ResourceDiff, meta interface{}) error {
313+
if diff.HasChange("gce_setup.0.metadata") {
314+
o, n := diff.GetChange("gce_setup.0.metadata")
315+
oldMetadata := o.(map[string]interface{})
316+
newMetadata := n.(map[string]interface{})
317+
318+
for _, key := range WorkbenchInstanceSettableUnmodifiableDefaultMetadata {
319+
oldValue, oldOk := oldMetadata[key]
320+
newValue, newOk := newMetadata[key]
321+
322+
// Condition to force new:
323+
// 1. The key exists in both old and new metadata AND their values differ.
324+
// 2. The key exists in new but not in old (meaning it was added).
325+
//
326+
// The key exists in old but not in new (meaning it was removed) is ignored.
327+
if (oldOk && newOk && oldValue != newValue) ||
328+
(!oldOk && newOk) {
329+
// If a change is detected for this specific key, force a new resource and stop checking.
330+
if err := diff.ForceNew("gce_setup.0.metadata"); err != nil {
331+
return err
332+
}
333+
return nil // Return nil immediately after forcing new
334+
}
335+
}
336+
}
337+
return nil
338+
}
339+
302340
func ResourceWorkbenchInstance() *schema.Resource {
303341
return &schema.Resource{
304342
Create: resourceWorkbenchInstanceCreate,
@@ -317,6 +355,7 @@ func ResourceWorkbenchInstance() *schema.Resource {
317355
},
318356

319357
CustomizeDiff: customdiff.All(
358+
workbenchMetadataCustomizeDiff,
320359
tpgresource.SetLabelsDiff,
321360
tpgresource.DefaultProviderProject,
322361
),

google-beta/services/workbench/resource_workbench_instance_generated_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ resource "google_workbench_instance" "instance" {
313313
}
314314
315315
metadata = {
316-
terraform = "true"
316+
terraform = "true",
317+
serial-port-logging-enable = "false"
317318
}
318319
319320
enable_ip_forwarding = true

google-beta/services/workbench/resource_workbench_instance_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ resource "google_workbench_instance" "instance" {
103103
}
104104
105105
metadata = {
106-
terraform = "true"
106+
terraform = "true",
107+
"serial-port-logging-enable" = "false",
107108
}
108109
109110
}
@@ -368,6 +369,19 @@ func TestAccWorkbenchInstance_updateMetadataKey(t *testing.T) {
368369
ImportStateVerify: true,
369370
ImportStateVerifyIgnore: []string{"name", "instance_owners", "location", "instance_id", "request_id", "labels", "terraform_labels", "desired_state", "update_time", "health_info", "health_state"},
370371
},
372+
{
373+
Config: testAccWorkbenchInstance_update(context),
374+
Check: resource.ComposeTestCheckFunc(
375+
resource.TestCheckResourceAttr(
376+
"google_workbench_instance.instance", "state", "ACTIVE"),
377+
),
378+
},
379+
{
380+
ResourceName: "google_workbench_instance.instance",
381+
ImportState: true,
382+
ImportStateVerify: true,
383+
ImportStateVerifyIgnore: []string{"name", "instance_owners", "location", "instance_id", "request_id", "labels", "terraform_labels", "desired_state", "update_time", "health_info", "health_state"},
384+
},
371385
{
372386
Config: testAccWorkbenchInstance_updateMetadata(context),
373387
Check: resource.ComposeTestCheckFunc(
@@ -395,6 +409,7 @@ resource "google_workbench_instance" "instance" {
395409
metadata = {
396410
terraform = "true"
397411
"resource-url" = "new-fake-value",
412+
"serial-port-logging-enable" = "true",
398413
}
399414
}
400415
@@ -417,7 +432,7 @@ resource "google_workbench_instance" "instance" {
417432
terraform = "true",
418433
"idle-timeout-seconds" = "10800",
419434
"image-url" = "fake-value",
420-
"container-custom-params" = "test-params",
435+
"container-custom-params" = "test-params",
421436
}
422437
}
423438

website/docs/r/workbench_instance.html.markdown

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@ resource "google_workbench_instance" "instance" {
200200
}
201201
202202
metadata = {
203-
terraform = "true"
203+
terraform = "true",
204+
serial-port-logging-enable = "false"
204205
}
205206
206207
enable_ip_forwarding = true

0 commit comments

Comments
 (0)