@@ -86,20 +86,22 @@ func (r *HetznerCluster) Default(_ context.Context, obj runtime.Object) error {
86
86
return apierrors .NewBadRequest (fmt .Sprintf ("expected an HetznerCluster but got a %T" , obj ))
87
87
}
88
88
89
- if cluster .Spec .HCloudNetwork .Enabled {
90
- if cluster .Spec .HCloudNetwork .ID != nil {
91
- return nil
92
- }
89
+ if ! cluster .Spec .HCloudNetwork .Enabled {
90
+ return nil
91
+ }
93
92
94
- if cluster .Spec .HCloudNetwork .CIDRBlock == nil {
95
- cluster .Spec .HCloudNetwork .CIDRBlock = ptr .To (DefaultCIDRBlock )
96
- }
97
- if cluster .Spec .HCloudNetwork .SubnetCIDRBlock == nil {
98
- cluster .Spec .HCloudNetwork .SubnetCIDRBlock = ptr .To (DefaultSubnetCIDRBlock )
99
- }
100
- if cluster .Spec .HCloudNetwork .NetworkZone == nil {
101
- cluster .Spec .HCloudNetwork .NetworkZone = ptr.To [HCloudNetworkZone ](DefaultNetworkZone )
102
- }
93
+ if cluster .Spec .HCloudNetwork .ID != nil {
94
+ return nil
95
+ }
96
+
97
+ if cluster .Spec .HCloudNetwork .CIDRBlock == nil {
98
+ cluster .Spec .HCloudNetwork .CIDRBlock = ptr .To (DefaultCIDRBlock )
99
+ }
100
+ if cluster .Spec .HCloudNetwork .SubnetCIDRBlock == nil {
101
+ cluster .Spec .HCloudNetwork .SubnetCIDRBlock = ptr .To (DefaultSubnetCIDRBlock )
102
+ }
103
+ if cluster .Spec .HCloudNetwork .NetworkZone == nil {
104
+ cluster .Spec .HCloudNetwork .NetworkZone = ptr.To [HCloudNetworkZone ](DefaultNetworkZone )
103
105
}
104
106
105
107
return nil
@@ -250,12 +252,24 @@ func (r *HetznerCluster) ValidateUpdate(old runtime.Object) (admission.Warnings,
250
252
return nil , apierrors .NewBadRequest (fmt .Sprintf ("expected an HetznerCluster but got a %T" , old ))
251
253
}
252
254
253
- if ! reflect . DeepEqual ( oldC .Spec .HCloudNetwork .Enabled , r .Spec .HCloudNetwork .Enabled ) {
255
+ if oldC .Spec .HCloudNetwork .Enabled != r .Spec .HCloudNetwork .Enabled {
254
256
allErrs = append (allErrs ,
255
257
field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "enabled" ), r .Spec .HCloudNetwork .Enabled , "field is immutable" ),
256
258
)
257
259
}
258
260
261
+ if ! oldC .Spec .HCloudNetwork .Enabled {
262
+ // If the network is disabled check that all other network related fields are empty.
263
+ if r .Spec .HCloudNetwork .ID != nil {
264
+ allErrs = append (allErrs ,
265
+ field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "id" ), oldC .Spec .HCloudNetwork .ID , "field must be empty" ),
266
+ )
267
+ }
268
+ if errs := areCIDRsAndNetworkZoneEmpty (r .Spec .HCloudNetwork ); errs != nil {
269
+ allErrs = append (allErrs , errs ... )
270
+ }
271
+ }
272
+
259
273
if oldC .Spec .HCloudNetwork .Enabled {
260
274
// Only allow updating the network ID when it was not set previously. This makes it possible to e.g. adopt the
261
275
// network that was created initially by CAPH.
@@ -265,28 +279,22 @@ func (r *HetznerCluster) ValidateUpdate(old runtime.Object) (admission.Warnings,
265
279
)
266
280
}
267
281
268
- if r .Spec .HCloudNetwork .ID != nil {
269
- if errs := areCIDRsAndNetworkZoneEmpty (r .Spec .HCloudNetwork ); errs != nil {
270
- allErrs = append (allErrs , errs ... )
271
- }
272
- } else {
273
- if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .CIDRBlock , r .Spec .HCloudNetwork .CIDRBlock ) {
274
- allErrs = append (allErrs ,
275
- field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "cidrBlock" ), r .Spec .HCloudNetwork .CIDRBlock , "field is immutable" ),
276
- )
277
- }
282
+ if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .CIDRBlock , r .Spec .HCloudNetwork .CIDRBlock ) {
283
+ allErrs = append (allErrs ,
284
+ field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "cidrBlock" ), r .Spec .HCloudNetwork .CIDRBlock , "field is immutable" ),
285
+ )
286
+ }
278
287
279
- if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .SubnetCIDRBlock , r .Spec .HCloudNetwork .SubnetCIDRBlock ) {
280
- allErrs = append (allErrs ,
281
- field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "subnetCIDRBlock" ), r .Spec .HCloudNetwork .SubnetCIDRBlock , "field is immutable" ),
282
- )
283
- }
288
+ if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .SubnetCIDRBlock , r .Spec .HCloudNetwork .SubnetCIDRBlock ) {
289
+ allErrs = append (allErrs ,
290
+ field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "subnetCIDRBlock" ), r .Spec .HCloudNetwork .SubnetCIDRBlock , "field is immutable" ),
291
+ )
292
+ }
284
293
285
- if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .NetworkZone , r .Spec .HCloudNetwork .NetworkZone ) {
286
- allErrs = append (allErrs ,
287
- field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "networkZone" ), r .Spec .HCloudNetwork .NetworkZone , "field is immutable" ),
288
- )
289
- }
294
+ if ! reflect .DeepEqual (oldC .Spec .HCloudNetwork .NetworkZone , r .Spec .HCloudNetwork .NetworkZone ) {
295
+ allErrs = append (allErrs ,
296
+ field .Invalid (field .NewPath ("spec" , "hcloudNetwork" , "networkZone" ), r .Spec .HCloudNetwork .NetworkZone , "field is immutable" ),
297
+ )
290
298
}
291
299
}
292
300
@@ -304,14 +312,14 @@ func (r *HetznerCluster) ValidateUpdate(old runtime.Object) (admission.Warnings,
304
312
}
305
313
306
314
// Load balancer enabled/disabled is immutable
307
- if ! reflect . DeepEqual ( oldC .Spec .ControlPlaneLoadBalancer .Enabled , r .Spec .ControlPlaneLoadBalancer .Enabled ) {
315
+ if oldC .Spec .ControlPlaneLoadBalancer .Enabled != r .Spec .ControlPlaneLoadBalancer .Enabled {
308
316
allErrs = append (allErrs ,
309
317
field .Invalid (field .NewPath ("spec" , "controlPlaneLoadBalancer" , "enabled" ), r .Spec .ControlPlaneLoadBalancer .Enabled , "field is immutable" ),
310
318
)
311
319
}
312
320
313
321
// Load balancer region and port are immutable
314
- if ! reflect . DeepEqual ( oldC .Spec .ControlPlaneLoadBalancer .Port , r .Spec .ControlPlaneLoadBalancer .Port ) {
322
+ if oldC .Spec .ControlPlaneLoadBalancer .Port != r .Spec .ControlPlaneLoadBalancer .Port {
315
323
allErrs = append (allErrs ,
316
324
field .Invalid (field .NewPath ("spec" , "controlPlaneLoadBalancer" , "port" ), r .Spec .ControlPlaneLoadBalancer .Port , "field is immutable" ),
317
325
)
0 commit comments