From 719c556f0c55bebf95866e3790f8d4c56a5e5e02 Mon Sep 17 00:00:00 2001 From: Mike Fowler Date: Thu, 22 Jun 2017 17:13:05 +0100 Subject: [PATCH] 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 --- google/import_sql_database_test.go | 31 +++++++++++++++++++++++ google/resource_sql_database.go | 18 +++++++++++-- google/resource_sql_database_test.go | 7 ++--- website/docs/r/sql_database.html.markdown | 10 +++++++- 4 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 google/import_sql_database_test.go diff --git a/google/import_sql_database_test.go b/google/import_sql_database_test.go new file mode 100644 index 00000000..910c4d57 --- /dev/null +++ b/google/import_sql_database_test.go @@ -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, + }, + }, + }) +} diff --git a/google/resource_sql_database.go b/google/resource_sql_database.go index a6b034aa..84e2c35e 100644 --- a/google/resource_sql_database.go +++ b/google/resource_sql_database.go @@ -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) diff --git a/google/resource_sql_database_test.go b/google/resource_sql_database_test.go index 509fa1de..73638a88 100644 --- a/google/resource_sql_database_test.go +++ b/google/resource_sql_database_test.go @@ -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)) +` diff --git a/website/docs/r/sql_database.html.markdown b/website/docs/r/sql_database.html.markdown index 51b1af09..3cc83f7d 100644 --- a/website/docs/r/sql_database.html.markdown +++ b/website/docs/r/sql_database.html.markdown @@ -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 +```