Skip to content

Commit 0817839

Browse files
spanner: added google_spanner_database data source (#12154) (#8568)
[upstream:b28354bda2f62228a99b0f2b3cdaeefad7d63980] Signed-off-by: Modular Magician <[email protected]>
1 parent ad57048 commit 0817839

File tree

5 files changed

+155
-0
lines changed

5 files changed

+155
-0
lines changed

Diff for: .changelog/12154.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-datasource
2+
`google_spanner_database`
3+
```

Diff for: google-beta/provider/provider_mmv1_resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ var handwrittenDatasources = map[string]*schema.Resource{
329329
"google_service_accounts": resourcemanager.DataSourceGoogleServiceAccounts(),
330330
"google_site_verification_token": siteverification.DataSourceSiteVerificationToken(),
331331
"google_sourcerepo_repository": sourcerepo.DataSourceGoogleSourceRepoRepository(),
332+
"google_spanner_database": spanner.DataSourceSpannerDatabase(),
332333
"google_spanner_instance": spanner.DataSourceSpannerInstance(),
333334
"google_sql_ca_certs": sql.DataSourceGoogleSQLCaCerts(),
334335
"google_sql_tiers": sql.DataSourceGoogleSQLTiers(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package spanner
4+
5+
import (
6+
"fmt"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource"
10+
transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
11+
)
12+
13+
func DataSourceSpannerDatabase() *schema.Resource {
14+
15+
dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceSpannerDatabase().Schema)
16+
17+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
18+
tpgresource.AddRequiredFieldsToSchema(dsSchema, "instance")
19+
20+
tpgresource.AddOptionalFieldsToSchema(dsSchema, "project")
21+
22+
return &schema.Resource{
23+
Read: dataSourceSpannerDatabaseRead,
24+
Schema: dsSchema,
25+
}
26+
}
27+
28+
func dataSourceSpannerDatabaseRead(d *schema.ResourceData, meta interface{}) error {
29+
config := meta.(*transport_tpg.Config)
30+
31+
id, err := tpgresource.ReplaceVars(d, config, "{{instance}}/{{name}}")
32+
if err != nil {
33+
return fmt.Errorf("Error constructing id: %s", err)
34+
}
35+
36+
d.SetId(id)
37+
38+
err = resourceSpannerDatabaseRead(d, meta)
39+
if err != nil {
40+
return err
41+
}
42+
43+
if d.Id() == "" {
44+
return fmt.Errorf("%s not found", id)
45+
}
46+
47+
return nil
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
package spanner_test
4+
5+
import (
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/hashicorp/terraform-provider-google-beta/google-beta/acctest"
10+
)
11+
12+
func TestAccDataSourceSpannerDatabase_basic(t *testing.T) {
13+
t.Parallel()
14+
15+
context := map[string]interface{}{
16+
"random_suffix": acctest.RandString(t, 10),
17+
}
18+
19+
acctest.VcrTest(t, resource.TestCase{
20+
PreCheck: func() { acctest.AccTestPreCheck(t) },
21+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
22+
CheckDestroy: testAccCheckSpannerDatabaseDestroyProducer(t),
23+
Steps: []resource.TestStep{
24+
{
25+
Config: testAccDataSourceSpannerDatabaseBasic(context),
26+
Check: resource.ComposeTestCheckFunc(
27+
acctest.CheckDataSourceStateMatchesResourceStateWithIgnores(
28+
"data.google_spanner_database.bar",
29+
"google_spanner_database.foo",
30+
map[string]struct{}{
31+
"ddl.#": {},
32+
"ddl.0": {},
33+
"deletion_protection": {},
34+
},
35+
),
36+
),
37+
},
38+
},
39+
})
40+
}
41+
42+
func testAccDataSourceSpannerDatabaseBasic(context map[string]interface{}) string {
43+
return acctest.Nprintf(`
44+
resource "google_spanner_instance" "instance" {
45+
name = "tf-test-instance-%{random_suffix}"
46+
display_name = "Test spanner instance"
47+
48+
config = "regional-us-central1"
49+
processing_units = 200
50+
}
51+
52+
resource "google_spanner_database" "foo" {
53+
name = "tf-test-db-%{random_suffix}"
54+
instance = google_spanner_instance.instance.name
55+
ddl = [
56+
"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)",
57+
]
58+
59+
deletion_protection = false
60+
}
61+
62+
data "google_spanner_database" "bar" {
63+
name = google_spanner_database.foo.name
64+
instance = google_spanner_instance.instance.name
65+
}
66+
`, context)
67+
}

Diff for: website/docs/d/spanner_database.html.markdown

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
subcategory: "Cloud Spanner"
3+
description: |-
4+
Get a spanner database from Google Cloud
5+
---
6+
7+
# google_spanner_database
8+
9+
Get a spanner database from Google Cloud by its name and instance name.
10+
11+
## Example Usage
12+
13+
```tf
14+
data "google_spanner_database" "foo" {
15+
name = "foo"
16+
instance = google_spanner_instance.instance.name
17+
}
18+
```
19+
20+
## Argument Reference
21+
22+
The following arguments are supported:
23+
24+
* `name` - (Required) The name of the spanner database.
25+
26+
* `instance` - (Required) The name of the database's spanner instance.
27+
28+
- - -
29+
30+
* `project` - (Optional) The project in which the resource belongs. If it
31+
is not provided, the provider project is used.
32+
33+
## Attributes Reference
34+
See [google_spanner_database](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/spanner_database) resource for details of all the available attributes.
35+
36+
**Note** `ddl` is a field where reads are ignored, and thus will show up with a null value.

0 commit comments

Comments
 (0)