diff --git a/internal/command/jsonplan/plan.go b/internal/command/jsonplan/plan.go index 0a4f9bcd6e..17cc8ad37f 100644 --- a/internal/command/jsonplan/plan.go +++ b/internal/command/jsonplan/plan.go @@ -566,8 +566,9 @@ func omitUnknowns(val cty.Value) cty.Value { newVal := omitUnknowns(v) if newVal != cty.NilVal { vals = append(vals, newVal) - } else if newVal == cty.NilVal && ty.IsListType() { - // list length may be significant, so we will turn unknowns into nulls + } else if newVal == cty.NilVal { + // element order is how we correlate unknownness, so we must + // replace unknowns with nulls vals = append(vals, cty.NullVal(v.Type())) } } diff --git a/internal/command/jsonplan/plan_test.go b/internal/command/jsonplan/plan_test.go index 3c640cf6da..ef5b6cda24 100644 --- a/internal/command/jsonplan/plan_test.go +++ b/internal/command/jsonplan/plan_test.go @@ -65,6 +65,18 @@ func TestOmitUnknowns(t *testing.T) { "hello": cty.True, }), }, + { + cty.TupleVal([]cty.Value{ + cty.StringVal("alpha"), + cty.UnknownVal(cty.String), + cty.StringVal("charlie"), + }), + cty.TupleVal([]cty.Value{ + cty.StringVal("alpha"), + cty.NullVal(cty.String), + cty.StringVal("charlie"), + }), + }, { cty.SetVal([]cty.Value{ cty.StringVal("dev"), @@ -76,6 +88,7 @@ func TestOmitUnknowns(t *testing.T) { cty.StringVal("dev"), cty.StringVal("foo"), cty.StringVal("stg"), + cty.NullVal(cty.String), }), }, {