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{
|
||||
Create: resourceSqlDatabaseCreate,
|
||||
Read: resourceSqlDatabaseRead,
|
||||
Update: resourceSqlDatabaseUpdate,
|
||||
Delete: resourceSqlDatabaseDelete,
|
||||
Importer: &schema.ResourceImporter{
|
||||
State: schema.ImportStatePassthrough,
|
||||
@ -41,6 +42,18 @@ func resourceSqlDatabase() *schema.Resource {
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
|
||||
"charset": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Default: "utf8",
|
||||
},
|
||||
|
||||
"collation": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Default: "utf8_general_ci",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -60,6 +73,8 @@ func resourceSqlDatabaseCreate(d *schema.ResourceData, meta interface{}) error {
|
||||
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))
|
||||
@ -112,10 +127,51 @@ func resourceSqlDatabaseRead(d *schema.ResourceData, meta interface{}) error {
|
||||
d.Set("name", db.Name)
|
||||
d.Set("self_link", db.SelfLink)
|
||||
d.SetId(instance_name + ":" + database_name)
|
||||
d.Set("charset", db.Charset)
|
||||
d.Set("collation", db.Collation)
|
||||
|
||||
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 {
|
||||
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,
|
||||
database *sqladmin.Database) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
@ -43,6 +78,8 @@ func testAccCheckGoogleSqlDatabaseEquals(n string,
|
||||
|
||||
database_name := rs.Primary.Attributes["name"]
|
||||
instance_name := rs.Primary.Attributes["instance"]
|
||||
charset := rs.Primary.Attributes["charset"]
|
||||
collation := rs.Primary.Attributes["collation"]
|
||||
|
||||
if 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)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
@ -114,3 +159,19 @@ resource "google_sql_database" "database" {
|
||||
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"
|
||||
}
|
||||
`
|
||||
|
@ -26,6 +26,8 @@ resource "google_sql_database_instance" "master" {
|
||||
resource "google_sql_database" "users" {
|
||||
name = "users-db"
|
||||
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
|
||||
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
|
||||
|
||||
In addition to the arguments listed above, the following computed attributes are
|
||||
|
Loading…
Reference in New Issue
Block a user