From 57061b953760f25add53b16316441068d9fe4c21 Mon Sep 17 00:00:00 2001 From: wj-chen Date: Mon, 29 Jul 2024 13:54:14 -0700 Subject: [PATCH] Fix salesforce params specification in google_bigquery_data_transfer_config (#11232) --- .../products/bigquerydatatransfer/Config.yaml | 7 +++ .../encoders/bigquery_data_transfer.go.erb | 20 +++++++- ...querydatatransfer_config_salesforce.tf.erb | 23 +++++++++ ...urce_bigquery_data_transfer_config_test.go | 49 +++++++++++++++++++ 4 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 mmv1/templates/terraform/examples/bigquerydatatransfer_config_salesforce.tf.erb diff --git a/mmv1/products/bigquerydatatransfer/Config.yaml b/mmv1/products/bigquerydatatransfer/Config.yaml index c16c00b385b1..1007b34e42ef 100644 --- a/mmv1/products/bigquerydatatransfer/Config.yaml +++ b/mmv1/products/bigquerydatatransfer/Config.yaml @@ -46,6 +46,13 @@ examples: vars: display_name: 'my-query' dataset_id: 'my_dataset' + - !ruby/object:Provider::Terraform::Examples + skip_test: true + name: 'bigquerydatatransfer_config_salesforce' + primary_resource_id: 'salesforce_config' + vars: + display_name: 'my-salesforce-config' + dataset_id: 'my_dataset' parameters: - !ruby/object:Api::Type::String name: 'location' diff --git a/mmv1/templates/terraform/encoders/bigquery_data_transfer.go.erb b/mmv1/templates/terraform/encoders/bigquery_data_transfer.go.erb index 36fdd9631472..c77a927533c6 100644 --- a/mmv1/templates/terraform/encoders/bigquery_data_transfer.go.erb +++ b/mmv1/templates/terraform/encoders/bigquery_data_transfer.go.erb @@ -17,8 +17,24 @@ if !ok { paramMap = make(map[string]string) } -var params map[string]string -params = paramMap.(map[string]string) +params := map[string]interface{}{} + +for k, v := range paramMap.(map[string]string) { + var value interface{} + if err := json.Unmarshal([]byte(v), &value); err != nil { + // If the value is a string, don't convert it to anything. + params[k] = v + } else { + switch value.(type) { + case float64: + // If the value is a number, keep the string representation. + params[k] = v + default: + // If the value is another JSON type, keep the unmarshalled type as is. + params[k] = value + } + } +} for _, sp := range sensitiveParams { if auth, _ := d.GetOkExists("sensitive_params.0." + sp); auth != "" { diff --git a/mmv1/templates/terraform/examples/bigquerydatatransfer_config_salesforce.tf.erb b/mmv1/templates/terraform/examples/bigquerydatatransfer_config_salesforce.tf.erb new file mode 100644 index 000000000000..360c5549d0d5 --- /dev/null +++ b/mmv1/templates/terraform/examples/bigquerydatatransfer_config_salesforce.tf.erb @@ -0,0 +1,23 @@ +data "google_project" "project" { +} + +resource "google_bigquery_dataset" "my_dataset" { + dataset_id = "<%= ctx[:vars]['dataset_id'] %>" + description = "My dataset" + location = "asia-northeast1" +} +resource "google_bigquery_data_transfer_config" "<%= ctx[:primary_resource_id] %>" { + display_name = "<%= ctx[:vars]['display_name'] %>" + location = "asia-northeast1" + data_source_id = "salesforce" + schedule = "first sunday of quarter 00:00" + destination_dataset_id = google_bigquery_dataset.my_dataset.dataset_id + params = { + "connector.authentication.oauth.clientId" = "client-id" + "connector.authentication.oauth.clientSecret" = "client-secret" + "connector.authentication.username" = "username" + "connector.authentication.password" = "password" + "connector.authentication.securityToken" = "security-token" + "assets" = "[asset-a, asset-b]" + } +} diff --git a/mmv1/third_party/terraform/services/bigquerydatatransfer/resource_bigquery_data_transfer_config_test.go b/mmv1/third_party/terraform/services/bigquerydatatransfer/resource_bigquery_data_transfer_config_test.go index df3894a8b6e6..e770d6f407d8 100644 --- a/mmv1/third_party/terraform/services/bigquerydatatransfer/resource_bigquery_data_transfer_config_test.go +++ b/mmv1/third_party/terraform/services/bigquerydatatransfer/resource_bigquery_data_transfer_config_test.go @@ -301,6 +301,7 @@ func TestAccBigqueryDataTransferConfig(t *testing.T) { "booleanParam": testAccBigqueryDataTransferConfig_copy_booleanParam, "update_params": testAccBigqueryDataTransferConfig_force_new_update_params, "update_service_account": testAccBigqueryDataTransferConfig_scheduledQuery_update_service_account, + "salesforce": testAccBigqueryDataTransferConfig_salesforce_basic, } for name, tc := range testCases { @@ -570,6 +571,27 @@ func testAccCheckDataTransferServiceAccountNamePrefix(resourceName string, prefi } } +func testAccBigqueryDataTransferConfig_salesforce_basic(t *testing.T) { + randomSuffix := acctest.RandString(t, 10) + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckBigqueryDataTransferConfigDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccBigqueryDataTransferConfig_salesforce(randomSuffix), + }, + { + ResourceName: "google_bigquery_data_transfer_config.salesforce_config", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"location"}, + }, + }, + }) +} + func testAccBigqueryDataTransferConfig_scheduledQuery(random_suffix, random_suffix2, schedule, start_time, end_time, letter string) string { return fmt.Sprintf(` data "google_project" "project" {} @@ -810,3 +832,30 @@ resource "google_bigquery_data_transfer_config" "query_config" { } `, service_account, service_account, service_account, random_suffix, random_suffix, service_account) } + +func testAccBigqueryDataTransferConfig_salesforce(randomSuffix string) string { + return fmt.Sprintf(` +resource "google_bigquery_dataset" "dataset" { + dataset_id = "tf_test_%s" + friendly_name = "foo" + description = "bar" + location = "US" +} + +resource "google_bigquery_data_transfer_config" "salesforce_config" { + display_name = "tf-test-%s" + data_source_id = "salesforce" + destination_dataset_id = google_bigquery_dataset.dataset.dataset_id + location = google_bigquery_dataset.dataset.location + + params = { + "connector.authentication.oauth.clientId" = "" + "connector.authentication.oauth.clientSecret" = "" + "connector.authentication.username" = "" + "connector.authentication.password" = "" + "connector.authentication.securityToken" = "" + "assets" = "[asset-a, asset-b]" + } +} +`, randomSuffix, randomSuffix) +}