Add ability to import google_sql_database (#12)

* Add ability to import `google_sql_database`

* Update from code review

* Ensure split id length and report error otherwise
This commit is contained in:
Mike Fowler 2017-06-22 17:13:05 +01:00 committed by Riley Karson
parent 2f8a0c2740
commit 719c556f0c
4 changed files with 60 additions and 6 deletions

View File

@ -0,0 +1,31 @@
package google
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
)
func TestAccGoogleSqlDatabase_importBasic(t *testing.T) {
resourceName := "google_sql_database.database"
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: fmt.Sprintf(
testGoogleSqlDatabase_basic, acctest.RandString(10), acctest.RandString(10)),
},
resource.TestStep{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
},
})
}

View File

@ -2,6 +2,7 @@ package google
import (
"fmt"
"strings"
"github.com/hashicorp/terraform/helper/schema"
@ -13,6 +14,9 @@ func resourceSqlDatabase() *schema.Resource {
Create: resourceSqlDatabaseCreate,
Read: resourceSqlDatabaseRead,
Delete: resourceSqlDatabaseDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"name": &schema.Schema{
@ -51,6 +55,7 @@ func resourceSqlDatabaseCreate(d *schema.ResourceData, meta interface{}) error {
database_name := d.Get("name").(string)
instance_name := d.Get("instance").(string)
d.SetId(instance_name + ":" + database_name)
db := &sqladmin.Database{
Name: database_name,
@ -86,8 +91,15 @@ func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error {
return err
}
database_name := d.Get("name").(string)
instance_name := d.Get("instance").(string)
s := strings.Split(d.Id(), ":")
if len(s) != 2 {
return fmt.Errorf("Error, failure importing database %s. "+
"ID format is instance:name", d.Id())
}
instance_name := s[0]
database_name := s[1]
db, err := config.clientSqlAdmin.Databases.Get(project, instance_name,
database_name).Do()
@ -96,6 +108,8 @@ func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error {
return handleNotFoundError(err, d, fmt.Sprintf("SQL Database %q in instance %q", database_name, instance_name))
}
d.Set("instance", db.Instance)
d.Set("name", db.Name)
d.Set("self_link", db.SelfLink)
d.SetId(instance_name + ":" + database_name)

View File

@ -20,7 +20,8 @@ func TestAccGoogleSqlDatabase_basic(t *testing.T) {
CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testGoogleSqlDatabase_basic,
Config: fmt.Sprintf(
testGoogleSqlDatabase_basic, acctest.RandString(10), acctest.RandString(10)),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleSqlDatabaseExists(
"google_sql_database.database", &database),
@ -99,7 +100,7 @@ func testAccGoogleSqlDatabaseDestroy(s *terraform.State) error {
return nil
}
var testGoogleSqlDatabase_basic = fmt.Sprintf(`
var testGoogleSqlDatabase_basic = `
resource "google_sql_database_instance" "instance" {
name = "sqldatabasetest%s"
region = "us-central"
@ -112,4 +113,4 @@ resource "google_sql_database" "database" {
name = "sqldatabasetest%s"
instance = "${google_sql_database_instance.instance.name}"
}
`, acctest.RandString(10), acctest.RandString(10))
`

View File

@ -24,7 +24,7 @@ resource "google_sql_database_instance" "master" {
}
resource "google_sql_database" "users" {
name = "users"
name = "users-db"
instance = "${google_sql_database_instance.master.name}"
}
```
@ -48,3 +48,11 @@ In addition to the arguments listed above, the following computed attributes are
exported:
* `self_link` - The URI of the created resource.
## Import
SQL databases can be imported using the `instance` and `name`, e.g.
```
$ terraform import google_sql_database.database master-instance:users-db
```