mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-01 16:21:06 +00:00
Fixes for importing sql database instances (#1956)
* fix importing for sql resources * fmt * fix id for sql db import, tests * change test names to be more specific
This commit is contained in:
parent
2afafa0573
commit
27ade47e5a
@ -1,61 +0,0 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/acctest"
|
||||
"github.com/hashicorp/terraform/helper/resource"
|
||||
)
|
||||
|
||||
// Test importing a first generation database
|
||||
func TestAccSqlDatabaseInstance_importBasic(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
resourceName := "google_sql_database_instance.instance"
|
||||
databaseID := acctest.RandInt()
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccSqlDatabaseInstanceDestroy,
|
||||
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 TestAccSqlDatabaseInstance_importBasic3(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
resourceName := "google_sql_database_instance.instance"
|
||||
databaseID := acctest.RandInt()
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccSqlDatabaseInstanceDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: fmt.Sprintf(
|
||||
testGoogleSqlDatabaseInstance_basic3, databaseID),
|
||||
},
|
||||
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package google
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/terraform/helper/acctest"
|
||||
"github.com/hashicorp/terraform/helper/resource"
|
||||
)
|
||||
|
||||
func TestAccSqlDatabase_importBasic(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
resourceName := "google_sql_database.database"
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccSqlDatabaseInstanceDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: fmt.Sprintf(
|
||||
testGoogleSqlDatabase_basic, acctest.RandString(10), acctest.RandString(10)),
|
||||
},
|
||||
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
@ -17,7 +17,7 @@ func resourceSqlDatabase() *schema.Resource {
|
||||
Update: resourceSqlDatabaseUpdate,
|
||||
Delete: resourceSqlDatabaseDelete,
|
||||
Importer: &schema.ResourceImporter{
|
||||
State: schema.ImportStatePassthrough,
|
||||
State: resourceSqlDatabaseImport,
|
||||
},
|
||||
|
||||
Schema: map[string]*schema.Schema{
|
||||
@ -211,3 +211,23 @@ func resourceSqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceSqlDatabaseImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
|
||||
config := meta.(*Config)
|
||||
parseImportId([]string{
|
||||
"projects/(?P<project>[^/]+)/instances/(?P<instance>[^/]+)/databases/(?P<name>[^/]+)",
|
||||
"instances/(?P<instance>[^/]+)/databases/(?P<name>[^/]+)",
|
||||
"(?P<project>[^/]+)/(?P<instance>[^/]+)/(?P<name>[^/]+)",
|
||||
"(?P<instance>[^/]+)/(?P<name>[^/]+)",
|
||||
"(?P<instance>[^/]+):(?P<name>[^/]+)",
|
||||
}, d, config)
|
||||
|
||||
// Replace import id for the resource id
|
||||
id, err := replaceVars(d, config, "{{instance}}:{{name}}")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error constructing id: %s", err)
|
||||
}
|
||||
d.SetId(id)
|
||||
|
||||
return []*schema.ResourceData{d}, nil
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func resourceSqlDatabaseInstance() *schema.Resource {
|
||||
Update: resourceSqlDatabaseInstanceUpdate,
|
||||
Delete: resourceSqlDatabaseInstanceDelete,
|
||||
Importer: &schema.ResourceImporter{
|
||||
State: schema.ImportStatePassthrough,
|
||||
State: resourceSqlDatabaseInstanceImport,
|
||||
},
|
||||
|
||||
Timeouts: &schema.ResourceTimeout{
|
||||
@ -1105,6 +1105,23 @@ func resourceSqlDatabaseInstanceDelete(d *schema.ResourceData, meta interface{})
|
||||
return nil
|
||||
}
|
||||
|
||||
func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
|
||||
config := meta.(*Config)
|
||||
parseImportId([]string{
|
||||
"projects/(?P<project>[^/]+)/instances/(?P<name>[^/]+)",
|
||||
"(?P<project>[^/]+)/(?P<name>[^/]+)",
|
||||
"(?P<name>[^/]+)"}, d, config)
|
||||
|
||||
// Replace import id for the resource id
|
||||
id, err := replaceVars(d, config, "{{name}}")
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Error constructing id: %s", err)
|
||||
}
|
||||
d.SetId(id)
|
||||
|
||||
return []*schema.ResourceData{d}, nil
|
||||
}
|
||||
|
||||
func flattenSettings(settings *sqladmin.Settings) []map[string]interface{} {
|
||||
data := map[string]interface{}{
|
||||
"version": settings.SettingsVersion,
|
||||
|
@ -154,11 +154,13 @@ func testSweepDatabases(region string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestAccSqlDatabaseInstance_basic(t *testing.T) {
|
||||
func TestAccSqlDatabaseInstance_basicFirstGen(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var instance sqladmin.DatabaseInstance
|
||||
databaseID := acctest.RandInt()
|
||||
instanceID := acctest.RandInt()
|
||||
instanceName := fmt.Sprintf("tf-lw-%d", instanceID)
|
||||
resourceName := "google_sql_database_instance.instance"
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
@ -167,19 +169,34 @@ func TestAccSqlDatabaseInstance_basic(t *testing.T) {
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: fmt.Sprintf(
|
||||
testGoogleSqlDatabaseInstance_basic, databaseID),
|
||||
testGoogleSqlDatabaseInstance_basic, instanceID),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckGoogleSqlDatabaseInstanceExists(
|
||||
"google_sql_database_instance.instance", &instance),
|
||||
testAccCheckGoogleSqlDatabaseInstanceEquals(
|
||||
"google_sql_database_instance.instance", &instance),
|
||||
testAccCheckGoogleSqlDatabaseInstanceExists(resourceName, &instance),
|
||||
testAccCheckGoogleSqlDatabaseInstanceEquals(resourceName, &instance),
|
||||
),
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("projects/%s/instances/%s", getTestProjectFromEnv(), instanceName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("%s/%s", getTestProjectFromEnv(), instanceName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccSqlDatabaseInstance_basic2(t *testing.T) {
|
||||
func TestAccSqlDatabaseInstance_basicInferredName(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var instance sqladmin.DatabaseInstance
|
||||
@ -202,7 +219,7 @@ func TestAccSqlDatabaseInstance_basic2(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccSqlDatabaseInstance_basic3(t *testing.T) {
|
||||
func TestAccSqlDatabaseInstance_basicSecondGen(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var instance sqladmin.DatabaseInstance
|
||||
|
@ -16,21 +16,52 @@ func TestAccSqlDatabase_basic(t *testing.T) {
|
||||
|
||||
var database sqladmin.Database
|
||||
|
||||
resourceName := "google_sql_database.database"
|
||||
instanceName := fmt.Sprintf("sqldatabasetest%s", acctest.RandString(10))
|
||||
dbName := fmt.Sprintf("sqldatabasetest%s", acctest.RandString(10))
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccSqlDatabaseDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: fmt.Sprintf(
|
||||
testGoogleSqlDatabase_basic, acctest.RandString(10), acctest.RandString(10)),
|
||||
Config: fmt.Sprintf(testGoogleSqlDatabase_basic, instanceName, dbName),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckGoogleSqlDatabaseExists(
|
||||
"google_sql_database.database", &database),
|
||||
testAccCheckGoogleSqlDatabaseEquals(
|
||||
"google_sql_database.database", &database),
|
||||
testAccCheckGoogleSqlDatabaseExists(resourceName, &database),
|
||||
testAccCheckGoogleSqlDatabaseEquals(resourceName, &database),
|
||||
),
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("%s/%s", instanceName, dbName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("instances/%s/databases/%s", instanceName, dbName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("%s/%s/%s", getTestProjectFromEnv(), instanceName, dbName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
resource.TestStep{
|
||||
ResourceName: resourceName,
|
||||
ImportStateId: fmt.Sprintf("projects/%s/instances/%s/databases/%s", getTestProjectFromEnv(), instanceName, dbName),
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -151,7 +182,7 @@ func testAccSqlDatabaseDestroy(s *terraform.State) error {
|
||||
|
||||
var testGoogleSqlDatabase_basic = `
|
||||
resource "google_sql_database_instance" "instance" {
|
||||
name = "sqldatabasetest%s"
|
||||
name = "%s"
|
||||
region = "us-central"
|
||||
settings {
|
||||
tier = "D0"
|
||||
@ -159,13 +190,13 @@ resource "google_sql_database_instance" "instance" {
|
||||
}
|
||||
|
||||
resource "google_sql_database" "database" {
|
||||
name = "sqldatabasetest%s"
|
||||
name = "%s"
|
||||
instance = "${google_sql_database_instance.instance.name}"
|
||||
}
|
||||
`
|
||||
var testGoogleSqlDatabase_latin1 = `
|
||||
resource "google_sql_database_instance" "instance" {
|
||||
name = "sqldatabasetest%s"
|
||||
name = "%s"
|
||||
region = "us-central"
|
||||
settings {
|
||||
tier = "D0"
|
||||
@ -173,7 +204,7 @@ resource "google_sql_database_instance" "instance" {
|
||||
}
|
||||
|
||||
resource "google_sql_database" "database" {
|
||||
name = "sqldatabasetest%s"
|
||||
name = "%s"
|
||||
instance = "${google_sql_database_instance.instance.name}"
|
||||
charset = "latin1"
|
||||
collation = "latin1_swedish_ci"
|
||||
|
@ -67,8 +67,13 @@ exported:
|
||||
|
||||
## Import
|
||||
|
||||
SQL databases can be imported using the `instance` and `name`, e.g.
|
||||
SQL databases can be imported using one of any of these accepted formats:
|
||||
|
||||
```
|
||||
$ terraform import google_sql_database.database master-instance:users-db
|
||||
$ terraform import google_sql_database.database projects/{{project}}/instances/{{instance}}/databases/{{name}}
|
||||
$ terraform import google_sql_database.database {{project}}/{{instance}}/{{name}}
|
||||
$ terraform import google_sql_database.database instances/{{name}}/databases/{{name}}
|
||||
$ terraform import google_sql_database.database {{instance}}/{{name}}
|
||||
$ terraform import google_sql_database.database {{name}}
|
||||
|
||||
```
|
||||
|
@ -313,8 +313,11 @@ when the resource is configured with a `count`.
|
||||
|
||||
## Import
|
||||
|
||||
Database instances can be imported using the `name`, e.g.
|
||||
Database instances can be imported using one of any of these accepted formats:
|
||||
|
||||
```
|
||||
$ terraform import google_sql_database_instance.master master-instance
|
||||
```
|
||||
$ terraform import google_sql_database_instance.master projects/{{project}}/instances/{{name}}
|
||||
$ terraform import google_sql_database_instance.master {{project}}/{{name}}
|
||||
$ terraform import google_sql_database_instance.master {{name}}
|
||||
|
||||
```
|
Loading…
Reference in New Issue
Block a user