Skip to content

Commit

Permalink
Merge pull request #910 from RedHatInsights/psav/fix_kc_helper
Browse files Browse the repository at this point in the history
Fixed Keycloak reliability issue and added helper for env vars
  • Loading branch information
psav authored Dec 20, 2023
2 parents 08a8d8c + 4e7e507 commit c030dc8
Showing 1 changed file with 73 additions and 77 deletions.
150 changes: 73 additions & 77 deletions controllers/cloud.redhat.com/providers/web/resources_keycloak.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,53 @@ func makeKeycloakImportSecretRealm(cache *rc.ObjectCache, o obj.ClowdObject, pas
return cache.Update(WebKeycloakImportSecret, userData)
}

func baseProbeHandler(port int32, path string) core.ProbeHandler {
return core.ProbeHandler{
HTTPGet: &core.HTTPGetAction{
Port: intstr.IntOrString{
Type: intstr.Int,
IntVal: port,
},
Scheme: core.URISchemeHTTP,
HTTPHeaders: []core.HTTPHeader{
{
Name: "Accept",
Value: "application/json",
},
},
Path: path,
},
}
}

type secretEnvVar struct {
Name string
Key string
}

func newSecretEnvVar(name, key string) secretEnvVar {
return secretEnvVar{Name: name, Key: key}
}

func mapEnvVarsToSecret(inputs []secretEnvVar, secName string) []core.EnvVar {
envVars := []core.EnvVar{}
for _, env := range inputs {
newVar := core.EnvVar{
Name: env.Name,
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: secName,
},
Key: env.Key,
},
},
}
envVars = append(envVars, newVar)
}
return envVars
}

func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePort bool) {
nn := providers.GetNamespacedName(o, "keycloak")

Expand All @@ -252,50 +299,6 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
Name: "KC_DB",
Value: "postgres",
},
{
Name: "KC_DB_USERNAME",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: "keycloak-db",
},
Key: "username",
},
},
},
{
Name: "KC_DB_PASSWORD",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: "keycloak-db",
},
Key: "password",
},
},
},
{
Name: "KC_DB_URL_DATABASE",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: "keycloak-db",
},
Key: "name",
},
},
},
{
Name: "KC_DB_URL_HOST",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: "keycloak-db",
},
Key: "hostname",
},
},
},
{
Name: "KC_DB_URL_PORT",
Value: "5432",
Expand All @@ -304,34 +307,32 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
Name: "PROXY_ADDRESS_FORWARDING",
Value: "true",
},
{
Name: "KEYCLOAK_ADMIN",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: nn.Name,
},
Key: "username",
},
},
},
{
Name: "KEYCLOAK_ADMIN_PASSWORD",
ValueFrom: &core.EnvVarSource{
SecretKeyRef: &core.SecretKeySelector{
LocalObjectReference: core.LocalObjectReference{
Name: nn.Name,
},
Key: "password",
},
},
},
{
Name: "KEYCLOAK_IMPORT",
Value: "/json/redhat-external-realm.json",
},
}

dbEnvVars := mapEnvVarsToSecret(
[]secretEnvVar{
newSecretEnvVar("KC_DB_USERNAME", "username"),
newSecretEnvVar("KC_DB_PASSWORD", "password"),
newSecretEnvVar("KC_DB_URL_DATABASE", "name"),
newSecretEnvVar("KC_DB_URL_HOST", "hostname"),
}, "keycloak-db",
)

envVars = append(envVars, dbEnvVars...)

kcEnvVars := mapEnvVarsToSecret(
[]secretEnvVar{
newSecretEnvVar("KEYCLOAK_ADMIN", "username"),
newSecretEnvVar("KEYCLOAK_ADMIN_PASSWORD", "password"),
}, nn.Name,
)

envVars = append(envVars, kcEnvVars...)

port := int32(8080)

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

probeHandler := core.ProbeHandler{
TCPSocket: &core.TCPSocketAction{
Port: intstr.IntOrString{
Type: intstr.Int,
IntVal: port,
},
},
}

livenessProbe := core.Probe{
ProbeHandler: probeHandler,
ProbeHandler: baseProbeHandler(port, "auth/health/live"),
InitialDelaySeconds: 60,
TimeoutSeconds: 2,
PeriodSeconds: 10,
SuccessThreshold: 1,
FailureThreshold: 3,
}
readinessProbe := core.Probe{
ProbeHandler: probeHandler,
ProbeHandler: baseProbeHandler(port, "auth/health/ready"),
InitialDelaySeconds: 60,
TimeoutSeconds: 2,
PeriodSeconds: 10,
Expand All @@ -382,6 +374,10 @@ func makeKeycloak(o obj.ClowdObject, objMap providers.ObjectMap, _ bool, nodePor
"true",
"--http-relative-path",
"/auth",
"--health-enabled",
"true",
"--metrics-enabled",
"true",
},
Ports: ports,
LivenessProbe: &livenessProbe,
Expand Down

0 comments on commit c030dc8

Please sign in to comment.