@@ -18,26 +18,32 @@ package webhook
1818
1919import (
2020 "context"
21+ "fmt"
2122
23+ apierrors "k8s.io/apimachinery/pkg/api/errors"
2224 "k8s.io/apimachinery/pkg/runtime"
25+ operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha1"
2326 ctrl "sigs.k8s.io/controller-runtime"
2427 "sigs.k8s.io/controller-runtime/pkg/webhook"
25-
26- operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha1"
2728)
2829
2930type CoreProviderWebhook struct {}
3031
3132func (r * CoreProviderWebhook ) SetupWebhookWithManager (mgr ctrl.Manager ) error {
3233 return ctrl .NewWebhookManagedBy (mgr ).
3334 WithValidator (r ).
35+ WithDefaulter (r ).
3436 For (& operatorv1.CoreProvider {}).
3537 Complete ()
3638}
3739
38- //+kubebuilder:webhook:verbs=create;update,path=/validate-operator-cluster-x-k8s-io-v1alpha1-coreprovider,mutating=false,failurePolicy=fail,groups=operator.cluster.x-k8s.io,resources=coreproviders,versions=v1alpha1,name=vcoreprovider.kb.io,sideEffects=None,admissionReviewVersions=v1;v1alpha1
40+ //+kubebuilder:webhook:verbs=create;update,path=/validate-operator-cluster-x-k8s-io-v1alpha1-coreprovider,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=operator.cluster.x-k8s.io,resources=coreproviders,versions=v1alpha1,name=vcoreprovider.kb.io,sideEffects=None,admissionReviewVersions=v1;v1beta1
41+ //+kubebuilder:webhook:verbs=create;update,path=/mutate-operator-cluster-x-k8s-io-v1alpha1-coreprovider,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,failurePolicy=fail,groups=operator.cluster.x-k8s.io,resources=coreproviders,versions=v1alpha1,name=vcoreprovider.kb.io,sideEffects=None,admissionReviewVersions=v1;v1beta1
3942
40- var _ webhook.CustomValidator = & CoreProviderWebhook {}
43+ var (
44+ _ webhook.CustomValidator = & CoreProviderWebhook {}
45+ _ webhook.CustomDefaulter = & CoreProviderWebhook {}
46+ )
4147
4248// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
4349func (r * CoreProviderWebhook ) ValidateCreate (ctx context.Context , obj runtime.Object ) error {
@@ -53,3 +59,15 @@ func (r *CoreProviderWebhook) ValidateUpdate(ctx context.Context, oldObj, newObj
5359func (r * CoreProviderWebhook ) ValidateDelete (_ context.Context , obj runtime.Object ) error {
5460 return nil
5561}
62+
63+ // Default implements webhook.Default so a webhook will be registered for the type.
64+ func (r * CoreProviderWebhook ) Default (ctx context.Context , obj runtime.Object ) error {
65+ coreProvider , ok := obj .(* operatorv1.CoreProvider )
66+ if ! ok {
67+ return apierrors .NewBadRequest (fmt .Sprintf ("expected a CoreProvider but got a %T" , obj ))
68+ }
69+
70+ setDefaultProviderSpec (& coreProvider .Spec .ProviderSpec , coreProvider .Namespace )
71+
72+ return nil
73+ }
0 commit comments