diff --git a/google/import_sql_database_instance_test.go b/google/import_sql_database_instance_test.go new file mode 100644 index 00000000..4e548ae5 --- /dev/null +++ b/google/import_sql_database_instance_test.go @@ -0,0 +1,57 @@ +package google + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" +) + +// Test importing a first generation database +func TestAccGoogleSqlDatabaseInstance_importBasic(t *testing.T) { + resourceName := "google_sql_database_instance.instance" + databaseID := acctest.RandInt() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: fmt.Sprintf( + testGoogleSqlDatabaseInstance_basic, databaseID), + }, + + resource.TestStep{ + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +// Test importing a second generation database +func TestAccGoogleSqlDatabaseInstance_importBasic3(t *testing.T) { + resourceName := "google_sql_database_instance.instance" + databaseID := acctest.RandInt() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: fmt.Sprintf( + testGoogleSqlDatabaseInstance_basic3, databaseID), + }, + + resource.TestStep{ + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} diff --git a/google/resource_sql_database_instance.go b/google/resource_sql_database_instance.go index 109c25a8..42db6af6 100644 --- a/google/resource_sql_database_instance.go +++ b/google/resource_sql_database_instance.go @@ -19,6 +19,9 @@ func resourceSqlDatabaseInstance() *schema.Resource { Read: resourceSqlDatabaseInstanceRead, Update: resourceSqlDatabaseInstanceUpdate, Delete: resourceSqlDatabaseInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "region": &schema.Schema{ @@ -231,6 +234,7 @@ func resourceSqlDatabaseInstance() *schema.Resource { "master_instance_name": &schema.Schema{ Type: schema.TypeString, Optional: true, + Computed: true, ForceNew: true, }, @@ -521,6 +525,8 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{}) d.Set("name", instance.Name) } + d.SetId(instance.Name) + if v, ok := d.GetOk("replica_configuration"); ok { _replicaConfigurationList := v.([]interface{}) @@ -631,14 +637,25 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e } instance, err := config.clientSqlAdmin.Instances.Get(project, - d.Get("name").(string)).Do() + d.Id()).Do() if err != nil { return handleNotFoundError(err, d, fmt.Sprintf("SQL Database Instance %q", d.Get("name").(string))) } _settingsList := d.Get("settings").([]interface{}) - _settings := _settingsList[0].(map[string]interface{}) + var _settings map[string]interface{} + + // If we're importing the settings will be nil + if len(_settingsList) > 0 { + _settings = _settingsList[0].(map[string]interface{}) + } else { + _settings = make(map[string]interface{}) + } + + d.Set("name", instance.Name) + d.Set("region", instance.Region) + d.Set("database_version", instance.DatabaseVersion) settings := instance.Settings _settings["version"] = settings.SettingsVersion @@ -829,6 +846,7 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e _settings["replication_type"] = settings.ReplicationType } + _settingsList = make([]interface{}, 1) _settingsList[0] = _settings d.Set("settings", _settingsList) @@ -862,10 +880,7 @@ func resourceSqlDatabaseInstanceRead(d *schema.ResourceData, meta interface{}) e } d.Set("ip_address", _ipAddresses) - - if v, ok := d.GetOk("master_instance_name"); ok && v != nil { - d.Set("master_instance_name", strings.TrimPrefix(instance.MasterInstanceName, project+":")) - } + d.Set("master_instance_name", strings.TrimPrefix(instance.MasterInstanceName, project+":")) d.Set("self_link", instance.SelfLink) d.SetId(instance.Name) diff --git a/google/resource_sql_database_instance_test.go b/google/resource_sql_database_instance_test.go index 4ff5192d..a96b8f90 100644 --- a/google/resource_sql_database_instance_test.go +++ b/google/resource_sql_database_instance_test.go @@ -621,7 +621,7 @@ resource "google_sql_database_instance" "instance" { var testGoogleSqlDatabaseInstance_basic3 = ` resource "google_sql_database_instance" "instance" { name = "tf-lw-%d" - region = "us-central" + region = "us-central1" settings { tier = "db-f1-micro" } diff --git a/website/docs/r/sql_database_instance.html.markdown b/website/docs/r/sql_database_instance.html.markdown index 688c36bf..d2d96e2d 100644 --- a/website/docs/r/sql_database_instance.html.markdown +++ b/website/docs/r/sql_database_instance.html.markdown @@ -158,7 +158,7 @@ when an Instance can automatically restart to apply updates. It supports: * `hour` - (Optional) Hour of day (`0-23`), ignored if `day` not set -* `update_track` - (Optional) Receive updates earlier (`canary`) or later +* `update_track` - (Optional) Receive updates earlier (`canary`) or later (`stable`) The optional `replica_configuration` block must have `master_instance_name` set @@ -210,3 +210,11 @@ exported: * `settings.version` - Used to make sure changes to the `settings` block are atomic. + +## Import + +Database instances can be imported using the `name`, e.g. + +``` +$ terraform import google_sql_database_instance.master master-instance +```