1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-07 00:17:13 +00:00
kyverno/ext/resource/loader/loader.go
Charles-Edouard Brétéché fb530626ba
refactor: move resource loader package to ext (#8780)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2023-10-30 17:27:02 +00:00

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
}