Merge pull request #29522 from hashicorp/jbardin/json-blocktoattr

allow json output to marshal ConfigModeAttr blocks
This commit is contained in:
James Bardin 2021-09-07 11:32:21 -04:00 committed by GitHub
commit 1ad0421e15
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import (
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/configs/configschema"
"github.com/hashicorp/terraform/internal/lang"
"github.com/hashicorp/terraform/internal/lang/blocktoattr"
"github.com/zclconf/go-cty/cty"
ctyjson "github.com/zclconf/go-cty/cty/json"
)
@ -96,6 +97,9 @@ func marshalExpressions(body hcl.Body, schema *configschema.Block) expressions {
// (lowSchema is an hcl.BodySchema:
// https://godoc.org/github.com/hashicorp/hcl/v2/hcl#BodySchema )
// fix any ConfigModeAttr blocks present from legacy providers
body = blocktoattr.FixUpBlockAttrs(body, schema)
// Use the low-level schema with the body to decode one level We'll just
// ignore any additional content that's not covered by the schema, which
// will effectively ignore "dynamic" blocks, and may also ignore other

View File

@ -80,6 +80,29 @@ func TestMarshalExpressions(t *testing.T) {
},
},
},
{
hcltest.MockBody(&hcl.BodyContent{
Blocks: hcl.Blocks{
{
Type: "block_to_attr",
Body: hcltest.MockBody(&hcl.BodyContent{
Attributes: hcl.Attributes{
"foo": {
Name: "foo",
Expr: hcltest.MockExprTraversalSrc(`module.foo.bar`),
},
},
}),
},
},
}),
expressions{
"block_to_attr": expression{
References: []string{"module.foo.bar", "module.foo"},
},
},
},
}
for _, test := range tests {
@ -89,6 +112,11 @@ func TestMarshalExpressions(t *testing.T) {
Type: cty.String,
Optional: true,
},
"block_to_attr": {
Type: cty.List(cty.Object(map[string]cty.Type{
"foo": cty.String,
})),
},
},
}