github.com/kotalco/kotal@v0.3.0/apis/near/v1alpha1/node_validation_webhook.go (about) 1 package v1alpha1 2 3 import ( 4 apierrors "k8s.io/apimachinery/pkg/api/errors" 5 "k8s.io/apimachinery/pkg/runtime" 6 "k8s.io/apimachinery/pkg/runtime/schema" 7 "k8s.io/apimachinery/pkg/util/validation/field" 8 "sigs.k8s.io/controller-runtime/pkg/webhook" 9 "sigs.k8s.io/controller-runtime/pkg/webhook/admission" 10 ) 11 12 // +kubebuilder:webhook:verbs=create;update,path=/validate-near-kotal-io-v1alpha1-node,mutating=false,failurePolicy=fail,groups=near.kotal.io,resources=nodes,versions=v1alpha1,name=validate-near-v1alpha1-node.kb.io,sideEffects=None,admissionReviewVersions=v1 13 14 var _ webhook.Validator = &Node{} 15 16 // ValidateCreate implements webhook.Validator so a webhook will be registered for the type 17 func (n *Node) ValidateCreate() (admission.Warnings, error) { 18 var allErrors field.ErrorList 19 20 nodelog.Info("validate create", "name", n.Name) 21 22 allErrors = append(allErrors, n.Spec.Resources.ValidateCreate()...) 23 24 if len(allErrors) == 0 { 25 return nil, nil 26 } 27 28 return nil, apierrors.NewInvalid(schema.GroupKind{}, n.Name, allErrors) 29 } 30 31 // ValidateUpdate implements webhook.Validator so a webhook will be registered for the type 32 func (n *Node) ValidateUpdate(old runtime.Object) (admission.Warnings, error) { 33 var allErrors field.ErrorList 34 oldNode := old.(*Node) 35 36 nodelog.Info("validate update", "name", n.Name) 37 38 allErrors = append(allErrors, n.Spec.Resources.ValidateUpdate(&oldNode.Spec.Resources)...) 39 40 if n.Spec.Network != oldNode.Spec.Network { 41 err := field.Invalid(field.NewPath("spec").Child("network"), n.Spec.Network, "field is immutable") 42 allErrors = append(allErrors, err) 43 } 44 45 if len(allErrors) == 0 { 46 return nil, nil 47 } 48 49 return nil, apierrors.NewInvalid(schema.GroupKind{}, n.Name, allErrors) 50 } 51 52 // ValidateDelete implements webhook.Validator so a webhook will be registered for the type 53 func (n *Node) ValidateDelete() (admission.Warnings, error) { 54 nodelog.Info("validate delete", "name", n.Name) 55 56 return nil, nil 57 }