Skip to content

Commit 5bb3168

Browse files
Fix bug in Pub/Sub Subscription avroConfig which was not sending empty configurations. (#12108) (#8717)
[upstream:e5c4adb8ea7a58fcdb6a61b800c0e07b022934fa] Signed-off-by: Modular Magician <[email protected]>
1 parent 9fd4fc2 commit 5bb3168

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

.changelog/12108.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
pubsub: fixed the issue to allow successfully configure empty `cloud_storage_config.avro_config` field in `google_pubsub_subscription`
3+
```

google-beta/services/pubsub/resource_pubsub_subscription.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -1261,9 +1261,6 @@ func flattenPubsubSubscriptionCloudStorageConfigAvroConfig(v interface{}, d *sch
12611261
return nil
12621262
}
12631263
original := v.(map[string]interface{})
1264-
if len(original) == 0 {
1265-
return nil
1266-
}
12671264
transformed := make(map[string]interface{})
12681265
transformed["write_metadata"] =
12691266
flattenPubsubSubscriptionCloudStorageConfigAvroConfigWriteMetadata(original["writeMetadata"], d, config)
@@ -1648,7 +1645,7 @@ func expandPubsubSubscriptionCloudStorageConfig(v interface{}, d tpgresource.Ter
16481645
transformedAvroConfig, err := expandPubsubSubscriptionCloudStorageConfigAvroConfig(original["avro_config"], d, config)
16491646
if err != nil {
16501647
return nil, err
1651-
} else if val := reflect.ValueOf(transformedAvroConfig); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1648+
} else {
16521649
transformed["avroConfig"] = transformedAvroConfig
16531650
}
16541651

@@ -1696,24 +1693,29 @@ func expandPubsubSubscriptionCloudStorageConfigState(v interface{}, d tpgresourc
16961693

16971694
func expandPubsubSubscriptionCloudStorageConfigAvroConfig(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
16981695
l := v.([]interface{})
1699-
if len(l) == 0 || l[0] == nil {
1696+
if len(l) == 0 {
17001697
return nil, nil
17011698
}
1699+
1700+
if l[0] == nil {
1701+
transformed := make(map[string]interface{})
1702+
return transformed, nil
1703+
}
17021704
raw := l[0]
17031705
original := raw.(map[string]interface{})
17041706
transformed := make(map[string]interface{})
17051707

17061708
transformedWriteMetadata, err := expandPubsubSubscriptionCloudStorageConfigAvroConfigWriteMetadata(original["write_metadata"], d, config)
17071709
if err != nil {
17081710
return nil, err
1709-
} else if val := reflect.ValueOf(transformedWriteMetadata); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1711+
} else {
17101712
transformed["writeMetadata"] = transformedWriteMetadata
17111713
}
17121714

17131715
transformedUseTopicSchema, err := expandPubsubSubscriptionCloudStorageConfigAvroConfigUseTopicSchema(original["use_topic_schema"], d, config)
17141716
if err != nil {
17151717
return nil, err
1716-
} else if val := reflect.ValueOf(transformedUseTopicSchema); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1718+
} else {
17171719
transformed["useTopicSchema"] = transformedUseTopicSchema
17181720
}
17191721

google-beta/services/pubsub/resource_pubsub_subscription_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,31 @@ func TestAccPubsubSubscriptionCloudStorage_updateAvro(t *testing.T) {
354354
})
355355
}
356356

357+
func TestAccPubsubSubscriptionCloudStorage_emptyAvroConfig(t *testing.T) {
358+
t.Parallel()
359+
360+
bucket := fmt.Sprintf("tf-test-bucket-%s", acctest.RandString(t, 10))
361+
topic := fmt.Sprintf("tf-test-topic-%s", acctest.RandString(t, 10))
362+
subscriptionShort := fmt.Sprintf("tf-test-sub-%s", acctest.RandString(t, 10))
363+
364+
acctest.VcrTest(t, resource.TestCase{
365+
PreCheck: func() { acctest.AccTestPreCheck(t) },
366+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
367+
CheckDestroy: testAccCheckPubsubSubscriptionDestroyProducer(t),
368+
Steps: []resource.TestStep{
369+
{
370+
Config: testAccPubsubSubscriptionCloudStorage_basic(bucket, topic, subscriptionShort, "pre-", "-suffix", "YYYY-MM-DD/hh_mm_ssZ", 1000, "300s", 1000, "", "empty-avro"),
371+
},
372+
{
373+
ResourceName: "google_pubsub_subscription.foo",
374+
ImportStateId: subscriptionShort,
375+
ImportState: true,
376+
ImportStateVerify: true,
377+
},
378+
},
379+
})
380+
}
381+
357382
func TestAccPubsubSubscriptionCloudStorage_serviceAccount(t *testing.T) {
358383
t.Parallel()
359384

@@ -825,6 +850,8 @@ resource "google_storage_bucket_iam_member" "admin" {
825850
use_topic_schema = true
826851
}
827852
`
853+
} else if outputFormat == "empty-avro" {
854+
outputFormatString = `avro_config {}`
828855
}
829856
return fmt.Sprintf(`
830857
data "google_project" "project" { }

0 commit comments

Comments
 (0)