Added user label support in sql_database_instance (#1372) (#1567)

* Added user label support in sql_database_instance (#1372)

* Fixes #1372
This commit is contained in:
Tenorio Orta JM 2018-05-30 17:32:11 -05:00 committed by Vincent Roseberry
parent ad25778d54
commit c6b0cfcbfa
3 changed files with 100 additions and 0 deletions

View File

@ -230,6 +230,12 @@ func resourceSqlDatabaseInstance() *schema.Resource {
Optional: true,
Default: "SYNCHRONOUS",
},
"user_labels": &schema.Schema{
Type: schema.TypeMap,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
Set: schema.HashString,
},
},
},
},
@ -599,6 +605,10 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
settings.ReplicationType = v.(string)
}
if v, ok := _settings["user_labels"]; ok {
settings.UserLabels = convertStringMap(v.(map[string]interface{}))
}
instance := &sqladmin.DatabaseInstance{
Region: region,
Settings: settings,
@ -1031,6 +1041,10 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
settings.ReplicationType = v.(string)
}
if v, ok := _settings["user_labels"]; ok {
settings.UserLabels = convertStringMap(v.(map[string]interface{}))
}
instance.Settings = settings
}
@ -1083,6 +1097,7 @@ func flattenSettings(settings *sqladmin.Settings) []map[string]interface{} {
"disk_size": settings.DataDiskSizeGb,
"pricing_plan": settings.PricingPlan,
"replication_type": settings.ReplicationType,
"user_labels": settings.UserLabels,
}
if settings.BackupConfiguration != nil {
@ -1109,6 +1124,10 @@ func flattenSettings(settings *sqladmin.Settings) []map[string]interface{} {
data["disk_autoresize"] = *settings.StorageAutoResize
}
if settings.UserLabels != nil {
data["user_labels"] = settings.UserLabels
}
return []map[string]interface{}{data}
}

View File

@ -521,6 +521,43 @@ func TestAccSqlDatabaseInstance_multipleOperations(t *testing.T) {
})
}
func TestAccSqlDatabaseInstance_basic_with_user_labels(t *testing.T) {
t.Parallel()
var instance sqladmin.DatabaseInstance
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_with_user_labels, databaseID),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleSqlDatabaseInstanceExists(
"google_sql_database_instance.instance", &instance),
testAccCheckGoogleSqlDatabaseInstanceEquals(
"google_sql_database_instance.instance", &instance),
testAccCheckGoogleSqlDatabaseRootUserDoesNotExist(
&instance),
),
},
resource.TestStep{
Config: fmt.Sprintf(
testGoogleSqlDatabaseInstance_basic_with_user_labels_update, databaseID),
Check: resource.ComposeTestCheckFunc(
testAccCheckGoogleSqlDatabaseInstanceExists(
"google_sql_database_instance.instance", &instance),
testAccCheckGoogleSqlDatabaseInstanceEquals(
"google_sql_database_instance.instance", &instance),
),
},
},
})
}
func testAccCheckGoogleSqlDatabaseInstanceEquals(n string,
instance *sqladmin.DatabaseInstance) resource.TestCheckFunc {
return func(s *terraform.State) error {
@ -693,6 +730,22 @@ func testAccCheckGoogleSqlDatabaseInstanceEquals(n string,
return fmt.Errorf("Error settings.pricing_plan mismatch, (%s, %s)", server, local)
}
if instance.Settings.UserLabels != nil {
server := instance.Settings.UserLabels["location"]
local = attributes["settings.0.user_labels.location"]
if server != local {
return fmt.Errorf("Error settings.user_labels.location mismatch, (%s, %s)", server, local)
}
server = instance.Settings.UserLabels["track"]
local = attributes["settings.0.user_labels.track"]
if server != local {
return fmt.Errorf("Error settings.user_labels.track mismatch, (%s, %s)", server, local)
}
}
if instance.ReplicaConfiguration != nil {
server = strconv.FormatBool(instance.ReplicaConfiguration.FailoverTarget)
local = attributes["replica_configuration.0.failover_target"]
@ -1064,3 +1117,29 @@ resource "google_sql_user" "user" {
password = "hunter2"
}
`
var testGoogleSqlDatabaseInstance_basic_with_user_labels = `
resource "google_sql_database_instance" "instance" {
name = "tf-lw-%d"
region = "us-central1"
settings {
tier = "db-f1-micro"
user_labels {
track = "production"
location = "western-division"
}
}
}
`
var testGoogleSqlDatabaseInstance_basic_with_user_labels_update = `
resource "google_sql_database_instance" "instance" {
name = "tf-lw-%d"
region = "us-central1"
settings {
tier = "db-f1-micro"
user_labels {
track = "production"
}
}
}
`

View File

@ -124,6 +124,8 @@ The required `settings` block supports:
* `replication_type` - (Optional) Replication type for this instance, can be one
of `ASYNCHRONOUS` or `SYNCHRONOUS`.
* `user_labels` - (Optional) A set of key/value user label pairs to assign to the instance.
The optional `settings.database_flags` sublist supports:
* `name` - (Optional) Name of the flag.