github.com/ironcore-dev/gardener-extension-provider-ironcore@v0.3.2-0.20240314231816-8336447fb9a0/pkg/apis/ironcore/validation/shoot.go (about) 1 // SPDX-FileCopyrightText: 2022 SAP SE or an SAP affiliate company and IronCore contributors 2 // SPDX-License-Identifier: Apache-2.0 3 4 package validation 5 6 import ( 7 "github.com/gardener/gardener/pkg/apis/core" 8 "github.com/gardener/gardener/pkg/apis/core/helper" 9 validationutils "github.com/gardener/gardener/pkg/utils/validation" 10 apivalidation "k8s.io/apimachinery/pkg/api/validation" 11 "k8s.io/apimachinery/pkg/util/validation/field" 12 ) 13 14 // ValidateNetworking validates the network settings of a Shoot. 15 func ValidateNetworking(networking *core.Networking, fldPath *field.Path) field.ErrorList { 16 allErrs := field.ErrorList{} 17 18 if networking == nil || networking.Nodes == nil { 19 allErrs = append(allErrs, field.Required(fldPath.Child("nodes"), "a nodes CIDR must be provided for ironcore shoots")) 20 } 21 22 return allErrs 23 } 24 25 // ValidateWorkers validates the workers of a Shoot. 26 func ValidateWorkers(workers []core.Worker, fldPath *field.Path) field.ErrorList { 27 allErrs := field.ErrorList{} 28 29 for i, worker := range workers { 30 workerFldPath := fldPath.Index(i) 31 32 if worker.Volume == nil { 33 allErrs = append(allErrs, field.Required(workerFldPath.Child("volume"), "must not be nil")) 34 } else { 35 allErrs = append(allErrs, validateVolume(worker.Volume, workerFldPath.Child("volume"))...) 36 } 37 38 if len(worker.Zones) == 0 { 39 allErrs = append(allErrs, field.Required(workerFldPath.Child("zones"), "at least one zone must be configured")) 40 continue 41 } 42 43 } 44 45 return allErrs 46 } 47 48 func validateVolume(vol *core.Volume, fldPath *field.Path) field.ErrorList { 49 allErrs := field.ErrorList{} 50 if vol.Type == nil { 51 allErrs = append(allErrs, field.Required(fldPath.Child("type"), "must not be empty")) 52 } 53 if vol.VolumeSize == "" { 54 allErrs = append(allErrs, field.Required(fldPath.Child("size"), "must not be empty")) 55 } 56 return allErrs 57 } 58 59 // ValidateWorkersUpdate validates updates on Workers. 60 func ValidateWorkersUpdate(oldWorkers, newWorkers []core.Worker, fldPath *field.Path) field.ErrorList { 61 allErrs := field.ErrorList{} 62 for i, newWorker := range newWorkers { 63 workerFldPath := fldPath.Index(i) 64 oldWorker := helper.FindWorkerByName(oldWorkers, newWorker.Name) 65 66 if oldWorker != nil && validationutils.ShouldEnforceImmutability(newWorker.Zones, oldWorker.Zones) { 67 allErrs = append(allErrs, apivalidation.ValidateImmutableField(newWorker.Zones, oldWorker.Zones, workerFldPath.Child("zones"))...) 68 } 69 } 70 return allErrs 71 }