From c69d5867ceafdc76efe89321b248f8a8132b669a Mon Sep 17 00:00:00 2001 From: domwong Date: Wed, 4 Jul 2018 10:35:07 +0100 Subject: [PATCH] Updates to tags and ACLs should happen only for non new resources --- aws/resource_aws_instance.go | 2 +- aws/resource_aws_s3_bucket.go | 2 +- aws/tags.go | 3 +++ aws/tags_test.go | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/aws/resource_aws_instance.go b/aws/resource_aws_instance.go index 0f0cb7c70f10..6e705fe52227 100644 --- a/aws/resource_aws_instance.go +++ b/aws/resource_aws_instance.go @@ -854,7 +854,7 @@ func resourceAwsInstanceUpdate(d *schema.ResourceData, meta interface{}) error { } } if d.HasChange("volume_tags") { - if !d.IsNewResource() || !restricted { + if !d.IsNewResource() || restricted { if err := setVolumeTags(conn, d); err != nil { return err } else { diff --git a/aws/resource_aws_s3_bucket.go b/aws/resource_aws_s3_bucket.go index 8b159cc63595..9ba8b72f47ea 100644 --- a/aws/resource_aws_s3_bucket.go +++ b/aws/resource_aws_s3_bucket.go @@ -588,7 +588,7 @@ func resourceAwsS3BucketUpdate(d *schema.ResourceData, meta interface{}) error { return err } } - if d.HasChange("acl") { + if d.HasChange("acl") && !d.IsNewResource() { if err := resourceAwsS3BucketAclUpdate(s3conn, d); err != nil { return err } diff --git a/aws/tags.go b/aws/tags.go index 7a4bfdef1747..6aa8453c03a8 100644 --- a/aws/tags.go +++ b/aws/tags.go @@ -197,6 +197,9 @@ func diffTags(oldTags, newTags []*ec2.Tag) ([]*ec2.Tag, []*ec2.Tag) { old, ok := create[*t.Key] if !ok || old != *t.Value { remove = append(remove, t) + } else if ok { + // already present so remove from new + delete(create, *t.Key) } } diff --git a/aws/tags_test.go b/aws/tags_test.go index 1777c376408e..c9c9109bf495 100644 --- a/aws/tags_test.go +++ b/aws/tags_test.go @@ -47,6 +47,24 @@ func TestDiffTags(t *testing.T) { "foo": "bar", }, }, + + // Overlap + { + Old: map[string]interface{}{ + "foo": "bar", + "hello": "world", + }, + New: map[string]interface{}{ + "foo": "baz", + "hello": "world", + }, + Create: map[string]string{ + "foo": "baz", + }, + Remove: map[string]string{ + "foo": "bar", + }, + }, } for i, tc := range cases {