Skip to content

Commit

Permalink
provider/aws: normalize json policy for sns topic policy attribute (h…
Browse files Browse the repository at this point in the history
…ashicorp#6089)

* provider/aws: test empty plan with sns_topic policy with random order

If we setup a sns_topic policy with a policy with a different order
to the one set by the AWS API, terraform plan will be not empty between
runs.

* provider/aws: normalize json policy for sns topic

For the policy attribute of the resource aws_sns_topic,  AWS returns the policy
in JSON format with the fields in a different order.
If we store and compare the values without normalizing, terraform
will unnecesary trigger and update of the resource.

To avoid that, we must add a normalization function in the StateFunc of
the policy attribute and also when we read the attribute from AWS.
  • Loading branch information
keymon authored and chrislovecnm committed Apr 16, 2016
1 parent feed20e commit 7131a48
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
13 changes: 10 additions & 3 deletions builtin/providers/aws/resource_aws_sns_topic.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ func resourceAwsSnsTopic() *schema.Resource {
log.Printf("[WARN] Error compacting JSON for Policy in SNS Topic")
return ""
}
return buffer.String()
value := normalizeJson(buffer.String())
log.Printf("[DEBUG] topic policy before save: %s", value)
return value
},
},
"delivery_policy": &schema.Schema{
Expand Down Expand Up @@ -183,9 +185,14 @@ func resourceAwsSnsTopicRead(d *schema.ResourceData, meta interface{}) error {
// Some of the fetched attributes are stateful properties such as
// the number of subscriptions, the owner, etc. skip those
if resource.Schema[iKey] != nil {
value := *attrmap[oKey]
var value string
if iKey == "policy" {
value = normalizeJson(*attrmap[oKey])
} else {
value = *attrmap[oKey]
}
log.Printf("[DEBUG] Reading %s => %s -> %s", iKey, oKey, value)
d.Set(iKey, *attrmap[oKey])
d.Set(iKey, value)
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions builtin/providers/aws/resource_aws_sns_topic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,6 @@ resource "aws_sns_topic" "test_topic" {
name = "example"
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "Policy1445931846145",
"Statement": [
{
"Sid": "Stmt1445931846145",
Expand All @@ -140,7 +138,9 @@ resource "aws_sns_topic" "test_topic" {
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-west-2::example"
}
]
],
"Version": "2012-10-17",
"Id": "Policy1445931846145"
}
EOF
}
Expand Down

0 comments on commit 7131a48

Please sign in to comment.