mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-01 16:21:06 +00:00
Add charset and collation to google_sql_database. (#183)
* Add charset and collation to google_sql_database. * Add documentation for charset, collation attributes. * Extend the existing acceptance test to also cover charset and collation. * Charset and collation always have a value present. Also inline. * Move charset and collation to optional arguments. * Add charset and collection to the example. * Document charset and collation defaults. * Keep TestAccGoogleSqlDatabase_basic as is, add TestAccGoogleSqlDatabase_update.
This commit is contained in:
parent
a08c7c4fac
commit
9e5aa27677
@ -13,6 +13,7 @@ func resourceSqlDatabase() *schema.Resource {
|
|||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
Create: resourceSqlDatabaseCreate,
|
Create: resourceSqlDatabaseCreate,
|
||||||
Read: resourceSqlDatabaseRead,
|
Read: resourceSqlDatabaseRead,
|
||||||
|
Update: resourceSqlDatabaseUpdate,
|
||||||
Delete: resourceSqlDatabaseDelete,
|
Delete: resourceSqlDatabaseDelete,
|
||||||
Importer: &schema.ResourceImporter{
|
Importer: &schema.ResourceImporter{
|
||||||
State: schema.ImportStatePassthrough,
|
State: schema.ImportStatePassthrough,
|
||||||
@ -41,6 +42,18 @@ func resourceSqlDatabase() *schema.Resource {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"charset": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Default: "utf8",
|
||||||
|
},
|
||||||
|
|
||||||
|
"collation": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Default: "utf8_general_ci",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,8 +71,10 @@ func resourceSqlDatabaseCreate(d *schema.ResourceData, meta interface{}) error {
|
|||||||
d.SetId(instance_name + ":" + database_name)
|
d.SetId(instance_name + ":" + database_name)
|
||||||
|
|
||||||
db := &sqladmin.Database{
|
db := &sqladmin.Database{
|
||||||
Name: database_name,
|
Name: database_name,
|
||||||
Instance: instance_name,
|
Instance: instance_name,
|
||||||
|
Charset: d.Get("charset").(string),
|
||||||
|
Collation: d.Get("collation").(string),
|
||||||
}
|
}
|
||||||
|
|
||||||
mutexKV.Lock(instanceMutexKey(project, instance_name))
|
mutexKV.Lock(instanceMutexKey(project, instance_name))
|
||||||
@ -112,10 +127,51 @@ func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error {
|
|||||||
d.Set("name", db.Name)
|
d.Set("name", db.Name)
|
||||||
d.Set("self_link", db.SelfLink)
|
d.Set("self_link", db.SelfLink)
|
||||||
d.SetId(instance_name + ":" + database_name)
|
d.SetId(instance_name + ":" + database_name)
|
||||||
|
d.Set("charset", db.Charset)
|
||||||
|
d.Set("collation", db.Collation)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceSqlDatabaseUpdate(d *schema.ResourceData, meta interface{}) error {
|
||||||
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
project, err := getProject(d, config)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
database_name := d.Get("name").(string)
|
||||||
|
instance_name := d.Get("instance").(string)
|
||||||
|
|
||||||
|
db := &sqladmin.Database{
|
||||||
|
Name: database_name,
|
||||||
|
Instance: instance_name,
|
||||||
|
Charset: d.Get("charset").(string),
|
||||||
|
Collation: d.Get("collation").(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
mutexKV.Lock(instanceMutexKey(project, instance_name))
|
||||||
|
defer mutexKV.Unlock(instanceMutexKey(project, instance_name))
|
||||||
|
op, err := config.clientSqlAdmin.Databases.Update(project, instance_name, database_name,
|
||||||
|
db).Do()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error, failed to update "+
|
||||||
|
"database %s in instance %s: %s", database_name,
|
||||||
|
instance_name, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = sqladminOperationWait(config, op, "Update Database")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error, failure waiting for update of %s "+
|
||||||
|
"into %s: %s", database_name, instance_name, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resourceSqlDatabaseRead(d, meta)
|
||||||
|
}
|
||||||
|
|
||||||
func resourceSqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error {
|
func resourceSqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
@ -33,6 +33,41 @@ func TestAccGoogleSqlDatabase_basic(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccGoogleSqlDatabase_update(t *testing.T) {
|
||||||
|
var database sqladmin.Database
|
||||||
|
|
||||||
|
instance_name := acctest.RandString(10)
|
||||||
|
database_name := acctest.RandString(10)
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccGoogleSqlDatabaseInstanceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: fmt.Sprintf(
|
||||||
|
testGoogleSqlDatabase_basic, instance_name, database_name),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckGoogleSqlDatabaseExists(
|
||||||
|
"google_sql_database.database", &database),
|
||||||
|
testAccCheckGoogleSqlDatabaseEquals(
|
||||||
|
"google_sql_database.database", &database),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
resource.TestStep{
|
||||||
|
Config: fmt.Sprintf(
|
||||||
|
testGoogleSqlDatabase_latin1, instance_name, database_name),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckGoogleSqlDatabaseExists(
|
||||||
|
"google_sql_database.database", &database),
|
||||||
|
testAccCheckGoogleSqlDatabaseEquals(
|
||||||
|
"google_sql_database.database", &database),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckGoogleSqlDatabaseEquals(n string,
|
func testAccCheckGoogleSqlDatabaseEquals(n string,
|
||||||
database *sqladmin.Database) resource.TestCheckFunc {
|
database *sqladmin.Database) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
@ -43,6 +78,8 @@ func testAccCheckGoogleSqlDatabaseEquals(n string,
|
|||||||
|
|
||||||
database_name := rs.Primary.Attributes["name"]
|
database_name := rs.Primary.Attributes["name"]
|
||||||
instance_name := rs.Primary.Attributes["instance"]
|
instance_name := rs.Primary.Attributes["instance"]
|
||||||
|
charset := rs.Primary.Attributes["charset"]
|
||||||
|
collation := rs.Primary.Attributes["collation"]
|
||||||
|
|
||||||
if database_name != database.Name {
|
if database_name != database.Name {
|
||||||
return fmt.Errorf("Error name mismatch, (%s, %s)", database_name, database.Name)
|
return fmt.Errorf("Error name mismatch, (%s, %s)", database_name, database.Name)
|
||||||
@ -52,6 +89,14 @@ func testAccCheckGoogleSqlDatabaseEquals(n string,
|
|||||||
return fmt.Errorf("Error instance_name mismatch, (%s, %s)", instance_name, database.Instance)
|
return fmt.Errorf("Error instance_name mismatch, (%s, %s)", instance_name, database.Instance)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if charset != database.Charset {
|
||||||
|
return fmt.Errorf("Error charset mismatch, (%s, %s)", charset, database.Charset)
|
||||||
|
}
|
||||||
|
|
||||||
|
if collation != database.Collation {
|
||||||
|
return fmt.Errorf("Error collation mismatch, (%s, %s)", collation, database.Collation)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,3 +159,19 @@ resource "google_sql_database" "database" {
|
|||||||
instance = "${google_sql_database_instance.instance.name}"
|
instance = "${google_sql_database_instance.instance.name}"
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
var testGoogleSqlDatabase_latin1 = `
|
||||||
|
resource "google_sql_database_instance" "instance" {
|
||||||
|
name = "sqldatabasetest%s"
|
||||||
|
region = "us-central"
|
||||||
|
settings {
|
||||||
|
tier = "D0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "google_sql_database" "database" {
|
||||||
|
name = "sqldatabasetest%s"
|
||||||
|
instance = "${google_sql_database_instance.instance.name}"
|
||||||
|
charset = "latin1"
|
||||||
|
collation = "latin1_swedish_ci"
|
||||||
|
}
|
||||||
|
`
|
||||||
|
@ -24,8 +24,10 @@ resource "google_sql_database_instance" "master" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resource "google_sql_database" "users" {
|
resource "google_sql_database" "users" {
|
||||||
name = "users-db"
|
name = "users-db"
|
||||||
instance = "${google_sql_database_instance.master.name}"
|
instance = "${google_sql_database_instance.master.name}"
|
||||||
|
charset = "latin1"
|
||||||
|
collation = "latin1_swedish_ci"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -42,6 +44,11 @@ The following arguments are supported:
|
|||||||
* `project` - (Optional) The project in which the resource belongs. If it
|
* `project` - (Optional) The project in which the resource belongs. If it
|
||||||
is not provided, the provider project is used.
|
is not provided, the provider project is used.
|
||||||
|
|
||||||
|
* `charset` - (Optional) The MySQL charset value (default "utf8").
|
||||||
|
|
||||||
|
* `collation` - (Optional) The MySQL collation value (default
|
||||||
|
"utf8_general_ci").
|
||||||
|
|
||||||
## Attributes Reference
|
## Attributes Reference
|
||||||
|
|
||||||
In addition to the arguments listed above, the following computed attributes are
|
In addition to the arguments listed above, the following computed attributes are
|
||||||
|
Loading…
Reference in New Issue
Block a user