Skip to content

Commit

Permalink
Merge pull request #14270 from tmarlok88/b-crlf_in_cf_stack
Browse files Browse the repository at this point in the history
Removes carriage return characters from CF stacks during normalize
  • Loading branch information
YakDriver committed Apr 12, 2024
2 parents 3e97c86 + 264444d commit c55d4f7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 4 deletions.
7 changes: 7 additions & 0 deletions .changelog/14270.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:bug
resource/aws_cloudformation_stack: CRLF line endings in `template_body` no longer cause erroneous diffs
```

```release-note:note
provider: When using YAML or JSON documents, such as in `template_body` of `aws_cloudformation_stack`, CRLF was previously treated as different from LF but these are now treated as equivalent in many situations
```
3 changes: 3 additions & 0 deletions internal/verify/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ func SuppressEquivalentJSONOrYAMLDiffs(k, old, new string, d *schema.ResourceDat
}

func NormalizeJSONOrYAMLString(templateString interface{}) (string, error) {
if v, ok := templateString.(string); ok {
templateString = strings.ReplaceAll(v, "\r\n", "\n")
}
if looksLikeJSONString(templateString) {
return structure.NormalizeJsonString(templateString.(string))
}
Expand Down
19 changes: 15 additions & 4 deletions internal/verify/json_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,14 +384,25 @@ func TestNormalizeJSONOrYAMLString(t *testing.T) {
t.Fatalf("Got:\n\n%s\n\nExpected:\n\n%s\n", actual, validNormalizedJSON)
}

validNormalizedYaml := `abc: 1
validNormalizedYAML := `abc: 1
`
actual, err = NormalizeJSONOrYAMLString(validNormalizedYaml)
actual, err = NormalizeJSONOrYAMLString(validNormalizedYAML)
if err != nil {
t.Fatalf("Expected not to throw an error while parsing template, but got: %s", err)
}
if actual != validNormalizedYaml {
t.Fatalf("Got:\n\n%s\n\nExpected:\n\n%s\n", actual, validNormalizedYaml)
if actual != validNormalizedYAML {
t.Fatalf("Got:\n\n%s\n\nExpected:\n\n%s\n", actual, validNormalizedYAML)
}

validNormalizedYAMLWithCarriageReturn := "abc: 1\r\n"
expectedNormalizedYAML := `abc: 1
`
actual, err = NormalizeJSONOrYAMLString(validNormalizedYAMLWithCarriageReturn)
if err != nil {
t.Fatalf("Expected not to throw an error while parsing template, but got: %s", err)
}
if actual != expectedNormalizedYAML {
t.Fatalf("Got:\n\n%s\n\nExpected:\n\n%s\n", actual, expectedNormalizedYAML)
}
}

Expand Down

0 comments on commit c55d4f7

Please sign in to comment.