@@ -17,40 +17,63 @@ limitations under the License.
1717package v1beta2
1818
1919import (
20+ "context"
21+ "fmt"
22+
23+ apierrors "k8s.io/apimachinery/pkg/api/errors"
2024 "k8s.io/apimachinery/pkg/runtime"
2125 ctrl "sigs.k8s.io/controller-runtime"
22- "sigs.k8s.io/controller-runtime/pkg/webhook"
2326 "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
2427)
2528
2629// SetupWebhookWithManager will setup the webhooks for the KThreesControlPlane.
2730func (in * KThreesControlPlane ) SetupWebhookWithManager (mgr ctrl.Manager ) error {
2831 return ctrl .NewWebhookManagedBy (mgr ).
2932 For (in ).
33+ WithDefaulter (& KThreesControlPlane {}).
34+ WithValidator (& KThreesControlPlane {}).
3035 Complete ()
3136}
3237
33- // +kubebuilder:webhook:verbs=create;update,path=/validate-controlplane-cluster-x-k8s-io-v1beta2-kthreescontrolplane,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=controlplane.cluster.x-k8s.io,resources=kthreescontrolplane ,versions=v1beta2,name=validation.kthreescontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta2
34- // +kubebuilder:webhook:verbs=create;update,path=/mutate-controlplane-cluster-x-k8s-io-v1beta2-kthreescontrolplane,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=controlplane.cluster.x-k8s.io,resources=kthreescontrolplane ,versions=v1beta2,name=default.kthreescontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta2
38+ // +kubebuilder:webhook:verbs=create;update,path=/validate-controlplane-cluster-x-k8s-io-v1beta2-kthreescontrolplane,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=controlplane.cluster.x-k8s.io,resources=kthreescontrolplanes ,versions=v1beta2,name=validation.kthreescontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1
39+ // +kubebuilder:webhook:verbs=create;update,path=/mutate-controlplane-cluster-x-k8s-io-v1beta2-kthreescontrolplane,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=controlplane.cluster.x-k8s.io,resources=kthreescontrolplanes ,versions=v1beta2,name=default.kthreescontrolplane.controlplane.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1;v1beta1
3540
36- var _ webhook. Defaulter = & KThreesControlPlane {}
37- var _ webhook. Validator = & KThreesControlPlane {}
41+ var _ admission. CustomDefaulter = & KThreesControlPlane {}
42+ var _ admission. CustomValidator = & KThreesControlPlane {}
3843
3944// ValidateCreate will do any extra validation when creating a KThreesControlPlane.
40- func (in * KThreesControlPlane ) ValidateCreate () (admission.Warnings , error ) {
45+ func (in * KThreesControlPlane ) ValidateCreate (_ context. Context , _ runtime. Object ) (admission.Warnings , error ) {
4146 return []string {}, nil
4247}
4348
4449// ValidateUpdate will do any extra validation when updating a KThreesControlPlane.
45- func (in * KThreesControlPlane ) ValidateUpdate (runtime.Object ) (admission.Warnings , error ) {
50+ func (in * KThreesControlPlane ) ValidateUpdate (_ context. Context , _ , _ runtime.Object ) (admission.Warnings , error ) {
4651 return []string {}, nil
4752}
4853
4954// ValidateDelete allows you to add any extra validation when deleting.
50- func (in * KThreesControlPlane ) ValidateDelete () (admission.Warnings , error ) {
55+ func (in * KThreesControlPlane ) ValidateDelete (_ context. Context , _ runtime. Object ) (admission.Warnings , error ) {
5156 return []string {}, nil
5257}
5358
5459// Default will set default values for the KThreesControlPlane.
55- func (in * KThreesControlPlane ) Default () {
60+ func (in * KThreesControlPlane ) Default (_ context.Context , obj runtime.Object ) error {
61+ c , ok := obj .(* KThreesControlPlane )
62+ if ! ok {
63+ return apierrors .NewBadRequest (fmt .Sprintf ("expected a KubeadmConfig but got a %T" , obj ))
64+ }
65+
66+ defaultKThreesControlPlaneSpec (& c .Spec , c .Namespace )
67+ return nil
68+ }
69+
70+ func defaultKThreesControlPlaneSpec (s * KThreesControlPlaneSpec , namespace string ) {
71+ if s .Replicas == nil {
72+ replicas := int32 (1 )
73+ s .Replicas = & replicas
74+ }
75+
76+ if s .MachineTemplate .InfrastructureRef .Namespace == "" {
77+ s .MachineTemplate .InfrastructureRef .Namespace = namespace
78+ }
5679}
0 commit comments