@@ -21,13 +21,14 @@ import (
2121 "fmt"
2222 "reflect"
2323
24+ "k8s.io/utils/ptr"
25+
2426 "github.com/google/go-cmp/cmp"
2527 "github.com/pkg/errors"
2628 apierrors "k8s.io/apimachinery/pkg/api/errors"
2729 "k8s.io/apimachinery/pkg/runtime"
2830 "k8s.io/apimachinery/pkg/util/validation/field"
2931 "k8s.io/klog/v2"
30- "k8s.io/utils/ptr"
3132 ctrl "sigs.k8s.io/controller-runtime"
3233 "sigs.k8s.io/controller-runtime/pkg/webhook"
3334 "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
@@ -60,7 +61,7 @@ type awsManagedMachinePoolWebhook struct{}
6061var _ webhook.CustomDefaulter = & awsManagedMachinePoolWebhook {}
6162var _ webhook.CustomValidator = & awsManagedMachinePoolWebhook {}
6263
63- func (r * AWSManagedMachinePool ) validateScaling ( ) field.ErrorList {
64+ func validateScaling (r * AWSManagedMachinePool ) field.ErrorList {
6465 var allErrs field.ErrorList
6566 if r .Spec .Scaling != nil { //nolint:nestif
6667 minField := field .NewPath ("spec" , "scaling" , "minSize" )
@@ -85,7 +86,7 @@ func (r *AWSManagedMachinePool) validateScaling() field.ErrorList {
8586 return allErrs
8687}
8788
88- func (r * AWSManagedMachinePool ) validateNodegroupUpdateConfig ( ) field.ErrorList {
89+ func validateNodegroupUpdateConfig (r * AWSManagedMachinePool ) field.ErrorList {
8990 var allErrs field.ErrorList
9091
9192 if r .Spec .UpdateConfig != nil {
@@ -106,7 +107,7 @@ func (r *AWSManagedMachinePool) validateNodegroupUpdateConfig() field.ErrorList
106107 return allErrs
107108}
108109
109- func (r * AWSManagedMachinePool ) validateRemoteAccess ( ) field.ErrorList {
110+ func validateRemoteAccess (r * AWSManagedMachinePool ) field.ErrorList {
110111 var allErrs field.ErrorList
111112 if r .Spec .RemoteAccess == nil {
112113 return allErrs
@@ -124,7 +125,7 @@ func (r *AWSManagedMachinePool) validateRemoteAccess() field.ErrorList {
124125 return allErrs
125126}
126127
127- func (r * AWSManagedMachinePool ) validateLaunchTemplate ( ) field.ErrorList {
128+ func validateLaunchTemplate (r * AWSManagedMachinePool ) field.ErrorList {
128129 var allErrs field.ErrorList
129130 if r .Spec .AWSLaunchTemplate == nil {
130131 return allErrs
@@ -162,16 +163,16 @@ func (*awsManagedMachinePoolWebhook) ValidateCreate(_ context.Context, obj runti
162163 if r .Spec .EKSNodegroupName == "" {
163164 allErrs = append (allErrs , field .Required (field .NewPath ("spec.eksNodegroupName" ), "eksNodegroupName is required" ))
164165 }
165- if errs := r . validateScaling (); errs != nil || len (errs ) == 0 {
166+ if errs := validateScaling (r ); errs != nil || len (errs ) == 0 {
166167 allErrs = append (allErrs , errs ... )
167168 }
168- if errs := r . validateRemoteAccess (); len (errs ) > 0 {
169+ if errs := validateRemoteAccess (r ); len (errs ) > 0 {
169170 allErrs = append (allErrs , errs ... )
170171 }
171- if errs := r . validateNodegroupUpdateConfig (); len (errs ) > 0 {
172+ if errs := validateNodegroupUpdateConfig (r ); len (errs ) > 0 {
172173 allErrs = append (allErrs , errs ... )
173174 }
174- if errs := r . validateLaunchTemplate (); len (errs ) > 0 {
175+ if errs := validateLaunchTemplate (r ); len (errs ) > 0 {
175176 allErrs = append (allErrs , errs ... )
176177 }
177178 if errs := r .validateLifecycleHooks (); len (errs ) > 0 {
@@ -207,16 +208,16 @@ func (*awsManagedMachinePoolWebhook) ValidateUpdate(_ context.Context, oldObj, n
207208 }
208209
209210 var allErrs field.ErrorList
210- allErrs = append (allErrs , r . validateImmutable (oldPool )... )
211+ allErrs = append (allErrs , validateAMPImmutable (oldPool , r )... )
211212 allErrs = append (allErrs , r .Spec .AdditionalTags .Validate ()... )
212213
213- if errs := r . validateScaling (); errs != nil || len (errs ) == 0 {
214+ if errs := validateScaling (r ); errs != nil || len (errs ) == 0 {
214215 allErrs = append (allErrs , errs ... )
215216 }
216- if errs := r . validateNodegroupUpdateConfig (); len (errs ) > 0 {
217+ if errs := validateNodegroupUpdateConfig (r ); len (errs ) > 0 {
217218 allErrs = append (allErrs , errs ... )
218219 }
219- if errs := r . validateLaunchTemplate (); len (errs ) > 0 {
220+ if errs := validateLaunchTemplate (r ); len (errs ) > 0 {
220221 allErrs = append (allErrs , errs ... )
221222 }
222223 if errs := r .validateLifecycleHooks (); len (errs ) > 0 {
@@ -239,7 +240,7 @@ func (*awsManagedMachinePoolWebhook) ValidateDelete(_ context.Context, _ runtime
239240 return nil , nil
240241}
241242
242- func ( r * AWSManagedMachinePool ) validateImmutable ( old * AWSManagedMachinePool ) field.ErrorList {
243+ func validateAMPImmutable ( old * AWSManagedMachinePool , current * AWSManagedMachinePool ) field.ErrorList {
243244 var allErrs field.ErrorList
244245
245246 appendErrorIfMutated := func (old , update interface {}, name string ) {
@@ -260,25 +261,25 @@ func (r *AWSManagedMachinePool) validateImmutable(old *AWSManagedMachinePool) fi
260261 }
261262
262263 if old .Spec .EKSNodegroupName != "" {
263- appendErrorIfMutated (old .Spec .EKSNodegroupName , r .Spec .EKSNodegroupName , "eksNodegroupName" )
264- }
265- appendErrorIfMutated (old .Spec .SubnetIDs , r .Spec .SubnetIDs , "subnetIDs" )
266- appendErrorIfSetAndMutated (old .Spec .RoleName , r .Spec .RoleName , "roleName" )
267- appendErrorIfMutated (old .Spec .DiskSize , r .Spec .DiskSize , "diskSize" )
268- appendErrorIfMutated (old .Spec .AMIType , r .Spec .AMIType , "amiType" )
269- appendErrorIfMutated (old .Spec .RemoteAccess , r .Spec .RemoteAccess , "remoteAccess" )
270- appendErrorIfSetAndMutated (old .Spec .CapacityType , r .Spec .CapacityType , "capacityType" )
271- appendErrorIfMutated (old .Spec .AvailabilityZones , r .Spec .AvailabilityZones , "availabilityZones" )
272- appendErrorIfMutated (old .Spec .AvailabilityZoneSubnetType , r .Spec .AvailabilityZoneSubnetType , "availabilityZoneSubnetType" )
273- if (old .Spec .AWSLaunchTemplate != nil && r .Spec .AWSLaunchTemplate == nil ) ||
274- (old .Spec .AWSLaunchTemplate == nil && r .Spec .AWSLaunchTemplate != nil ) {
264+ appendErrorIfMutated (old .Spec .EKSNodegroupName , current .Spec .EKSNodegroupName , "eksNodegroupName" )
265+ }
266+ appendErrorIfMutated (old .Spec .SubnetIDs , current .Spec .SubnetIDs , "subnetIDs" )
267+ appendErrorIfSetAndMutated (old .Spec .RoleName , current .Spec .RoleName , "roleName" )
268+ appendErrorIfMutated (old .Spec .DiskSize , current .Spec .DiskSize , "diskSize" )
269+ appendErrorIfMutated (old .Spec .AMIType , current .Spec .AMIType , "amiType" )
270+ appendErrorIfMutated (old .Spec .RemoteAccess , current .Spec .RemoteAccess , "remoteAccess" )
271+ appendErrorIfSetAndMutated (old .Spec .CapacityType , current .Spec .CapacityType , "capacityType" )
272+ appendErrorIfMutated (old .Spec .AvailabilityZones , current .Spec .AvailabilityZones , "availabilityZones" )
273+ appendErrorIfMutated (old .Spec .AvailabilityZoneSubnetType , current .Spec .AvailabilityZoneSubnetType , "availabilityZoneSubnetType" )
274+ if (old .Spec .AWSLaunchTemplate != nil && current .Spec .AWSLaunchTemplate == nil ) ||
275+ (old .Spec .AWSLaunchTemplate == nil && current .Spec .AWSLaunchTemplate != nil ) {
275276 allErrs = append (
276277 allErrs ,
277278 field .Invalid (field .NewPath ("spec" , "AWSLaunchTemplate" ), old .Spec .AWSLaunchTemplate , "field is immutable" ),
278279 )
279280 }
280- if old .Spec .AWSLaunchTemplate != nil && r .Spec .AWSLaunchTemplate != nil {
281- appendErrorIfMutated (old .Spec .AWSLaunchTemplate .Name , r .Spec .AWSLaunchTemplate .Name , "awsLaunchTemplate.name" )
281+ if old .Spec .AWSLaunchTemplate != nil && current .Spec .AWSLaunchTemplate != nil {
282+ appendErrorIfMutated (old .Spec .AWSLaunchTemplate .Name , current .Spec .AWSLaunchTemplate .Name , "awsLaunchTemplate.name" )
282283 }
283284
284285 return allErrs
@@ -306,9 +307,13 @@ func (*awsManagedMachinePoolWebhook) Default(_ context.Context, obj runtime.Obje
306307 }
307308
308309 if r .Spec .UpdateConfig == nil {
309- r .Spec .UpdateConfig = & UpdateConfig {
310- MaxUnavailable : ptr.To [int ](1 ),
311- }
310+ r .Spec .UpdateConfig = defaultManagedMachinePoolUpdateConfig ()
312311 }
313312 return nil
314313}
314+
315+ func defaultManagedMachinePoolUpdateConfig () * UpdateConfig {
316+ return & UpdateConfig {
317+ MaxUnavailable : ptr.To [int ](1 ),
318+ }
319+ }
0 commit comments