-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Clean commit of adding bigquery resources
BigQuery is a managed database-like service. It supports SQL as a query language and nearly infinite scale. This PR adds support to manage tables and datasets. first cut, need to finish tests fully functional and the tests are looking good. this is a really thin wrapper around the create/delete portion of the API removed optional parameters, there is no update defined add docs for bigquery resources
- Loading branch information
Showing
9 changed files
with
385 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package google | ||
|
||
import ( | ||
"google.golang.org/api/bigquery/v2" | ||
"github.com/hashicorp/terraform/helper/schema" | ||
) | ||
|
||
func resourceBigQueryDataset() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceBigQueryDatasetCreate, | ||
Read: resourceBigQueryDatasetRead, | ||
Delete: resourceBigQueryDatasetDelete, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"name": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceBigQueryDatasetCreate(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
datasetName := d.Get("name").(string) | ||
dRef := &bigquery.DatasetReference{DatasetId: datasetName, ProjectId: config.Project} | ||
dataset := &bigquery.Dataset{DatasetReference: dRef} | ||
if d.Get("FriendlyName") != nil { | ||
dataset.FriendlyName = d.Get("FriendlyName").(string) | ||
} | ||
|
||
call := config.clientBigQuery.Datasets.Insert(config.Project, dataset) | ||
_, err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
err = resourceBigQueryDatasetRead(d, meta) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func resourceBigQueryDatasetRead(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
call := config.clientBigQuery.Datasets.Get(config.Project, d.Get("name").(string)) | ||
res, err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId(res.Id) | ||
return nil | ||
} | ||
|
||
|
||
func resourceBigQueryDatasetDelete(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
call := config.clientBigQuery.Datasets.Delete(config.Project, d.Get("name").(string)) | ||
err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId("") | ||
return nil | ||
} |
68 changes: 68 additions & 0 deletions
68
builtin/providers/google/resource_bigquery_dataset_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package google | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
"github.com/hashicorp/terraform/terraform" | ||
) | ||
|
||
func TestAccBigqueryDatasetCreate(t *testing.T) { | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckBigQueryDatasetDestroy, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccBigQueryDataset, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccBigQueryDatasetExists( | ||
"google_bigquery_dataset.foobar"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckBigQueryDatasetDestroy(s *terraform.State) error { | ||
for _, rs := range s.RootModule().Resources { | ||
if rs.Type != "google_bigquery_dataset" { | ||
continue | ||
} | ||
|
||
config := testAccProvider.Meta().(*Config) | ||
_, err := config.clientBigQuery.Datasets.Get(config.Project, rs.Primary.Attributes["name"]).Do() | ||
if err != nil { | ||
fmt.Errorf("Dataset still present") | ||
} | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func testAccBigQueryDatasetExists(n string) resource.TestCheckFunc { | ||
return func(s *terraform.State) error { | ||
rs, ok := s.RootModule().Resources[n] | ||
if !ok { | ||
return fmt.Errorf("Not found: %s", n) | ||
} | ||
|
||
if rs.Primary.ID == "" { | ||
return fmt.Errorf("No ID is set") | ||
} | ||
config := testAccProvider.Meta().(*Config) | ||
_, err := config.clientBigQuery.Datasets.Get(config.Project, rs.Primary.Attributes["name"]).Do() | ||
if err != nil { | ||
fmt.Errorf("BigQuery Dataset not present") | ||
} | ||
|
||
return nil | ||
} | ||
} | ||
|
||
const testAccBigQueryDataset = ` | ||
resource "google_bigquery_dataset" "foobar" { | ||
name = "foobar" | ||
}` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
package google | ||
|
||
import ( | ||
"google.golang.org/api/bigquery/v2" | ||
"github.com/hashicorp/terraform/helper/schema" | ||
) | ||
|
||
func resourceBigQueryTable() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceBigQueryTableCreate, | ||
Read: resourceBigQueryTableRead, | ||
Delete: resourceBigQueryTableDelete, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"name": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
|
||
"datasetId": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceBigQueryTableCreate(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
datasetId := d.Get("datasetId").(string) | ||
tableName := d.Get("name").(string) | ||
tRef := &bigquery.TableReference{DatasetId: datasetId, ProjectId: config.Project, TableId: tableName} | ||
table := &bigquery.Table{TableReference: tRef} | ||
|
||
call := config.clientBigQuery.Tables.Insert(config.Project, datasetId, table) | ||
_, err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
err = resourceBigQueryTableRead(d, meta) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func resourceBigQueryTableRead(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
call := config.clientBigQuery.Tables.Get(config.Project, d.Get("datasetId").(string), d.Get("name").(string)) | ||
res, err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId(res.Id) | ||
return nil | ||
} | ||
|
||
|
||
func resourceBigQueryTableDelete(d *schema.ResourceData, meta interface{}) error { | ||
config := meta.(*Config) | ||
|
||
call := config.clientBigQuery.Tables.Delete(config.Project, d.Get("datasetId").(string), d.Get("name").(string)) | ||
err := call.Do() | ||
if err != nil { | ||
return err | ||
} | ||
|
||
d.SetId("") | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package google | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
"github.com/hashicorp/terraform/terraform" | ||
) | ||
|
||
func TestAccBigqueryTableCreate(t *testing.T) { | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { testAccPreCheck(t) }, | ||
Providers: testAccProviders, | ||
CheckDestroy: testAccCheckBigQueryTableDestroy, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccBigQueryTable, | ||
Check: resource.ComposeTestCheckFunc( | ||
testAccBigQueryTableExists( | ||
"google_bigquery_table.foobar"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccCheckBigQueryTableDestroy(s *terraform.State) error { | ||
for _, rs := range s.RootModule().Resources { | ||
if rs.Type != "google_bigquery_table" { | ||
continue | ||
} | ||
|
||
config := testAccProvider.Meta().(*Config) | ||
_, err := config.clientBigQuery.Tables.Get(config.Project, rs.Primary.Attributes["datasetId"], rs.Primary.Attributes["name"]).Do() | ||
if err != nil { | ||
fmt.Errorf("Table still present") | ||
} | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func testAccBigQueryTableExists(n string) resource.TestCheckFunc { | ||
return func(s *terraform.State) error { | ||
rs, ok := s.RootModule().Resources[n] | ||
if !ok { | ||
return fmt.Errorf("Not found: %s", n) | ||
} | ||
|
||
if rs.Primary.ID == "" { | ||
return fmt.Errorf("No ID is set") | ||
} | ||
config := testAccProvider.Meta().(*Config) | ||
_, err := config.clientBigQuery.Tables.Get(config.Project, rs.Primary.Attributes["datasetId"], rs.Primary.Attributes["name"]).Do() | ||
if err != nil { | ||
fmt.Errorf("BigQuery Table not present") | ||
} | ||
|
||
return nil | ||
} | ||
} | ||
|
||
const testAccBigQueryTable = ` | ||
resource "google_bigquery_dataset" "foobar" { | ||
name = "foobar" | ||
} | ||
resource "google_bigquery_table" "foobar" { | ||
name = "foobar" | ||
datasetId = "${google_bigquery_dataset.foobar.name}" | ||
}` | ||
|
32 changes: 32 additions & 0 deletions
32
website/source/docs/providers/google/r/bigquery_dataset.html.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
--- | ||
layout: "google" | ||
page_title: "Google: google_bigquery_dataset" | ||
sidebar_current: "docs-google-bigquery-dataset" | ||
description: |- | ||
Manages a bigquery dataset | ||
--- | ||
|
||
# google\_bigquery\_dataset | ||
|
||
Manages a bigquery dataset | ||
|
||
## Example Usage | ||
|
||
``` | ||
resource "google_bigquery_dataset" "default" { | ||
name = "test" | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
|
||
* `name` - (Required) A unique name for the resource, required by GCE. | ||
Changing this forces a new resource to be created. | ||
|
||
## Attributes Reference | ||
|
||
The following attributes are exported: | ||
|
||
* `name` - The name of the resource. |
Oops, something went wrong.