1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/pkg/cel/resource/openapi.go
Charles-Edouard Brétéché 61f091ccab
chore: add cel unit tests (#12232)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2025-02-24 14:44:46 +01:00

31 lines
938 B
Go

package resource
import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/cel"
"k8s.io/apiserver/pkg/cel/common"
"k8s.io/apiserver/pkg/cel/openapi"
"k8s.io/kube-openapi/pkg/validation/spec"
)
// https://pkg.go.dev/k8s.io/apiserver@v0.32.0/pkg/cel/openapi/resolver#ClientDiscoveryResolver
type SchemaClient interface {
ResolveSchema(gvk schema.GroupVersionKind) (*spec.Schema, error)
}
type OpenAPITypeResolver struct {
client SchemaClient
}
func (o *OpenAPITypeResolver) GetDeclProvier(gvk schema.GroupVersionKind, typeName string) (*cel.DeclTypeProvider, error) {
spec, err := o.client.ResolveSchema(gvk)
if err != nil {
return nil, err
}
schema := common.SchemaDeclType(&openapi.Schema{Schema: spec}, true)
return cel.NewDeclTypeProvider(schema.MaybeAssignTypeName(typeName)), nil
}
func NewOpenAPITypeResolver(client SchemaClient) *OpenAPITypeResolver {
return &OpenAPITypeResolver{client: client}
}