provider/google: Clarify SQL database name cannot be reused
This commit is contained in:
parent
aef1353b4a
commit
6a7da01d6b
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
|
@ -20,7 +21,8 @@ func resourceSqlDatabaseInstance() *schema.Resource {
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"name": &schema.Schema{
|
"name": &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
},
|
},
|
||||||
"master_instance_name": &schema.Schema{
|
"master_instance_name": &schema.Schema{
|
||||||
|
@ -233,7 +235,6 @@ func resourceSqlDatabaseInstance() *schema.Resource {
|
||||||
func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{}) error {
|
func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
name := d.Get("name").(string)
|
|
||||||
region := d.Get("region").(string)
|
region := d.Get("region").(string)
|
||||||
databaseVersion := d.Get("database_version").(string)
|
databaseVersion := d.Get("database_version").(string)
|
||||||
|
|
||||||
|
@ -378,12 +379,18 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
|
||||||
}
|
}
|
||||||
|
|
||||||
instance := &sqladmin.DatabaseInstance{
|
instance := &sqladmin.DatabaseInstance{
|
||||||
Name: name,
|
|
||||||
Region: region,
|
Region: region,
|
||||||
Settings: settings,
|
Settings: settings,
|
||||||
DatabaseVersion: databaseVersion,
|
DatabaseVersion: databaseVersion,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if v, ok := d.GetOk("name"); ok {
|
||||||
|
instance.Name = v.(string)
|
||||||
|
} else {
|
||||||
|
instance.Name = resource.UniqueId()
|
||||||
|
d.Set("name", instance.Name)
|
||||||
|
}
|
||||||
|
|
||||||
if v, ok := d.GetOk("replica_configuration"); ok {
|
if v, ok := d.GetOk("replica_configuration"); ok {
|
||||||
_replicaConfigurationList := v.([]interface{})
|
_replicaConfigurationList := v.([]interface{})
|
||||||
if len(_replicaConfigurationList) > 1 {
|
if len(_replicaConfigurationList) > 1 {
|
||||||
|
@ -446,7 +453,11 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
|
||||||
|
|
||||||
op, err := config.clientSqlAdmin.Instances.Insert(config.Project, instance).Do()
|
op, err := config.clientSqlAdmin.Instances.Insert(config.Project, instance).Do()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error, failed to create instance %s: %s", name, err)
|
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 409 {
|
||||||
|
return fmt.Errorf("Error, the name %s is unavailable because it was used recently", instance.Name)
|
||||||
|
} else {
|
||||||
|
return fmt.Errorf("Error, failed to create instance %s: %s", instance.Name, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sqladminOperationWait(config, op, "Create Instance")
|
err = sqladminOperationWait(config, op, "Create Instance")
|
||||||
|
|
|
@ -41,6 +41,27 @@ func TestAccGoogleSqlDatabaseInstance_basic(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccGoogleSqlDatabaseInstance_basic2(t *testing.T) {
|
||||||
|
var instance sqladmin.DatabaseInstance
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testGoogleSqlDatabaseInstance_basic2,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckGoogleSqlDatabaseInstanceExists(
|
||||||
|
"google_sql_database_instance.instance", &instance),
|
||||||
|
testAccCheckGoogleSqlDatabaseInstanceEquals(
|
||||||
|
"google_sql_database_instance.instance", &instance),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestAccGoogleSqlDatabaseInstance_settings_basic(t *testing.T) {
|
func TestAccGoogleSqlDatabaseInstance_settings_basic(t *testing.T) {
|
||||||
var instance sqladmin.DatabaseInstance
|
var instance sqladmin.DatabaseInstance
|
||||||
databaseID := genRandInt()
|
databaseID := genRandInt()
|
||||||
|
@ -340,6 +361,16 @@ resource "google_sql_database_instance" "instance" {
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
|
var testGoogleSqlDatabaseInstance_basic2 = `
|
||||||
|
resource "google_sql_database_instance" "instance" {
|
||||||
|
region = "us-central"
|
||||||
|
settings {
|
||||||
|
tier = "D0"
|
||||||
|
crash_safe_replication = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
var testGoogleSqlDatabaseInstance_settings = `
|
var testGoogleSqlDatabaseInstance_settings = `
|
||||||
resource "google_sql_database_instance" "instance" {
|
resource "google_sql_database_instance" "instance" {
|
||||||
name = "tf-lw-%d"
|
name = "tf-lw-%d"
|
||||||
|
|
|
@ -28,7 +28,10 @@ resource "google_sql_database_instance" "master" {
|
||||||
|
|
||||||
The following arguments are supported:
|
The following arguments are supported:
|
||||||
|
|
||||||
* `name` - (Required) The name of the instance.
|
* `name` - (Optional, Computed) The name of the instance. If the name is left
|
||||||
|
blank, Terraform will randomly generate one when the instance is first
|
||||||
|
created. This is done because after a name is used, it cannot be reused
|
||||||
|
for up to [two months](https://cloud.google.com/sql/docs/delete-instance).
|
||||||
|
|
||||||
* `region` - (Required) The region the instance will sit in. Note, this does
|
* `region` - (Required) The region the instance will sit in. Note, this does
|
||||||
not line up with the Google Compute Engine (GCE) regions - your options are
|
not line up with the Google Compute Engine (GCE) regions - your options are
|
||||||
|
|
Loading…
Reference in New Issue