Skip to content

Commit fc84d7e

Browse files
Promote external_dataset_reference in bigquery_dataset to GA (#10516) (#17944)
[upstream:6ea6f333801d112cb53ba29b8341aff403b25c2c] Signed-off-by: Modular Magician <[email protected]>
1 parent b496ec6 commit fc84d7e

File tree

3 files changed

+139
-3
lines changed

3 files changed

+139
-3
lines changed

google/services/bigquery/resource_bigquery_dataset.go

+96
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,30 @@ expiration time indicated by this property.`,
177177
Optional: true,
178178
Description: `A user-friendly description of the dataset`,
179179
},
180+
"external_dataset_reference": {
181+
Type: schema.TypeList,
182+
Optional: true,
183+
ForceNew: true,
184+
Description: `Information about the external metadata storage where the dataset is defined.`,
185+
MaxItems: 1,
186+
Elem: &schema.Resource{
187+
Schema: map[string]*schema.Schema{
188+
"connection": {
189+
Type: schema.TypeString,
190+
Required: true,
191+
ForceNew: true,
192+
Description: `The connection id that is used to access the externalSource.
193+
Format: projects/{projectId}/locations/{locationId}/connections/{connectionId}`,
194+
},
195+
"external_source": {
196+
Type: schema.TypeString,
197+
Required: true,
198+
ForceNew: true,
199+
Description: `External source that backs this dataset.`,
200+
},
201+
},
202+
},
203+
},
180204
"friendly_name": {
181205
Type: schema.TypeString,
182206
Optional: true,
@@ -490,6 +514,12 @@ func resourceBigQueryDatasetCreate(d *schema.ResourceData, meta interface{}) err
490514
} else if v, ok := d.GetOkExists("description"); !tpgresource.IsEmptyValue(reflect.ValueOf(descriptionProp)) && (ok || !reflect.DeepEqual(v, descriptionProp)) {
491515
obj["description"] = descriptionProp
492516
}
517+
externalDatasetReferenceProp, err := expandBigQueryDatasetExternalDatasetReference(d.Get("external_dataset_reference"), d, config)
518+
if err != nil {
519+
return err
520+
} else if v, ok := d.GetOkExists("external_dataset_reference"); !tpgresource.IsEmptyValue(reflect.ValueOf(externalDatasetReferenceProp)) && (ok || !reflect.DeepEqual(v, externalDatasetReferenceProp)) {
521+
obj["externalDatasetReference"] = externalDatasetReferenceProp
522+
}
493523
friendlyNameProp, err := expandBigQueryDatasetFriendlyName(d.Get("friendly_name"), d, config)
494524
if err != nil {
495525
return err
@@ -663,6 +693,9 @@ func resourceBigQueryDatasetRead(d *schema.ResourceData, meta interface{}) error
663693
if err := d.Set("etag", flattenBigQueryDatasetEtag(res["etag"], d, config)); err != nil {
664694
return fmt.Errorf("Error reading Dataset: %s", err)
665695
}
696+
if err := d.Set("external_dataset_reference", flattenBigQueryDatasetExternalDatasetReference(res["externalDatasetReference"], d, config)); err != nil {
697+
return fmt.Errorf("Error reading Dataset: %s", err)
698+
}
666699
if err := d.Set("friendly_name", flattenBigQueryDatasetFriendlyName(res["friendlyName"], d, config)); err != nil {
667700
return fmt.Errorf("Error reading Dataset: %s", err)
668701
}
@@ -752,6 +785,12 @@ func resourceBigQueryDatasetUpdate(d *schema.ResourceData, meta interface{}) err
752785
} else if v, ok := d.GetOkExists("description"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, descriptionProp)) {
753786
obj["description"] = descriptionProp
754787
}
788+
externalDatasetReferenceProp, err := expandBigQueryDatasetExternalDatasetReference(d.Get("external_dataset_reference"), d, config)
789+
if err != nil {
790+
return err
791+
} else if v, ok := d.GetOkExists("external_dataset_reference"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, externalDatasetReferenceProp)) {
792+
obj["externalDatasetReference"] = externalDatasetReferenceProp
793+
}
755794
friendlyNameProp, err := expandBigQueryDatasetFriendlyName(d.Get("friendly_name"), d, config)
756795
if err != nil {
757796
return err
@@ -1131,6 +1170,29 @@ func flattenBigQueryDatasetEtag(v interface{}, d *schema.ResourceData, config *t
11311170
return v
11321171
}
11331172

1173+
func flattenBigQueryDatasetExternalDatasetReference(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1174+
if v == nil {
1175+
return nil
1176+
}
1177+
original := v.(map[string]interface{})
1178+
if len(original) == 0 {
1179+
return nil
1180+
}
1181+
transformed := make(map[string]interface{})
1182+
transformed["external_source"] =
1183+
flattenBigQueryDatasetExternalDatasetReferenceExternalSource(original["externalSource"], d, config)
1184+
transformed["connection"] =
1185+
flattenBigQueryDatasetExternalDatasetReferenceConnection(original["connection"], d, config)
1186+
return []interface{}{transformed}
1187+
}
1188+
func flattenBigQueryDatasetExternalDatasetReferenceExternalSource(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1189+
return v
1190+
}
1191+
1192+
func flattenBigQueryDatasetExternalDatasetReferenceConnection(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1193+
return v
1194+
}
1195+
11341196
func flattenBigQueryDatasetFriendlyName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11351197
return v
11361198
}
@@ -1514,6 +1576,40 @@ func expandBigQueryDatasetDescription(v interface{}, d tpgresource.TerraformReso
15141576
return v, nil
15151577
}
15161578

1579+
func expandBigQueryDatasetExternalDatasetReference(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1580+
l := v.([]interface{})
1581+
if len(l) == 0 || l[0] == nil {
1582+
return nil, nil
1583+
}
1584+
raw := l[0]
1585+
original := raw.(map[string]interface{})
1586+
transformed := make(map[string]interface{})
1587+
1588+
transformedExternalSource, err := expandBigQueryDatasetExternalDatasetReferenceExternalSource(original["external_source"], d, config)
1589+
if err != nil {
1590+
return nil, err
1591+
} else if val := reflect.ValueOf(transformedExternalSource); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1592+
transformed["externalSource"] = transformedExternalSource
1593+
}
1594+
1595+
transformedConnection, err := expandBigQueryDatasetExternalDatasetReferenceConnection(original["connection"], d, config)
1596+
if err != nil {
1597+
return nil, err
1598+
} else if val := reflect.ValueOf(transformedConnection); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1599+
transformed["connection"] = transformedConnection
1600+
}
1601+
1602+
return transformed, nil
1603+
}
1604+
1605+
func expandBigQueryDatasetExternalDatasetReferenceExternalSource(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1606+
return v, nil
1607+
}
1608+
1609+
func expandBigQueryDatasetExternalDatasetReferenceConnection(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1610+
return v, nil
1611+
}
1612+
15171613
func expandBigQueryDatasetFriendlyName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
15181614
return v, nil
15191615
}

google/services/bigquery/resource_bigquery_dataset_generated_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,47 @@ resource "google_service_account" "bqowner" {
410410
`, context)
411411
}
412412

413+
func TestAccBigQueryDataset_bigqueryDatasetExternalReferenceAwsTestExample(t *testing.T) {
414+
t.Parallel()
415+
416+
context := map[string]interface{}{
417+
"random_suffix": acctest.RandString(t, 10),
418+
}
419+
420+
acctest.VcrTest(t, resource.TestCase{
421+
PreCheck: func() { acctest.AccTestPreCheck(t) },
422+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
423+
CheckDestroy: testAccCheckBigQueryDatasetDestroyProducer(t),
424+
Steps: []resource.TestStep{
425+
{
426+
Config: testAccBigQueryDataset_bigqueryDatasetExternalReferenceAwsTestExample(context),
427+
},
428+
{
429+
ResourceName: "google_bigquery_dataset.dataset",
430+
ImportState: true,
431+
ImportStateVerify: true,
432+
ImportStateVerifyIgnore: []string{"labels", "terraform_labels"},
433+
},
434+
},
435+
})
436+
}
437+
438+
func testAccBigQueryDataset_bigqueryDatasetExternalReferenceAwsTestExample(context map[string]interface{}) string {
439+
return acctest.Nprintf(`
440+
resource "google_bigquery_dataset" "dataset" {
441+
dataset_id = "tf_test_example_dataset%{random_suffix}"
442+
friendly_name = "test"
443+
description = "This is a test description"
444+
location = "aws-us-east-1"
445+
446+
external_dataset_reference {
447+
external_source = "aws-glue://arn:aws:glue:us-east-1:772042918353:database/db_other_formats_external"
448+
connection = "projects/bigquerytestdefault/locations/aws-us-east-1/connections/external_test-connection"
449+
}
450+
}
451+
`, context)
452+
}
453+
413454
func testAccCheckBigQueryDatasetDestroyProducer(t *testing.T) func(s *terraform.State) error {
414455
return func(s *terraform.State) error {
415456
for name, rs := range s.RootModule().Resources {

website/docs/r/bigquery_dataset.html.markdown

+2-3
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,11 @@ resource "google_bigquery_dataset" "private" {
203203
}
204204
}
205205
```
206-
## Example Usage - Bigquery Dataset External Reference Aws Docs
206+
## Example Usage - Bigquery Dataset External Reference Aws
207207

208208

209209
```hcl
210210
resource "google_bigquery_dataset" "dataset" {
211-
provider = google-beta
212211
dataset_id = "example_dataset"
213212
friendly_name = "test"
214213
description = "This is a test description"
@@ -282,7 +281,7 @@ The following arguments are supported:
282281
A user-friendly description of the dataset
283282

284283
* `external_dataset_reference` -
285-
(Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html))
284+
(Optional)
286285
Information about the external metadata storage where the dataset is defined.
287286
Structure is [documented below](#nested_external_dataset_reference).
288287

0 commit comments

Comments
 (0)