diff --git a/configs/configschema/coerce_value.go b/configs/configschema/coerce_value.go index 7996c383a..23a48e1be 100644 --- a/configs/configschema/coerce_value.go +++ b/configs/configschema/coerce_value.go @@ -114,14 +114,6 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) { } l := coll.LengthInt() - // Assume that if there are unknowns this could have come from - // a dynamic block, and we can't validate MinItems yet. - if l < blockS.MinItems && coll.IsWhollyKnown() { - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("insufficient items for attribute %q; must have at least %d", typeName, blockS.MinItems) - } - if l > blockS.MaxItems && blockS.MaxItems > 0 { - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("too many items for attribute %q; cannot have more than %d", typeName, blockS.MaxItems) - } if l == 0 { attrs[typeName] = cty.ListValEmpty(blockS.ImpliedType()) continue @@ -140,10 +132,8 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) { } } attrs[typeName] = cty.ListVal(elems) - case blockS.MinItems == 0: - attrs[typeName] = cty.ListValEmpty(blockS.ImpliedType()) default: - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("attribute %q is required", typeName) + attrs[typeName] = cty.ListValEmpty(blockS.ImpliedType()) } case NestingSet: @@ -165,14 +155,6 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) { } l := coll.LengthInt() - // Assume that if there are unknowns this could have come from - // a dynamic block, and we can't validate MinItems yet. - if l < blockS.MinItems && coll.IsWhollyKnown() { - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("insufficient items for attribute %q; must have at least %d", typeName, blockS.MinItems) - } - if l > blockS.MaxItems && blockS.MaxItems > 0 { - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("too many items for attribute %q; cannot have more than %d", typeName, blockS.MaxItems) - } if l == 0 { attrs[typeName] = cty.SetValEmpty(blockS.ImpliedType()) continue @@ -191,10 +173,8 @@ func (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) { } } attrs[typeName] = cty.SetVal(elems) - case blockS.MinItems == 0: - attrs[typeName] = cty.SetValEmpty(blockS.ImpliedType()) default: - return cty.UnknownVal(b.ImpliedType()), path.NewErrorf("attribute %q is required", typeName) + attrs[typeName] = cty.SetValEmpty(blockS.ImpliedType()) } case NestingMap: diff --git a/configs/configschema/coerce_value_test.go b/configs/configschema/coerce_value_test.go index 7fd07856d..084107878 100644 --- a/configs/configschema/coerce_value_test.go +++ b/configs/configschema/coerce_value_test.go @@ -291,34 +291,6 @@ func TestCoerceValue(t *testing.T) { cty.DynamicVal, `attribute "foo" is required`, }, - "missing required list block": { - &Block{ - BlockTypes: map[string]*NestedBlock{ - "foo": { - Block: Block{}, - Nesting: NestingList, - MinItems: 1, - }, - }, - }, - cty.EmptyObjectVal, - cty.DynamicVal, - `attribute "foo" is required`, - }, - "missing required set block": { - &Block{ - BlockTypes: map[string]*NestedBlock{ - "foo": { - Block: Block{}, - Nesting: NestingList, - MinItems: 1, - }, - }, - }, - cty.EmptyObjectVal, - cty.DynamicVal, - `attribute "foo" is required`, - }, "unknown nested list": { &Block{ Attributes: map[string]*Attribute{