From 28da222f00c9d9086540a07111c3a7718df8a226 Mon Sep 17 00:00:00 2001 From: The Magician Date: Mon, 16 Oct 2023 17:48:42 -0700 Subject: [PATCH] Fix update bigquery transfer config (#9212) (#6516) [upstream:ba4e63a4266cd105f28fc58575fd69c165fab747] Signed-off-by: Modular Magician --- .changelog/9212.txt | 3 ++ .../resource_bigquery_data_transfer_config.go | 42 ++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 .changelog/9212.txt diff --git a/.changelog/9212.txt b/.changelog/9212.txt new file mode 100644 index 0000000000..10d230537e --- /dev/null +++ b/.changelog/9212.txt @@ -0,0 +1,3 @@ +```release-note:bug +bigquerydatatransfer: fixed an error when updating `google_bigquery_data_transfer_config` related to incorrect update masks +``` diff --git a/google-beta/services/bigquerydatatransfer/resource_bigquery_data_transfer_config.go b/google-beta/services/bigquerydatatransfer/resource_bigquery_data_transfer_config.go index e0732205ad..7e9aee88a6 100644 --- a/google-beta/services/bigquerydatatransfer/resource_bigquery_data_transfer_config.go +++ b/google-beta/services/bigquerydatatransfer/resource_bigquery_data_transfer_config.go @@ -595,12 +595,52 @@ func resourceBigqueryDataTransferConfigUpdate(d *schema.ResourceData, meta inter return err } - url, err := tpgresource.ReplaceVars(d, config, "{{BigqueryDataTransferBasePath}}{{name}}?serviceAccountName={{service_account_name}}&updateMask=serviceAccountName,displayName,destinationDatasetId,schedule,scheduleOptions,emailPreferences,notificationPubsubTopic,dataRefreshWindowDays,disabled,params") + url, err := tpgresource.ReplaceVars(d, config, "{{BigqueryDataTransferBasePath}}{{name}}?serviceAccountName={{service_account_name}}") if err != nil { return err } log.Printf("[DEBUG] Updating Config %q: %#v", d.Id(), obj) + updateMask := []string{} + if v, ok := d.GetOk("service_account_name"); ok { + if v != nil && d.HasChange("service_account_name") { + updateMask = append(updateMask, "serviceAccountName") + } + } + if d.HasChange("display_name") { + updateMask = append(updateMask, "displayName") + } + if d.HasChange("destination_dataset_id") { + updateMask = append(updateMask, "destinationDatasetId") + } + if d.HasChange("schedule") { + updateMask = append(updateMask, "schedule") + } + if d.HasChange("schedule_options") { + updateMask = append(updateMask, "scheduleOptions") + } + if d.HasChange("email_preferences") { + updateMask = append(updateMask, "emailPreferences") + } + if d.HasChange("notification_pubsub_topic") { + updateMask = append(updateMask, "notificationPubsubTopic") + } + if d.HasChange("data_refresh_window_days") { + updateMask = append(updateMask, "dataRefreshWindowDays") + } + if d.HasChange("disabled") { + updateMask = append(updateMask, "disabled") + } + if d.HasChange("params") { + updateMask = append(updateMask, "params") + } + + // updateMask is a URL parameter but not present in the schema, so ReplaceVars + // won't set it + url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")}) + if err != nil { + return err + } // err == nil indicates that the billing_project value was found if bp, err := tpgresource.GetBillingProject(d, config); err == nil {