diff --git a/configs/configschema/decoder_spec.go b/configs/configschema/decoder_spec.go index e748dd20de..c4bc3be03b 100644 --- a/configs/configschema/decoder_spec.go +++ b/configs/configschema/decoder_spec.go @@ -35,7 +35,8 @@ func (b *Block) DecoderSpec() hcldec.Spec { // We can only validate 0 or 1 for MinItems, because a dynamic block // may satisfy any number of min items while only having a single - // block in the config. + // block in the config. We cannot validate MaxItems because a + // configuration may have any number of dynamic blocks minItems := 0 if blockS.MinItems > 1 { minItems = 1 @@ -46,7 +47,7 @@ func (b *Block) DecoderSpec() hcldec.Spec { ret[name] = &hcldec.BlockSpec{ TypeName: name, Nested: childSpec, - Required: blockS.MinItems == 1 && blockS.MaxItems >= 1, + Required: blockS.MinItems == 1, } if blockS.Nesting == NestingGroup { ret[name] = &hcldec.DefaultSpec{ @@ -66,14 +67,12 @@ func (b *Block) DecoderSpec() hcldec.Spec { TypeName: name, Nested: childSpec, MinItems: minItems, - MaxItems: blockS.MaxItems, } } else { ret[name] = &hcldec.BlockListSpec{ TypeName: name, Nested: childSpec, MinItems: minItems, - MaxItems: blockS.MaxItems, } } case NestingSet: @@ -86,7 +85,6 @@ func (b *Block) DecoderSpec() hcldec.Spec { TypeName: name, Nested: childSpec, MinItems: minItems, - MaxItems: blockS.MaxItems, } case NestingMap: // We prefer to use a list where possible, since it makes our diff --git a/configs/configschema/decoder_spec_test.go b/configs/configschema/decoder_spec_test.go index d6f6a6a153..1e7b1d4c60 100644 --- a/configs/configschema/decoder_spec_test.go +++ b/configs/configschema/decoder_spec_test.go @@ -354,7 +354,7 @@ func TestBlockDecoderSpec(t *testing.T) { cty.EmptyObjectVal, }), }), - 1, // too many "foo" blocks + 0, // max items cannot be validated during decode }, // dynamic blocks may fulfill MinItems, but there is only one block to // decode.