1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-09 17:37:12 +00:00
kyverno/pkg/engine/api/exception.go
Mariam Fahmy 75a10ac550
feat: introduce generic exception interface (#12244)
Signed-off-by: Mariam Fahmy <mariam.fahmy@nirmata.com>
2025-02-25 16:11:19 +00:00

68 lines
1.8 KiB
Go

package api
import (
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// GenericException abstracts the exception type (PolicyException, CELPolicyException)
type GenericException interface {
metav1.Object
// GetAPIVersion returns policy API version
GetAPIVersion() string
// GetKind returns policy kind
GetKind() string
// AsException returns the policy exception
AsException() *kyvernov2.PolicyException
// AsCELException returns the CEL policy exception
AsCELException() *policiesv1alpha1.CELPolicyException
}
type genericException struct {
metav1.Object
PolicyException *kyvernov2.PolicyException
CELPolicyException *policiesv1alpha1.CELPolicyException
}
func (p *genericException) AsException() *kyvernov2.PolicyException {
return p.PolicyException
}
func (p *genericException) AsCELException() *policiesv1alpha1.CELPolicyException {
return p.CELPolicyException
}
func (p *genericException) GetAPIVersion() string {
switch {
case p.PolicyException != nil:
return kyvernov2.GroupVersion.String()
case p.CELPolicyException != nil:
return policiesv1alpha1.GroupVersion.String()
}
return ""
}
func (p *genericException) GetKind() string {
switch {
case p.PolicyException != nil:
return "PolicyException"
case p.CELPolicyException != nil:
return "CELPolicyException"
}
return ""
}
func NewPolicyException(polex *kyvernov2.PolicyException) GenericException {
return &genericException{
Object: polex,
PolicyException: polex,
}
}
func NewCELPolicyException(polex *policiesv1alpha1.CELPolicyException) GenericException {
return &genericException{
Object: polex,
CELPolicyException: polex,
}
}