Merge pull request #22169 from hashicorp/jbardin/dynamic-on-attr

invlaid use of dynamic with attrs should not panic
This commit is contained in:
James Bardin 2019-07-23 09:50:43 -04:00 committed by GitHub
commit 1bd65bd4b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 1 deletions

View File

@ -33,7 +33,7 @@ func walkVariables(node dynblock.WalkVariablesNode, body hcl.Body, schema *confi
for _, child := range children {
if blockS, exists := schema.BlockTypes[child.BlockTypeName]; exists {
vars = append(vars, walkVariables(child.Node, child.Body(), &blockS.Block)...)
} else if attrS, exists := schema.Attributes[child.BlockTypeName]; exists {
} else if attrS, exists := schema.Attributes[child.BlockTypeName]; exists && attrS.Type.ElementType().IsObjectType() {
synthSchema := SchemaForCtyElementType(attrS.Type.ElementType())
vars = append(vars, walkVariables(child.Node, child.Body(), synthSchema)...)
}

View File

@ -21,6 +21,10 @@ func TestExpandedVariables(t *testing.T) {
})),
Optional: true,
},
"bar": {
Type: cty.Map(cty.String),
Optional: true,
},
},
}
@ -143,6 +147,29 @@ dynamic "foo" {
},
},
},
"misplaced dynamic block": {
src: `
dynamic "bar" {
for_each = beep
content {
key = val
}
}
`,
schema: fooSchema,
want: []hcl.Traversal{
{
hcl.TraverseRoot{
Name: "beep",
SrcRange: hcl.Range{
Filename: "test.tf",
Start: hcl.Pos{Line: 3, Column: 14, Byte: 30},
End: hcl.Pos{Line: 3, Column: 18, Byte: 34},
},
},
},
},
},
}
for name, test := range tests {