From c09842f28f7448af8e56cb90523d35b28bc9e8ea Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Wed, 19 Oct 2022 00:50:33 +0000 Subject: [PATCH] Added max_time_travel_hours field in google_bigquery_dataset resource (#6709) Signed-off-by: Modular Magician --- .changelog/6709.txt | 3 + google/resource_bigquery_dataset.go | 28 ++++++++++ ...esource_bigquery_dataset_generated_test.go | 55 +++++++++++++++++++ website/docs/r/bigquery_dataset.html.markdown | 4 ++ 4 files changed, 90 insertions(+) create mode 100644 .changelog/6709.txt diff --git a/.changelog/6709.txt b/.changelog/6709.txt new file mode 100644 index 0000000000..a4262b907f --- /dev/null +++ b/.changelog/6709.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +bigquery: added `max_time_travel_hours` field in `google_bigquery_dataset` resource +``` diff --git a/google/resource_bigquery_dataset.go b/google/resource_bigquery_dataset.go index ac4a29d28d..c440bcf1d3 100644 --- a/google/resource_bigquery_dataset.go +++ b/google/resource_bigquery_dataset.go @@ -179,6 +179,11 @@ The default value is multi-regional location 'US'. Changing this forces a new resource to be created.`, Default: "US", }, + "max_time_travel_hours": { + Type: schema.TypeString, + Optional: true, + Description: `Defines the time travel window in hours. The value can be from 48 to 168 hours (2 to 7 days).`, + }, "creation_time": { Type: schema.TypeInt, Computed: true, @@ -344,6 +349,12 @@ func resourceBigQueryDatasetCreate(d *schema.ResourceData, meta interface{}) err } obj := make(map[string]interface{}) + maxTimeTravelHoursProp, err := expandBigQueryDatasetMaxTimeTravelHours(d.Get("max_time_travel_hours"), d, config) + if err != nil { + return err + } else if v, ok := d.GetOkExists("max_time_travel_hours"); !isEmptyValue(reflect.ValueOf(maxTimeTravelHoursProp)) && (ok || !reflect.DeepEqual(v, maxTimeTravelHoursProp)) { + obj["maxTimeTravelHours"] = maxTimeTravelHoursProp + } accessProp, err := expandBigQueryDatasetAccess(d.Get("access"), d, config) if err != nil { return err @@ -475,6 +486,9 @@ func resourceBigQueryDatasetRead(d *schema.ResourceData, meta interface{}) error return fmt.Errorf("Error reading Dataset: %s", err) } + if err := d.Set("max_time_travel_hours", flattenBigQueryDatasetMaxTimeTravelHours(res["maxTimeTravelHours"], d, config)); err != nil { + return fmt.Errorf("Error reading Dataset: %s", err) + } if err := d.Set("access", flattenBigQueryDatasetAccess(res["access"], d, config)); err != nil { return fmt.Errorf("Error reading Dataset: %s", err) } @@ -546,6 +560,12 @@ func resourceBigQueryDatasetUpdate(d *schema.ResourceData, meta interface{}) err billingProject = project obj := make(map[string]interface{}) + maxTimeTravelHoursProp, err := expandBigQueryDatasetMaxTimeTravelHours(d.Get("max_time_travel_hours"), d, config) + if err != nil { + return err + } else if v, ok := d.GetOkExists("max_time_travel_hours"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, maxTimeTravelHoursProp)) { + obj["maxTimeTravelHours"] = maxTimeTravelHoursProp + } accessProp, err := expandBigQueryDatasetAccess(d.Get("access"), d, config) if err != nil { return err @@ -686,6 +706,10 @@ func resourceBigQueryDatasetImport(d *schema.ResourceData, meta interface{}) ([] return []*schema.ResourceData{d}, nil } +func flattenBigQueryDatasetMaxTimeTravelHours(v interface{}, d *schema.ResourceData, config *Config) interface{} { + return v +} + func flattenBigQueryDatasetAccess(v interface{}, d *schema.ResourceData, config *Config) interface{} { if v == nil { return v @@ -929,6 +953,10 @@ func flattenBigQueryDatasetDefaultEncryptionConfigurationKmsKeyName(v interface{ return v } +func expandBigQueryDatasetMaxTimeTravelHours(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) { + return v, nil +} + func expandBigQueryDatasetAccess(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) { v = v.(*schema.Set).List() l := v.([]interface{}) diff --git a/google/resource_bigquery_dataset_generated_test.go b/google/resource_bigquery_dataset_generated_test.go index 2912ed0c78..8759a3b606 100644 --- a/google/resource_bigquery_dataset_generated_test.go +++ b/google/resource_bigquery_dataset_generated_test.go @@ -77,6 +77,61 @@ resource "google_service_account" "bqowner" { `, context) } +func TestAccBigQueryDataset_bigqueryDatasetWithMaxTimeTravelHoursExample(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": randString(t, 10), + } + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckBigQueryDatasetDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccBigQueryDataset_bigqueryDatasetWithMaxTimeTravelHoursExample(context), + }, + { + ResourceName: "google_bigquery_dataset.dataset", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccBigQueryDataset_bigqueryDatasetWithMaxTimeTravelHoursExample(context map[string]interface{}) string { + return Nprintf(` +resource "google_bigquery_dataset" "dataset" { + dataset_id = "tf_test_example_dataset%{random_suffix}" + friendly_name = "test" + description = "This is a test description" + location = "EU" + default_table_expiration_ms = 3600000 + max_time_travel_hours = "72" + + labels = { + env = "default" + } + + access { + role = "OWNER" + user_by_email = google_service_account.bqowner.email + } + + access { + role = "READER" + domain = "hashicorp.com" + } +} + +resource "google_service_account" "bqowner" { + account_id = "bqowner%{random_suffix}" +} +`, context) +} + func TestAccBigQueryDataset_bigqueryDatasetAuthorizedDatasetExample(t *testing.T) { t.Parallel() diff --git a/website/docs/r/bigquery_dataset.html.markdown b/website/docs/r/bigquery_dataset.html.markdown index 45272d50c9..d66c83d01b 100644 --- a/website/docs/r/bigquery_dataset.html.markdown +++ b/website/docs/r/bigquery_dataset.html.markdown @@ -177,6 +177,10 @@ The following arguments are supported: - - - +* `max_time_travel_hours` - + (Optional) + Defines the time travel window in hours. The value can be from 48 to 168 hours (2 to 7 days). + * `access` - (Optional) An array of objects that define dataset access for one or more entities.