From d27a41746ccfcd0041e94d2e6fc036b68714cf72 Mon Sep 17 00:00:00 2001 From: Clint Shryock Date: Thu, 16 Apr 2015 15:31:40 -0500 Subject: [PATCH] clean up tags sdk lib --- builtin/providers/aws/tags.go | 30 ++++---- builtin/providers/aws/tags_sdk.go | 99 -------------------------- builtin/providers/aws/tags_sdk_test.go | 85 ---------------------- builtin/providers/aws/tags_test.go | 16 ++--- 4 files changed, 23 insertions(+), 207 deletions(-) delete mode 100644 builtin/providers/aws/tags_sdk.go delete mode 100644 builtin/providers/aws/tags_sdk_test.go diff --git a/builtin/providers/aws/tags.go b/builtin/providers/aws/tags.go index 1c64b18b4..b3f80819e 100644 --- a/builtin/providers/aws/tags.go +++ b/builtin/providers/aws/tags.go @@ -3,8 +3,8 @@ package aws import ( "log" - "github.com/hashicorp/aws-sdk-go/aws" - "github.com/hashicorp/aws-sdk-go/gen/ec2" + "github.com/awslabs/aws-sdk-go/aws" + "github.com/awslabs/aws-sdk-go/service/ec2" "github.com/hashicorp/terraform/helper/schema" ) @@ -19,18 +19,18 @@ func tagsSchema() *schema.Schema { // setTags is a helper to set the tags for a resource. It expects the // tags field to be named "tags" -func setTags(conn *ec2.EC2, d *schema.ResourceData) error { +func setTagsSDK(conn *ec2.EC2, d *schema.ResourceData) error { if d.HasChange("tags") { oraw, nraw := d.GetChange("tags") o := oraw.(map[string]interface{}) n := nraw.(map[string]interface{}) - create, remove := diffTags(tagsFromMap(o), tagsFromMap(n)) + create, remove := diffTagsSDK(tagsFromMapSDK(o), tagsFromMapSDK(n)) // Set tags if len(remove) > 0 { log.Printf("[DEBUG] Removing tags: %#v", remove) - err := conn.DeleteTags(&ec2.DeleteTagsRequest{ - Resources: []string{d.Id()}, + _, err := conn.DeleteTags(&ec2.DeleteTagsInput{ + Resources: []*string{aws.String(d.Id())}, Tags: remove, }) if err != nil { @@ -39,8 +39,8 @@ func setTags(conn *ec2.EC2, d *schema.ResourceData) error { } if len(create) > 0 { log.Printf("[DEBUG] Creating tags: %#v", create) - err := conn.CreateTags(&ec2.CreateTagsRequest{ - Resources: []string{d.Id()}, + _, err := conn.CreateTags(&ec2.CreateTagsInput{ + Resources: []*string{aws.String(d.Id())}, Tags: create, }) if err != nil { @@ -55,7 +55,7 @@ func setTags(conn *ec2.EC2, d *schema.ResourceData) error { // diffTags takes our tags locally and the ones remotely and returns // the set of tags that must be created, and the set of tags that must // be destroyed. -func diffTags(oldTags, newTags []ec2.Tag) ([]ec2.Tag, []ec2.Tag) { +func diffTagsSDK(oldTags, newTags []*ec2.Tag) ([]*ec2.Tag, []*ec2.Tag) { // First, we're creating everything we have create := make(map[string]interface{}) for _, t := range newTags { @@ -63,7 +63,7 @@ func diffTags(oldTags, newTags []ec2.Tag) ([]ec2.Tag, []ec2.Tag) { } // Build the list of what to remove - var remove []ec2.Tag + var remove []*ec2.Tag for _, t := range oldTags { old, ok := create[*t.Key] if !ok || old != *t.Value { @@ -72,14 +72,14 @@ func diffTags(oldTags, newTags []ec2.Tag) ([]ec2.Tag, []ec2.Tag) { } } - return tagsFromMap(create), remove + return tagsFromMapSDK(create), remove } // tagsFromMap returns the tags for the given map of data. -func tagsFromMap(m map[string]interface{}) []ec2.Tag { - result := make([]ec2.Tag, 0, len(m)) +func tagsFromMapSDK(m map[string]interface{}) []*ec2.Tag { + result := make([]*ec2.Tag, 0, len(m)) for k, v := range m { - result = append(result, ec2.Tag{ + result = append(result, &ec2.Tag{ Key: aws.String(k), Value: aws.String(v.(string)), }) @@ -89,7 +89,7 @@ func tagsFromMap(m map[string]interface{}) []ec2.Tag { } // tagsToMap turns the list of tags into a map. -func tagsToMap(ts []ec2.Tag) map[string]string { +func tagsToMapSDK(ts []*ec2.Tag) map[string]string { result := make(map[string]string) for _, t := range ts { result[*t.Key] = *t.Value diff --git a/builtin/providers/aws/tags_sdk.go b/builtin/providers/aws/tags_sdk.go deleted file mode 100644 index 0b8e807c2..000000000 --- a/builtin/providers/aws/tags_sdk.go +++ /dev/null @@ -1,99 +0,0 @@ -package aws - -import ( - "log" - - "github.com/awslabs/aws-sdk-go/aws" - "github.com/awslabs/aws-sdk-go/service/ec2" - "github.com/hashicorp/terraform/helper/schema" -) - -// tagsSchema returns the schema to use for tags. -// -// func tagsSchema() *schema.Schema { -// return &schema.Schema{ -// Type: schema.TypeMap, -// Optional: true, -// } -// } - -// setTags is a helper to set the tags for a resource. It expects the -// tags field to be named "tags" -func setTagsSDK(conn *ec2.EC2, d *schema.ResourceData) error { - if d.HasChange("tags") { - oraw, nraw := d.GetChange("tags") - o := oraw.(map[string]interface{}) - n := nraw.(map[string]interface{}) - create, remove := diffTagsSDK(tagsFromMapSDK(o), tagsFromMapSDK(n)) - - // Set tags - if len(remove) > 0 { - log.Printf("[DEBUG] Removing tags: %#v", remove) - _, err := conn.DeleteTags(&ec2.DeleteTagsInput{ - Resources: []*string{aws.String(d.Id())}, - Tags: remove, - }) - if err != nil { - return err - } - } - if len(create) > 0 { - log.Printf("[DEBUG] Creating tags: %#v", create) - _, err := conn.CreateTags(&ec2.CreateTagsInput{ - Resources: []*string{aws.String(d.Id())}, - Tags: create, - }) - if err != nil { - return err - } - } - } - - return nil -} - -// diffTags takes our tags locally and the ones remotely and returns -// the set of tags that must be created, and the set of tags that must -// be destroyed. -func diffTagsSDK(oldTags, newTags []*ec2.Tag) ([]*ec2.Tag, []*ec2.Tag) { - // First, we're creating everything we have - create := make(map[string]interface{}) - for _, t := range newTags { - create[*t.Key] = *t.Value - } - - // Build the list of what to remove - var remove []*ec2.Tag - for _, t := range oldTags { - old, ok := create[*t.Key] - if !ok || old != *t.Value { - // Delete it! - remove = append(remove, t) - } - } - - return tagsFromMapSDK(create), remove -} - -// tagsFromMap returns the tags for the given map of data. -func tagsFromMapSDK(m map[string]interface{}) []*ec2.Tag { - result := make([]*ec2.Tag, 0, len(m)) - for k, v := range m { - result = append(result, &ec2.Tag{ - Key: aws.String(k), - Value: aws.String(v.(string)), - }) - } - - return result -} - -// tagsToMap turns the list of tags into a map. -func tagsToMapSDK(ts []*ec2.Tag) map[string]string { - result := make(map[string]string) - for _, t := range ts { - result[*t.Key] = *t.Value - } - - return result -} diff --git a/builtin/providers/aws/tags_sdk_test.go b/builtin/providers/aws/tags_sdk_test.go deleted file mode 100644 index 272957f6b..000000000 --- a/builtin/providers/aws/tags_sdk_test.go +++ /dev/null @@ -1,85 +0,0 @@ -package aws - -import ( - "fmt" - "reflect" - "testing" - - "github.com/awslabs/aws-sdk-go/service/ec2" - "github.com/hashicorp/terraform/helper/resource" - "github.com/hashicorp/terraform/terraform" -) - -func TestDiffTagsSDK(t *testing.T) { - cases := []struct { - Old, New map[string]interface{} - Create, Remove map[string]string - }{ - // Basic add/remove - { - Old: map[string]interface{}{ - "foo": "bar", - }, - New: map[string]interface{}{ - "bar": "baz", - }, - Create: map[string]string{ - "bar": "baz", - }, - Remove: map[string]string{ - "foo": "bar", - }, - }, - - // Modify - { - Old: map[string]interface{}{ - "foo": "bar", - }, - New: map[string]interface{}{ - "foo": "baz", - }, - Create: map[string]string{ - "foo": "baz", - }, - Remove: map[string]string{ - "foo": "bar", - }, - }, - } - - for i, tc := range cases { - c, r := diffTagsSDK(tagsFromMapSDK(tc.Old), tagsFromMapSDK(tc.New)) - cm := tagsToMapSDK(c) - rm := tagsToMapSDK(r) - if !reflect.DeepEqual(cm, tc.Create) { - t.Fatalf("%d: bad create: %#v", i, cm) - } - if !reflect.DeepEqual(rm, tc.Remove) { - t.Fatalf("%d: bad remove: %#v", i, rm) - } - } -} - -// testAccCheckTags can be used to check the tags on a resource. -func testAccCheckTagsSDK( - ts *[]*ec2.Tag, key string, value string) resource.TestCheckFunc { - return func(s *terraform.State) error { - m := tagsToMapSDK(*ts) - v, ok := m[key] - if value != "" && !ok { - return fmt.Errorf("Missing tag: %s", key) - } else if value == "" && ok { - return fmt.Errorf("Extra tag: %s", key) - } - if value == "" { - return nil - } - - if v != value { - return fmt.Errorf("%s: bad value: %s", key, v) - } - - return nil - } -} diff --git a/builtin/providers/aws/tags_test.go b/builtin/providers/aws/tags_test.go index 16578ac1b..272957f6b 100644 --- a/builtin/providers/aws/tags_test.go +++ b/builtin/providers/aws/tags_test.go @@ -5,12 +5,12 @@ import ( "reflect" "testing" - "github.com/hashicorp/aws-sdk-go/gen/ec2" + "github.com/awslabs/aws-sdk-go/service/ec2" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" ) -func TestDiffTags(t *testing.T) { +func TestDiffTagsSDK(t *testing.T) { cases := []struct { Old, New map[string]interface{} Create, Remove map[string]string @@ -49,9 +49,9 @@ func TestDiffTags(t *testing.T) { } for i, tc := range cases { - c, r := diffTags(tagsFromMap(tc.Old), tagsFromMap(tc.New)) - cm := tagsToMap(c) - rm := tagsToMap(r) + c, r := diffTagsSDK(tagsFromMapSDK(tc.Old), tagsFromMapSDK(tc.New)) + cm := tagsToMapSDK(c) + rm := tagsToMapSDK(r) if !reflect.DeepEqual(cm, tc.Create) { t.Fatalf("%d: bad create: %#v", i, cm) } @@ -62,10 +62,10 @@ func TestDiffTags(t *testing.T) { } // testAccCheckTags can be used to check the tags on a resource. -func testAccCheckTags( - ts *[]ec2.Tag, key string, value string) resource.TestCheckFunc { +func testAccCheckTagsSDK( + ts *[]*ec2.Tag, key string, value string) resource.TestCheckFunc { return func(s *terraform.State) error { - m := tagsToMap(*ts) + m := tagsToMapSDK(*ts) v, ok := m[key] if value != "" && !ok { return fmt.Errorf("Missing tag: %s", key)