1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/cmd/cli/kubectl-kyverno/resource/loader/loader.go
gcp-cherry-pick-bot[bot] a3d4c05a8b
feat: add cli resource loader package (#8488) (#8490)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2023-09-21 12:36:30 +00:00

39 lines
929 B
Go

package loader
import (
"fmt"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/client-go/openapi"
"sigs.k8s.io/kubectl-validate/pkg/validator"
)
type Loader interface {
Load([]byte) (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) (unstructured.Unstructured, error) {
_, result, err := l.validator.Parse(document)
if err != nil {
return unstructured.Unstructured{}, fmt.Errorf("failed to parse document (%w)", err)
}
// TODO: remove DeepCopy when fixed upstream
if err := l.validator.Validate(result.DeepCopy()); err != nil {
return unstructured.Unstructured{}, fmt.Errorf("failed to validate resource (%w)", err)
}
return *result, nil
}