mirror of
https://github.com/yannh/kubeconform.git
synced 2026-02-18 17:37:03 +00:00
Try to expose JSON paths
This commit is contained in:
parent
ee7c498580
commit
e56c6bee81
2 changed files with 47 additions and 11 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Reference in a new issue