diff --git a/builtin/providers/aws/resource_aws_elasticache_subnet_group.go b/builtin/providers/aws/resource_aws_elasticache_subnet_group.go index ceca59aab..74e5729eb 100644 --- a/builtin/providers/aws/resource_aws_elasticache_subnet_group.go +++ b/builtin/providers/aws/resource_aws_elasticache_subnet_group.go @@ -3,6 +3,7 @@ package aws import ( "fmt" "log" + "strings" "time" "github.com/aws/aws-sdk-go/aws" @@ -29,6 +30,12 @@ func resourceAwsElasticacheSubnetGroup() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, + StateFunc: func(val interface{}) string { + // Elasticache normalizes subnet names to lowercase, + // so we have to do this too or else we can end up + // with non-converging diffs. + return strings.ToLower(val.(string)) + }, }, "subnet_ids": &schema.Schema{ Type: schema.TypeSet, @@ -66,7 +73,10 @@ func resourceAwsElasticacheSubnetGroupCreate(d *schema.ResourceData, meta interf } // Assign the group name as the resource ID - d.SetId(name) + // Elasticache always retains the name in lower case, so we have to + // mimic that or else we won't be able to refresh a resource whose + // name contained uppercase characters. + d.SetId(strings.ToLower(name)) return nil } diff --git a/builtin/providers/aws/resource_aws_elasticache_subnet_group_test.go b/builtin/providers/aws/resource_aws_elasticache_subnet_group_test.go index d54a4d610..b3035c767 100644 --- a/builtin/providers/aws/resource_aws_elasticache_subnet_group_test.go +++ b/builtin/providers/aws/resource_aws_elasticache_subnet_group_test.go @@ -150,7 +150,10 @@ resource "aws_subnet" "foo" { } resource "aws_elasticache_subnet_group" "bar" { - name = "tf-test-cache-subnet-%03d" + // Including uppercase letters in this name to ensure + // that we correctly handle the fact that the API + // normalizes names to lowercase. + name = "tf-TEST-cache-subnet-%03d" description = "tf-test-cache-subnet-group-descr" subnet_ids = ["${aws_subnet.foo.id}"] } diff --git a/website/source/docs/providers/aws/r/elasticache_subnet_group.html.markdown b/website/source/docs/providers/aws/r/elasticache_subnet_group.html.markdown index 213987de5..a584d4f94 100644 --- a/website/source/docs/providers/aws/r/elasticache_subnet_group.html.markdown +++ b/website/source/docs/providers/aws/r/elasticache_subnet_group.html.markdown @@ -45,8 +45,8 @@ resource "aws_elasticache_subnet_group" "bar" { The following arguments are supported: * `description` – (Required) Description for the cache subnet group -* `name` – (Required) Name for the cache subnet group. This value is stored as -a lowercase string +* `name` – (Required) Name for the cache subnet group. Elasticache converts + this name to lowercase. * `subnet_ids` – (Required) List of VPC Subnet IDs for the cache subnet group ## Attributes Reference