@@ -34,36 +34,19 @@ import (
34
34
)
35
35
36
36
// +kubebuilder:webhook:verbs=create;update,path=/validate-vmware-infrastructure-cluster-x-k8s-io-v1beta1-vspherecluster,mutating=false,failurePolicy=fail,matchPolicy=Equivalent,groups=vmware.infrastructure.cluster.x-k8s.io,resources=vsphereclusters,versions=v1beta1,name=validation.vspherecluster.vmware.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1
37
- // +kubebuilder:webhook:verbs=create;update,path=/mutate-vmware-infrastructure-cluster-x-k8s-io-v1beta1-vspherecluster,mutating=true,failurePolicy=fail,matchPolicy=Equivalent,groups=vmware.infrastructure.cluster.x-k8s.io,resources=vsphereclusters,versions=v1beta1,name=default.vspherecluster.vmware.infrastructure.cluster.x-k8s.io,sideEffects=None,admissionReviewVersions=v1beta1
38
37
39
38
// VSphereClusterWebhook implements a validation and defaulting webhook for VSphereCluster.
40
39
type VSphereClusterWebhook struct {}
41
40
42
41
var _ webhook.CustomValidator = & VSphereClusterWebhook {}
43
- var _ webhook.CustomDefaulter = & VSphereClusterWebhook {}
44
42
45
43
func (webhook * VSphereClusterWebhook ) SetupWebhookWithManager (mgr ctrl.Manager ) error {
46
44
return ctrl .NewWebhookManagedBy (mgr ).
47
45
For (& vmwarev1.VSphereCluster {}).
48
46
WithValidator (webhook ).
49
- WithDefaulter (webhook ).
50
47
Complete ()
51
48
}
52
49
53
- // Default implements webhook.Defaulter so a webhook will be registered for the type.
54
- func (webhook * VSphereClusterWebhook ) Default (_ context.Context , newRaw runtime.Object ) error {
55
- newTyped , ok := newRaw .(* vmwarev1.VSphereCluster )
56
- if ! ok {
57
- return apierrors .NewBadRequest (fmt .Sprintf ("expected a VSphereCluster but got a %T" , newRaw ))
58
- }
59
-
60
- if newTyped .Spec .Placement .WorkerAntiAffinity .Mode == "" {
61
- newTyped .Spec .Placement .WorkerAntiAffinity .Mode = vmwarev1 .VSphereClusterWorkerAntiAffinityModeCluster
62
- }
63
-
64
- return nil
65
- }
66
-
67
50
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
68
51
func (webhook * VSphereClusterWebhook ) ValidateCreate (_ context.Context , newRaw runtime.Object ) (admission.Warnings , error ) {
69
52
var allErrs field.ErrorList
@@ -77,7 +60,7 @@ func (webhook *VSphereClusterWebhook) ValidateCreate(_ context.Context, newRaw r
77
60
78
61
if ! feature .Gates .Enabled (feature .WorkerAntiAffinity ) {
79
62
// Cluster mode is not allowed without WorkerAntiAffinity being enabled.
80
- if newSpec .Placement .WorkerAntiAffinity .Mode == vmwarev1 .VSphereClusterWorkerAntiAffinityModeMachineDeployment {
63
+ if newSpec .Placement != nil && newSpec . Placement . WorkerAntiAffinity != nil && newSpec . Placement .WorkerAntiAffinity .Mode == vmwarev1 .VSphereClusterWorkerAntiAffinityModeMachineDeployment {
81
64
allErrs = append (allErrs , field .Forbidden (field .NewPath ("spec" , "placement" , "workerAntiAffinity" , "mode" ), "cannot be set to Cluster with feature-gate WorkerAntiAffinity being disabled" ))
82
65
}
83
66
}
@@ -98,7 +81,7 @@ func (webhook *VSphereClusterWebhook) ValidateUpdate(_ context.Context, _ runtim
98
81
99
82
if ! feature .Gates .Enabled (feature .WorkerAntiAffinity ) {
100
83
// Cluster mode is not allowed without WorkerAntiAffinity being enabled.
101
- if newSpec .Placement .WorkerAntiAffinity .Mode == vmwarev1 .VSphereClusterWorkerAntiAffinityModeMachineDeployment {
84
+ if newSpec .Placement != nil && newSpec . Placement . WorkerAntiAffinity != nil && newSpec . Placement .WorkerAntiAffinity .Mode == vmwarev1 .VSphereClusterWorkerAntiAffinityModeMachineDeployment {
102
85
allErrs = append (allErrs , field .Forbidden (field .NewPath ("spec" , "placement" , "workerAntiAffinity" , "mode" ), "cannot be set to Cluster with feature-gate WorkerAntiAffinity being disabled" ))
103
86
}
104
87
}
0 commit comments