summaryrefslogtreecommitdiff
path: root/config/validation.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/validation.go')
-rw-r--r--config/validation.go31
1 files changed, 27 insertions, 4 deletions
diff --git a/config/validation.go b/config/validation.go
index 652a3c8..3359211 100644
--- a/config/validation.go
+++ b/config/validation.go
@@ -52,6 +52,8 @@ var (
"baseimage": isBaseImage,
"debianpackage": isDebianPackage,
"envvars": isEnvironmentVariables,
+ "isfalse": isFalse,
+ "istrue": isTrue,
"variantref": isVariantReference,
"variants": hasVariantNames,
}
@@ -61,11 +63,10 @@ type ctxKey uint8
const rootCfgCtx ctxKey = iota
-// Validate runs all validations defined for config fields against the given
-// Config value. If the returned error is not nil, it will contain a
-// user-friendly message describing all invalid field values.
+// NewValidator returns a validator instance for which our custom aliases and
+// functions are registered.
//
-func Validate(config Config) error {
+func NewValidator() *validator.Validate {
validate := validator.New()
validate.RegisterTagNameFunc(resolveYAMLTagName)
@@ -78,6 +79,16 @@ func Validate(config Config) error {
validate.RegisterValidationCtx(name, f)
}
+ return validate
+}
+
+// Validate runs all validations defined for config fields against the given
+// Config value. If the returned error is not nil, it will contain a
+// user-friendly message describing all invalid field values.
+//
+func Validate(config Config) error {
+ validate := NewValidator()
+
ctx := context.WithValue(context.Background(), rootCfgCtx, config)
return validate.StructCtx(ctx, config)
@@ -169,6 +180,18 @@ func isEnvironmentVariables(_ context.Context, fl validator.FieldLevel) bool {
return true
}
+func isFalse(_ context.Context, fl validator.FieldLevel) bool {
+ val, ok := fl.Field().Interface().(bool)
+
+ return ok && val == false
+}
+
+func isTrue(_ context.Context, fl validator.FieldLevel) bool {
+ val, ok := fl.Field().Interface().(bool)
+
+ return ok && val == true
+}
+
func isVariantReference(ctx context.Context, fl validator.FieldLevel) bool {
cfg := ctx.Value(rootCfgCtx).(Config)
ref := fl.Field().String()