Merge pull request #20698 from hashicorp/jbardin/null-string

don't try to treat "null" as json in diff output
This commit is contained in:
James Bardin 2019-03-14 17:45:20 -04:00 committed by GitHub
commit 035e89696c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 1 deletions

View File

@ -496,7 +496,9 @@ func (p *blockBodyDiffPrinter) writeValue(val cty.Value, action plans.Action, in
// Special behavior for JSON strings containing array or object // Special behavior for JSON strings containing array or object
src := []byte(val.AsString()) src := []byte(val.AsString())
ty, err := ctyjson.ImpliedType(src) ty, err := ctyjson.ImpliedType(src)
if err == nil && !ty.IsPrimitiveType() { // check for the special case of "null", which decodes to nil,
// and just allow it to be printed out directly
if err == nil && !ty.IsPrimitiveType() && val.AsString() != "null" {
jv, err := ctyjson.Unmarshal(src, ty) jv, err := ctyjson.Unmarshal(src, ty)
if err == nil { if err == nil {
p.buf.WriteString("jsonencode(") p.buf.WriteString("jsonencode(")

View File

@ -30,6 +30,26 @@ func TestResourceChange_primitiveTypes(t *testing.T) {
+ resource "test_instance" "example" { + resource "test_instance" "example" {
+ id = (known after apply) + id = (known after apply)
} }
`,
},
"creation (null string)": {
Action: plans.Create,
Mode: addrs.ManagedResourceMode,
Before: cty.NullVal(cty.EmptyObject),
After: cty.ObjectVal(map[string]cty.Value{
"string": cty.StringVal("null"),
}),
Schema: &configschema.Block{
Attributes: map[string]*configschema.Attribute{
"string": {Type: cty.String, Optional: true},
},
},
RequiredReplace: cty.NewPathSet(),
Tainted: false,
ExpectedOutput: ` # test_instance.example will be created
+ resource "test_instance" "example" {
+ string = "null"
}
`, `,
}, },
"deletion": { "deletion": {