99 "time"
1010
1111 imv1 "github.com/kyma-project/infrastructure-manager/api/v1"
12+ pkg "github.com/kyma-project/kyma-environment-broker/common/runtime"
1213 "github.com/kyma-project/kyma-environment-broker/internal"
1314 "github.com/kyma-project/kyma-environment-broker/internal/broker"
1415 kebError "github.com/kyma-project/kyma-environment-broker/internal/error"
@@ -80,12 +81,7 @@ func (s *UpdateRuntimeStep) Run(operation internal.Operation, log *slog.Logger)
8081 return s .operationManager .OperationFailed (operation , fmt .Sprintf ("while calculating plan specific values: %s" , err ), err , log )
8182 }
8283
83- currentAdditionalWorkers := make (map [string ]gardener.Worker )
84- if runtime .Spec .Shoot .Provider .AdditionalWorkers != nil {
85- for _ , worker := range * runtime .Spec .Shoot .Provider .AdditionalWorkers {
86- currentAdditionalWorkers [worker .Name ] = worker
87- }
88- }
84+ currentAdditionalWorkers := s .getCurrentAdditionalWorkers (runtime )
8985
9086 additionalWorkers , err := s .workersProvider .CreateAdditionalWorkers (values , currentAdditionalWorkers , operation .UpdatingParameters .AdditionalWorkerNodePools ,
9187 runtime .Spec .Shoot .Provider .Workers [0 ].Zones , operation .ProvisioningParameters .PlanID , operation .DiscoveredZones , log )
@@ -97,96 +93,42 @@ func (s *UpdateRuntimeStep) Run(operation internal.Operation, log *slog.Logger)
9793
9894 if oidc := operation .UpdatingParameters .OIDC ; oidc != nil {
9995 if oidc .List != nil {
100- oidcConfigs := make ([]imv1.OIDCConfig , 0 )
101- for _ , oidcConfig := range oidc .List {
102- requiredClaims := make (map [string ]string )
103- for _ , claim := range oidcConfig .RequiredClaims {
104- parts := strings .SplitN (claim , "=" , 2 )
105- if len (parts ) == 2 {
106- requiredClaims [parts [0 ]] = parts [1 ]
107- }
108- }
109- oidcConfigObj := imv1.OIDCConfig {
110- OIDCConfig : gardener.OIDCConfig {
111- ClientID : & oidcConfig .ClientID ,
112- IssuerURL : & oidcConfig .IssuerURL ,
113- SigningAlgs : oidcConfig .SigningAlgs ,
114- GroupsClaim : & oidcConfig .GroupsClaim ,
115- UsernamePrefix : & oidcConfig .UsernamePrefix ,
116- UsernameClaim : & oidcConfig .UsernameClaim ,
117- RequiredClaims : requiredClaims ,
118- GroupsPrefix : & oidcConfig .GroupsPrefix ,
119- },
120- }
121- oidcConfigObj .JWKS , _ = base64 .StdEncoding .DecodeString (oidcConfig .EncodedJwksArray )
122- oidcConfigs = append (oidcConfigs , oidcConfigObj )
123-
124- }
125- runtime .Spec .Shoot .Kubernetes .KubeAPIServer .AdditionalOidcConfig = & oidcConfigs
96+ runtime .Spec .Shoot .Kubernetes .KubeAPIServer .AdditionalOidcConfig = s .getOIDCConfigs (oidc )
12697 } else if dto := oidc .OIDCConfigDTO ; dto != nil {
12798 if runtime .Spec .Shoot .Kubernetes .KubeAPIServer .AdditionalOidcConfig == nil {
12899 runtime .Spec .Shoot .Kubernetes .KubeAPIServer .AdditionalOidcConfig = & []imv1.OIDCConfig {{}}
129100 }
130101 config := & (* runtime .Spec .Shoot .Kubernetes .KubeAPIServer .AdditionalOidcConfig )[0 ]
131- if len (dto .SigningAlgs ) > 0 {
132- config .SigningAlgs = dto .SigningAlgs
133- }
134- if dto .ClientID != "" {
135- config .ClientID = & dto .ClientID
136- }
137- if dto .IssuerURL != "" {
138- config .IssuerURL = & dto .IssuerURL
139- }
140- if dto .GroupsClaim != "" {
141- config .GroupsClaim = & dto .GroupsClaim
142- }
143- if dto .UsernamePrefix != "" {
144- config .UsernamePrefix = & dto .UsernamePrefix
145- }
146- if dto .UsernameClaim != "" {
147- config .UsernameClaim = & dto .UsernameClaim
148- }
149- if dto .GroupsPrefix != "" {
150- config .GroupsPrefix = & dto .GroupsPrefix
102+ assignIfNotEmpty := func (target * * string , value string ) {
103+ if value != "" {
104+ * target = & value
105+ }
151106 }
107+
108+ config .SigningAlgs = dto .SigningAlgs
109+ assignIfNotEmpty (& config .ClientID , dto .ClientID )
110+ assignIfNotEmpty (& config .IssuerURL , dto .IssuerURL )
111+ assignIfNotEmpty (& config .GroupsClaim , dto .GroupsClaim )
112+ assignIfNotEmpty (& config .UsernamePrefix , dto .UsernamePrefix )
113+ assignIfNotEmpty (& config .UsernameClaim , dto .UsernameClaim )
114+ assignIfNotEmpty (& config .GroupsPrefix , dto .GroupsPrefix )
115+
152116 if len (dto .RequiredClaims ) > 0 {
153- if len (dto .RequiredClaims ) == 1 && dto .RequiredClaims [0 ] == "-" {
154- config .RequiredClaims = map [string ]string {}
155- } else {
156- requiredClaims := make (map [string ]string )
157- for _ , claim := range dto .RequiredClaims {
158- parts := strings .SplitN (claim , "=" , 2 )
159- if len (parts ) == 2 {
160- requiredClaims [parts [0 ]] = parts [1 ]
161- }
162- }
163- config .RequiredClaims = requiredClaims
164- }
117+ config .RequiredClaims = s .getRequiredClaims (dto )
165118 }
166- if dto .EncodedJwksArray == "-" {
119+
120+ switch dto .EncodedJwksArray {
121+ case "-" :
167122 config .JWKS = nil
168- } else if dto .EncodedJwksArray != "" {
123+ case "" :
124+ // Do nothing
125+ default :
169126 config .JWKS , _ = base64 .StdEncoding .DecodeString (dto .EncodedJwksArray )
170127 }
171128 }
172129 }
173130
174- // operation.ProvisioningParameters were calculated and joined across provisioning and all update operations
175- if len (operation .ProvisioningParameters .Parameters .RuntimeAdministrators ) != 0 {
176- // prepare new admins list for existing runtime
177- newAdministrators := make ([]string , 0 , len (operation .ProvisioningParameters .Parameters .RuntimeAdministrators ))
178- newAdministrators = append (newAdministrators , operation .ProvisioningParameters .Parameters .RuntimeAdministrators ... )
179-
180- runtime .Spec .Security .Administrators = newAdministrators
181- } else {
182- if operation .ProvisioningParameters .ErsContext .UserID != "" {
183- // get default admin (user_id from provisioning operation)
184- runtime .Spec .Security .Administrators = []string {operation .ProvisioningParameters .ErsContext .UserID }
185- } else {
186- // some old clusters does not have a user_id
187- runtime .Spec .Security .Administrators = []string {}
188- }
189- }
131+ runtime .Spec .Security .Administrators = s .getAdministrators (operation )
190132
191133 external := broker .IsExternalLicenseType (operation .ProvisioningParameters .ErsContext )
192134 runtime .Spec .Security .Networking .Filter .Egress .Enabled = ! external
@@ -210,3 +152,77 @@ func (s *UpdateRuntimeStep) Run(operation internal.Operation, log *slog.Logger)
210152
211153 return operation , 0 , nil
212154}
155+
156+ func (s * UpdateRuntimeStep ) getOIDCConfigs (oidc * pkg.OIDCConnectDTO ) * []imv1.OIDCConfig {
157+ oidcConfigs := make ([]imv1.OIDCConfig , 0 )
158+ for _ , oidcConfig := range oidc .List {
159+ oidcConfigs = append (oidcConfigs , s .getOIDCConfigObject (oidcConfig ))
160+ }
161+ return & oidcConfigs
162+ }
163+
164+ func (s * UpdateRuntimeStep ) getCurrentAdditionalWorkers (runtime imv1.Runtime ) map [string ]gardener.Worker {
165+ currentAdditionalWorkers := make (map [string ]gardener.Worker )
166+ if runtime .Spec .Shoot .Provider .AdditionalWorkers != nil {
167+ for _ , worker := range * runtime .Spec .Shoot .Provider .AdditionalWorkers {
168+ currentAdditionalWorkers [worker .Name ] = worker
169+ }
170+ }
171+ return currentAdditionalWorkers
172+ }
173+
174+ func (s * UpdateRuntimeStep ) getRequiredClaims (dto * pkg.OIDCConfigDTO ) map [string ]string {
175+ requiredClaims := make (map [string ]string )
176+ if ! (len (dto .RequiredClaims ) == 1 && dto .RequiredClaims [0 ] == "-" ) {
177+ for _ , claim := range dto .RequiredClaims {
178+ parts := strings .SplitN (claim , "=" , 2 )
179+ if len (parts ) == 2 {
180+ requiredClaims [parts [0 ]] = parts [1 ]
181+ }
182+ }
183+ }
184+ return requiredClaims
185+ }
186+
187+ func (s * UpdateRuntimeStep ) getOIDCConfigObject (oidcConfig pkg.OIDCConfigDTO ) imv1.OIDCConfig {
188+ requiredClaims := make (map [string ]string )
189+ for _ , claim := range oidcConfig .RequiredClaims {
190+ parts := strings .SplitN (claim , "=" , 2 )
191+ if len (parts ) == 2 {
192+ requiredClaims [parts [0 ]] = parts [1 ]
193+ }
194+ }
195+ oidcConfigObj := imv1.OIDCConfig {
196+ OIDCConfig : gardener.OIDCConfig {
197+ ClientID : & oidcConfig .ClientID ,
198+ IssuerURL : & oidcConfig .IssuerURL ,
199+ SigningAlgs : oidcConfig .SigningAlgs ,
200+ GroupsClaim : & oidcConfig .GroupsClaim ,
201+ UsernamePrefix : & oidcConfig .UsernamePrefix ,
202+ UsernameClaim : & oidcConfig .UsernameClaim ,
203+ RequiredClaims : requiredClaims ,
204+ GroupsPrefix : & oidcConfig .GroupsPrefix ,
205+ },
206+ }
207+ oidcConfigObj .JWKS , _ = base64 .StdEncoding .DecodeString (oidcConfig .EncodedJwksArray )
208+ return oidcConfigObj
209+ }
210+
211+ func (s * UpdateRuntimeStep ) getAdministrators (operation internal.Operation ) []string {
212+ // operation.ProvisioningParameters were calculated and joined across provisioning and all update operations
213+ if len (operation .ProvisioningParameters .Parameters .RuntimeAdministrators ) != 0 {
214+ // prepare new admins list for existing runtime
215+ newAdministrators := make ([]string , 0 , len (operation .ProvisioningParameters .Parameters .RuntimeAdministrators ))
216+ newAdministrators = append (newAdministrators , operation .ProvisioningParameters .Parameters .RuntimeAdministrators ... )
217+
218+ return newAdministrators
219+ } else {
220+ if operation .ProvisioningParameters .ErsContext .UserID != "" {
221+ // get default admin (user_id from provisioning operation)
222+ return []string {operation .ProvisioningParameters .ErsContext .UserID }
223+ } else {
224+ // some old clusters does not have a user_id
225+ return []string {}
226+ }
227+ }
228+ }
0 commit comments