Skip to content

Commit b5b8a32

Browse files
feat(bigquery-data-transfer): add email preferences (#4156) (#2652)
* feat(bigquery-data-transfer): add email preferences * fix(bigquery-data-transfer): at_least_one_of -> required Signed-off-by: Modular Magician <[email protected]>
1 parent 270c674 commit b5b8a32

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed

.changelog/4156.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
bigquery: added `email_preferences ` field to `google_bigquery_data_transfer_config` resource
3+
```

google-beta/resource_bigquery_data_transfer_config.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,22 @@ Set the value to 0 to use the default value.`,
9696
Optional: true,
9797
Description: `When set to true, no runs are scheduled for a given transfer.`,
9898
},
99+
"email_preferences": {
100+
Type: schema.TypeList,
101+
Optional: true,
102+
Description: `Email notifications will be sent according to these preferences to the
103+
email address of the user who owns this transfer config.`,
104+
MaxItems: 1,
105+
Elem: &schema.Resource{
106+
Schema: map[string]*schema.Schema{
107+
"enable_failure_email": {
108+
Type: schema.TypeBool,
109+
Required: true,
110+
Description: `If true, email notifications will be sent on transfer run failures.`,
111+
},
112+
},
113+
},
114+
},
99115
"location": {
100116
Type: schema.TypeString,
101117
Optional: true,
@@ -248,6 +264,12 @@ func resourceBigqueryDataTransferConfigCreate(d *schema.ResourceData, meta inter
248264
} else if v, ok := d.GetOkExists("schedule_options"); !isEmptyValue(reflect.ValueOf(scheduleOptionsProp)) && (ok || !reflect.DeepEqual(v, scheduleOptionsProp)) {
249265
obj["scheduleOptions"] = scheduleOptionsProp
250266
}
267+
emailPreferencesProp, err := expandBigqueryDataTransferConfigEmailPreferences(d.Get("email_preferences"), d, config)
268+
if err != nil {
269+
return err
270+
} else if v, ok := d.GetOkExists("email_preferences"); !isEmptyValue(reflect.ValueOf(emailPreferencesProp)) && (ok || !reflect.DeepEqual(v, emailPreferencesProp)) {
271+
obj["emailPreferences"] = emailPreferencesProp
272+
}
251273
notificationPubsubTopicProp, err := expandBigqueryDataTransferConfigNotificationPubsubTopic(d.Get("notification_pubsub_topic"), d, config)
252274
if err != nil {
253275
return err
@@ -399,6 +421,9 @@ func resourceBigqueryDataTransferConfigRead(d *schema.ResourceData, meta interfa
399421
if err := d.Set("schedule_options", flattenBigqueryDataTransferConfigScheduleOptions(res["scheduleOptions"], d, config)); err != nil {
400422
return fmt.Errorf("Error reading Config: %s", err)
401423
}
424+
if err := d.Set("email_preferences", flattenBigqueryDataTransferConfigEmailPreferences(res["emailPreferences"], d, config)); err != nil {
425+
return fmt.Errorf("Error reading Config: %s", err)
426+
}
402427
if err := d.Set("notification_pubsub_topic", flattenBigqueryDataTransferConfigNotificationPubsubTopic(res["notificationPubsubTopic"], d, config)); err != nil {
403428
return fmt.Errorf("Error reading Config: %s", err)
404429
}
@@ -449,6 +474,12 @@ func resourceBigqueryDataTransferConfigUpdate(d *schema.ResourceData, meta inter
449474
} else if v, ok := d.GetOkExists("schedule_options"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, scheduleOptionsProp)) {
450475
obj["scheduleOptions"] = scheduleOptionsProp
451476
}
477+
emailPreferencesProp, err := expandBigqueryDataTransferConfigEmailPreferences(d.Get("email_preferences"), d, config)
478+
if err != nil {
479+
return err
480+
} else if v, ok := d.GetOkExists("email_preferences"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, emailPreferencesProp)) {
481+
obj["emailPreferences"] = emailPreferencesProp
482+
}
452483
notificationPubsubTopicProp, err := expandBigqueryDataTransferConfigNotificationPubsubTopic(d.Get("notification_pubsub_topic"), d, config)
453484
if err != nil {
454485
return err
@@ -499,6 +530,10 @@ func resourceBigqueryDataTransferConfigUpdate(d *schema.ResourceData, meta inter
499530
updateMask = append(updateMask, "scheduleOptions")
500531
}
501532

533+
if d.HasChange("email_preferences") {
534+
updateMask = append(updateMask, "emailPreferences")
535+
}
536+
502537
if d.HasChange("notification_pubsub_topic") {
503538
updateMask = append(updateMask, "notificationPubsubTopic")
504539
}
@@ -635,6 +670,23 @@ func flattenBigqueryDataTransferConfigScheduleOptionsEndTime(v interface{}, d *s
635670
return v
636671
}
637672

673+
func flattenBigqueryDataTransferConfigEmailPreferences(v interface{}, d *schema.ResourceData, config *Config) interface{} {
674+
if v == nil {
675+
return nil
676+
}
677+
original := v.(map[string]interface{})
678+
if len(original) == 0 {
679+
return nil
680+
}
681+
transformed := make(map[string]interface{})
682+
transformed["enable_failure_email"] =
683+
flattenBigqueryDataTransferConfigEmailPreferencesEnableFailureEmail(original["enableFailureEmail"], d, config)
684+
return []interface{}{transformed}
685+
}
686+
func flattenBigqueryDataTransferConfigEmailPreferencesEnableFailureEmail(v interface{}, d *schema.ResourceData, config *Config) interface{} {
687+
return v
688+
}
689+
638690
func flattenBigqueryDataTransferConfigNotificationPubsubTopic(v interface{}, d *schema.ResourceData, config *Config) interface{} {
639691
return v
640692
}
@@ -735,6 +787,29 @@ func expandBigqueryDataTransferConfigScheduleOptionsEndTime(v interface{}, d Ter
735787
return v, nil
736788
}
737789

790+
func expandBigqueryDataTransferConfigEmailPreferences(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
791+
l := v.([]interface{})
792+
if len(l) == 0 || l[0] == nil {
793+
return nil, nil
794+
}
795+
raw := l[0]
796+
original := raw.(map[string]interface{})
797+
transformed := make(map[string]interface{})
798+
799+
transformedEnableFailureEmail, err := expandBigqueryDataTransferConfigEmailPreferencesEnableFailureEmail(original["enable_failure_email"], d, config)
800+
if err != nil {
801+
return nil, err
802+
} else if val := reflect.ValueOf(transformedEnableFailureEmail); val.IsValid() && !isEmptyValue(val) {
803+
transformed["enableFailureEmail"] = transformedEnableFailureEmail
804+
}
805+
806+
return transformed, nil
807+
}
808+
809+
func expandBigqueryDataTransferConfigEmailPreferencesEnableFailureEmail(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
810+
return v, nil
811+
}
812+
738813
func expandBigqueryDataTransferConfigNotificationPubsubTopic(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
739814
return v, nil
740815
}

google-beta/resource_bigquery_data_transfer_config_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ resource "google_bigquery_data_transfer_config" "query_config" {
191191
}
192192
destination_dataset_id = google_bigquery_dataset.my_dataset.dataset_id
193193
notification_pubsub_topic = google_pubsub_topic.my_topic.id
194+
email_preferences = {
195+
enable_failure_email = true
196+
}
194197
params = {
195198
destination_table_name_template = "my_table"
196199
write_disposition = "WRITE_APPEND"

website/docs/r/bigquery_data_transfer_config.html.markdown

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ The following arguments are supported:
113113
Options customizing the data transfer schedule.
114114
Structure is documented below.
115115

116+
* `email_preferences` -
117+
(Optional)
118+
Email notifications will be sent according to these preferences to the
119+
email address of the user who owns this transfer config.
120+
Structure is documented below.
121+
116122
* `notification_pubsub_topic` -
117123
(Optional)
118124
Pub/Sub topic where notifications will be sent after transfer runs
@@ -180,6 +186,12 @@ The `schedule_options` block supports:
180186
moment. The time when a data transfer can be triggered manually is not
181187
limited by this option.
182188

189+
The `email_preferences` block supports:
190+
191+
* `enable_failure_email` -
192+
(Required)
193+
If true, email notifications will be sent on transfer run failures.
194+
183195
The `sensitive_params` block supports:
184196

185197
* `secret_access_key` -

0 commit comments

Comments
 (0)