in variable.go [213:243]
func (v *VariableBlock) validationCheck() error {
var err error
for _, nb := range v.HclBlock().NestedBlocks() {
if nb.Type != "validation" {
continue
}
ctx := v.c.EmptyEvalContext()
ctx.Variables = map[string]cty.Value{
"var": cty.ObjectVal(map[string]cty.Value{
v.Name(): *v.variableValue,
}),
}
var vb VariableValidation
diag := gohcl.DecodeBody(nb.Body, ctx, &vb)
if diag.HasErrors() {
err = multierror.Append(err, diag)
continue
}
v.Validations = append(v.Validations, vb)
}
if err != nil {
return err
}
for _, validation := range v.Validations {
if validation.Condition {
continue
}
err = multierror.Append(err, fmt.Errorf("invalid value for variable %s\n%s\n%s", v.Name(), v.HclBlock().Range().String(), validation.ErrorMessage))
}
return err
}