Try to expose JSON paths

This commit is contained in:
Yann Hamon 2023-01-24 22:11:51 +01:00
parent ee7c498580
commit e56c6bee81
2 changed files with 47 additions and 11 deletions

View file

@ -9,12 +9,13 @@ import (
)
type oresult struct {
Filename string `json:"filename"`
Kind string `json:"kind"`
Name string `json:"name"`
Version string `json:"version"`
Status string `json:"status"`
Msg string `json:"msg"`
Filename string `json:"filename"`
Kind string `json:"kind"`
Name string `json:"name"`
Version string `json:"version"`
Status string `json:"status"`
Msg string `json:"msg"`
ValidationErrors []validator.ValidationError `json:"validationErrors,omitempty"`
}
type jsono struct {
@ -63,7 +64,15 @@ func (o *jsono) Write(result validator.Result) error {
if o.verbose || (result.Status != validator.Valid && result.Status != validator.Skipped && result.Status != validator.Empty) {
sig, _ := result.Resource.Signature()
o.results = append(o.results, oresult{Filename: result.Resource.Path, Kind: sig.Kind, Name: sig.Name, Version: sig.Version, Status: st, Msg: msg})
o.results = append(o.results, oresult{
Filename: result.Resource.Path,
Kind: sig.Kind,
Name: sig.Name,
Version: sig.Version,
Status: st,
Msg: msg,
ValidationErrors: result.ValidationErrors,
})
}
return nil

View file

@ -3,6 +3,7 @@ package validator
import (
"context"
"errors"
"fmt"
"io"
@ -26,11 +27,21 @@ const (
Empty // resource is empty. Note: is triggered for files starting with a --- separator.
)
type ValidationError struct {
Path string
Message string
}
func (ve *ValidationError) Error() string {
return ve.Message
}
// Result contains the details of the result of a resource validation
type Result struct {
Resource resource.Resource
Err error
Status Status
Resource resource.Resource
Err error
Status Status
ValidationErrors []ValidationError
}
// Validator exposes multiple methods to validate your Kubernetes resources.
@ -181,7 +192,23 @@ func (val *v) ValidateResource(res resource.Resource) Result {
err = schema.Validate(r)
if err != nil {
return Result{Resource: res, Status: Invalid, Err: fmt.Errorf("problem validating schema. Check JSON formatting: %s", err)}
validationErrors := []ValidationError{}
var e *jsonschema.ValidationError
if errors.As(err, &e) {
for _, ve := range e.Causes {
validationErrors = append(validationErrors, ValidationError{
Path: ve.KeywordLocation,
Message: ve.Message,
})
}
}
return Result{
Resource: res,
Status: Invalid,
Err: fmt.Errorf("problem validating schema. Check JSON formatting: %s", err),
ValidationErrors: validationErrors,
}
}
return Result{Resource: res, Status: Valid}