mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-07 00:17:13 +00:00
39 lines
981 B
Go
39 lines
981 B
Go
package loader
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/client-go/openapi"
|
|
"sigs.k8s.io/kubectl-validate/pkg/validator"
|
|
)
|
|
|
|
type Loader interface {
|
|
Load([]byte) (schema.GroupVersionKind, unstructured.Unstructured, error)
|
|
}
|
|
|
|
type loader struct {
|
|
validator *validator.Validator
|
|
}
|
|
|
|
func New(client openapi.Client) (Loader, error) {
|
|
factory, err := validator.New(client)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &loader{
|
|
validator: factory,
|
|
}, nil
|
|
}
|
|
|
|
func (l *loader) Load(document []byte) (schema.GroupVersionKind, unstructured.Unstructured, error) {
|
|
gvk, result, err := l.validator.Parse(document)
|
|
if err != nil {
|
|
return gvk, unstructured.Unstructured{}, fmt.Errorf("failed to parse document (%w)", err)
|
|
}
|
|
if err := l.validator.Validate(result); err != nil {
|
|
return gvk, unstructured.Unstructured{}, fmt.Errorf("failed to validate resource (%w)", err)
|
|
}
|
|
return gvk, *result, nil
|
|
}
|