Skip to content

Commit c030dc8

Browse files
authored
Merge pull request #910 from RedHatInsights/psav/fix_kc_helper
Fixed Keycloak reliability issue and added helper for env vars
2 parents 08a8d8c + 4e7e507 commit c030dc8

File tree

1 file changed

+73
-77
lines changed

1 file changed

+73
-77
lines changed

controllers/cloud.redhat.com/providers/web/resources_keycloak.go

+73-77
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,53 @@ func makeKeycloakImportSecretRealm(cache *rc.ObjectCache, o obj.ClowdObject, pas
227227
return cache.Update(WebKeycloakImportSecret, userData)
228228
}
229229

230+
func baseProbeHandler(port int32, path string) core.ProbeHandler {
231+
return core.ProbeHandler{
232+
HTTPGet: &core.HTTPGetAction{
233+
Port: intstr.IntOrString{
234+
Type: intstr.Int,
235+
IntVal: port,
236+
},
237+
Scheme: core.URISchemeHTTP,
238+
HTTPHeaders: []core.HTTPHeader{
239+
{
240+
Name: "Accept",
241+
Value: "application/json",
242+
},
243+
},
244+
Path: path,
245+
},
246+
}
247+
}
248+
249+
type secretEnvVar struct {
250+
Name string
251+
Key string
252+
}
253+
254+
func newSecretEnvVar(name, key string) secretEnvVar {
255+
return secretEnvVar{Name: name, Key: key}
256+
}
257+
258+
func mapEnvVarsToSecret(inputs []secretEnvVar, secName string) []core.EnvVar {
259+
envVars := []core.EnvVar{}
260+
for _, env := range inputs {
261+
newVar := core.EnvVar{
262+
Name: env.Name,
263+
ValueFrom: &core.EnvVarSource{
264+
SecretKeyRef: &core.SecretKeySelector{
265+
LocalObjectReference: core.LocalObjectReference{
266+
Name: secName,
267+
},
268+
Key: env.Key,
269+
},
270+
},
271+
}
272+
envVars = append(envVars, newVar)
273+
}
274+
return envVars
275+
}
276+
230277
func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePort bool) {
231278
nn := providers.GetNamespacedName(o, "keycloak")
232279

@@ -252,50 +299,6 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
252299
Name: "KC_DB",
253300
Value: "postgres",
254301
},
255-
{
256-
Name: "KC_DB_USERNAME",
257-
ValueFrom: &core.EnvVarSource{
258-
SecretKeyRef: &core.SecretKeySelector{
259-
LocalObjectReference: core.LocalObjectReference{
260-
Name: "keycloak-db",
261-
},
262-
Key: "username",
263-
},
264-
},
265-
},
266-
{
267-
Name: "KC_DB_PASSWORD",
268-
ValueFrom: &core.EnvVarSource{
269-
SecretKeyRef: &core.SecretKeySelector{
270-
LocalObjectReference: core.LocalObjectReference{
271-
Name: "keycloak-db",
272-
},
273-
Key: "password",
274-
},
275-
},
276-
},
277-
{
278-
Name: "KC_DB_URL_DATABASE",
279-
ValueFrom: &core.EnvVarSource{
280-
SecretKeyRef: &core.SecretKeySelector{
281-
LocalObjectReference: core.LocalObjectReference{
282-
Name: "keycloak-db",
283-
},
284-
Key: "name",
285-
},
286-
},
287-
},
288-
{
289-
Name: "KC_DB_URL_HOST",
290-
ValueFrom: &core.EnvVarSource{
291-
SecretKeyRef: &core.SecretKeySelector{
292-
LocalObjectReference: core.LocalObjectReference{
293-
Name: "keycloak-db",
294-
},
295-
Key: "hostname",
296-
},
297-
},
298-
},
299302
{
300303
Name: "KC_DB_URL_PORT",
301304
Value: "5432",
@@ -304,34 +307,32 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
304307
Name: "PROXY_ADDRESS_FORWARDING",
305308
Value: "true",
306309
},
307-
{
308-
Name: "KEYCLOAK_ADMIN",
309-
ValueFrom: &core.EnvVarSource{
310-
SecretKeyRef: &core.SecretKeySelector{
311-
LocalObjectReference: core.LocalObjectReference{
312-
Name: nn.Name,
313-
},
314-
Key: "username",
315-
},
316-
},
317-
},
318-
{
319-
Name: "KEYCLOAK_ADMIN_PASSWORD",
320-
ValueFrom: &core.EnvVarSource{
321-
SecretKeyRef: &core.SecretKeySelector{
322-
LocalObjectReference: core.LocalObjectReference{
323-
Name: nn.Name,
324-
},
325-
Key: "password",
326-
},
327-
},
328-
},
329310
{
330311
Name: "KEYCLOAK_IMPORT",
331312
Value: "/json/redhat-external-realm.json",
332313
},
333314
}
334315

316+
dbEnvVars := mapEnvVarsToSecret(
317+
[]secretEnvVar{
318+
newSecretEnvVar("KC_DB_USERNAME", "username"),
319+
newSecretEnvVar("KC_DB_PASSWORD", "password"),
320+
newSecretEnvVar("KC_DB_URL_DATABASE", "name"),
321+
newSecretEnvVar("KC_DB_URL_HOST", "hostname"),
322+
}, "keycloak-db",
323+
)
324+
325+
envVars = append(envVars, dbEnvVars...)
326+
327+
kcEnvVars := mapEnvVarsToSecret(
328+
[]secretEnvVar{
329+
newSecretEnvVar("KEYCLOAK_ADMIN", "username"),
330+
newSecretEnvVar("KEYCLOAK_ADMIN_PASSWORD", "password"),
331+
}, nn.Name,
332+
)
333+
334+
envVars = append(envVars, kcEnvVars...)
335+
335336
port := int32(8080)
336337

337338
ports := []core.ContainerPort{{
@@ -340,25 +341,16 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
340341
Protocol: core.ProtocolTCP,
341342
}}
342343

343-
probeHandler := core.ProbeHandler{
344-
TCPSocket: &core.TCPSocketAction{
345-
Port: intstr.IntOrString{
346-
Type: intstr.Int,
347-
IntVal: port,
348-
},
349-
},
350-
}
351-
352344
livenessProbe := core.Probe{
353-
ProbeHandler: probeHandler,
345+
ProbeHandler: baseProbeHandler(port, "auth/health/live"),
354346
InitialDelaySeconds: 60,
355347
TimeoutSeconds: 2,
356348
PeriodSeconds: 10,
357349
SuccessThreshold: 1,
358350
FailureThreshold: 3,
359351
}
360352
readinessProbe := core.Probe{
361-
ProbeHandler: probeHandler,
353+
ProbeHandler: baseProbeHandler(port, "auth/health/ready"),
362354
InitialDelaySeconds: 60,
363355
TimeoutSeconds: 2,
364356
PeriodSeconds: 10,
@@ -382,6 +374,10 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
382374
"true",
383375
"--http-relative-path",
384376
"/auth",
377+
"--health-enabled",
378+
"true",
379+
"--metrics-enabled",
380+
"true",
385381
},
386382
Ports: ports,
387383
LivenessProbe: &livenessProbe,

0 commit comments

Comments
 (0)