Skip to content

Commit e76e29f

Browse files
Complexity for Update Runtime Step reduced (#2893)
* first extract * second extract * third extract * fourth extract - currentAdditionalWorkers * fifth getOIDCConfigs * local function used - index 19
1 parent 59297e1 commit e76e29f

File tree

1 file changed

+98
-82
lines changed

1 file changed

+98
-82
lines changed

internal/process/update/update_runtime_step.go

Lines changed: 98 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
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

Comments
 (0)