From b78f4c111498470cc1642c4c28216c851c620a33 Mon Sep 17 00:00:00 2001 From: David Harris Date: Tue, 19 Apr 2016 13:32:49 -0600 Subject: [PATCH] provider/aws: Added migration for `tier` attribute in aws_elastic_beanstalk_environment resource. (#6167) Fixes #6164. --- ...ource_aws_elastic_beanstalk_environment.go | 3 + ...s_elastic_beanstalk_environment_migrate.go | 35 ++++++++++++ ...stic_beanstalk_environment_migrate_test.go | 57 +++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate.go create mode 100644 builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate_test.go diff --git a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go index 204790eef..4dbb5a375 100644 --- a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go +++ b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go @@ -43,6 +43,9 @@ func resourceAwsElasticBeanstalkEnvironment() *schema.Resource { Update: resourceAwsElasticBeanstalkEnvironmentUpdate, Delete: resourceAwsElasticBeanstalkEnvironmentDelete, + SchemaVersion: 1, + MigrateState: resourceAwsElasticBeanstalkEnvironmentMigrateState, + Schema: map[string]*schema.Schema{ "name": &schema.Schema{ Type: schema.TypeString, diff --git a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate.go b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate.go new file mode 100644 index 000000000..31cd5c777 --- /dev/null +++ b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate.go @@ -0,0 +1,35 @@ +package aws + +import ( + "fmt" + "log" + + "github.com/hashicorp/terraform/terraform" +) + +func resourceAwsElasticBeanstalkEnvironmentMigrateState( + v int, is *terraform.InstanceState, meta interface{}) (*terraform.InstanceState, error) { + switch v { + case 0: + log.Println("[INFO] Found AWS Elastic Beanstalk Environment State v0; migrating to v1") + return migrateBeanstalkEnvironmentStateV0toV1(is) + default: + return is, fmt.Errorf("Unexpected schema version: %d", v) + } +} + +func migrateBeanstalkEnvironmentStateV0toV1(is *terraform.InstanceState) (*terraform.InstanceState, error) { + if is.Empty() || is.Attributes == nil { + log.Println("[DEBUG] Empty Elastic Beanstalk Environment State; nothing to migrate.") + return is, nil + } + + log.Printf("[DEBUG] Attributes before migration: %#v", is.Attributes) + + if is.Attributes["tier"] == "" { + is.Attributes["tier"] = "WebServer" + } + + log.Printf("[DEBUG] Attributes after migration: %#v", is.Attributes) + return is, nil +} diff --git a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate_test.go b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate_test.go new file mode 100644 index 000000000..6b7603894 --- /dev/null +++ b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment_migrate_test.go @@ -0,0 +1,57 @@ +package aws + +import ( + "testing" + + "github.com/hashicorp/terraform/terraform" +) + +func TestAWSElasticBeanstalkEnvironmentMigrateState(t *testing.T) { + cases := map[string]struct { + StateVersion int + Attributes map[string]string + Expected map[string]string + Meta interface{} + }{ + "v0_1_web": { + StateVersion: 0, + Attributes: map[string]string{ + "tier": "", + }, + Expected: map[string]string{ + "tier": "WebServer", + }, + }, + "v0_1_web_explicit": { + StateVersion: 0, + Attributes: map[string]string{ + "tier": "WebServer", + }, + Expected: map[string]string{ + "tier": "WebServer", + }, + }, + "v0_1_worker": { + StateVersion: 0, + Attributes: map[string]string{ + "tier": "Worker", + }, + Expected: map[string]string{ + "tier": "Worker", + }, + }, + } + + for tn, tc := range cases { + is := &terraform.InstanceState{ + ID: "e-abcde12345", + Attributes: tc.Attributes, + } + is, err := resourceAwsElasticBeanstalkEnvironmentMigrateState( + tc.StateVersion, is, tc.Meta) + + if err != nil { + t.Fatalf("bad: %s, err: %#v", tn, err) + } + } +}