8000 Operator error: desiredPullSecrets is null · Issue #39939 · keycloak/keycloak · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Operator error: desiredPullSecrets is null #39939
Closed
@Eitan1112

Description

@Eitan1112

Before reporting an issue

  • I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them.

Area

operator

Describe the bug

Tried to update a Keycloak instance deployed with the operator from 26.2.2 to 26.2.4. It failed with this error log from the operator pod:

2025-05-25 11:53:53,970 ERROR [io.jav.ope.pro.eve.EventProcessor] (ReconcilerExecutor-keycloakcontroller-58) Error during event processing ExecutionScope{ resource id: ResourceID{name='keycloak-main', namespace='keycloak'}, version: 87591812}: java.lang.NullPointerExcep
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource.lambda$createPodSpec$0(KeycloakUpdateJobDependentResource.java:146)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource.createPodSpec(KeycloakUpdateJobDependentResource.java:146)
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource.addPodSpecTemplate(KeycloakUpdateJobDependentResource.java:126)
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource.desired(KeycloakUpdateJobDependentResource.java:91)
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource.desired(KeycloakUpdateJobDependentResource.java:50)
    at io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource.reconcile(AbstractDependentResource.java:73)
    at io.javaoperatorsdk.operator.processing.dependent.SingleDependentResourceReconciler.reconcile(SingleDependentResourceReconciler.java:19)
    at io.javaoperatorsdk.operator.processing.dependent.AbstractDependentResource.reconcile(AbstractDependentResource.java:66)
    at org.keycloak.operator.controllers.KeycloakUpdateJobDependentResource_ClientProxy.reconcile(Unknown Source)
    at org.keycloak.operator.update.impl.AutoUpdateLogic.onUpdate(AutoUpdateLogic.java:52)
    at org.keycloak.operator.update.impl.BaseUpdateLogic.decideUpdate(BaseUpgradeLogic.java:78)
    at org.keycloak.operator.controllers.KeycloakController.reconcile(KeycloakController.java:138)
    at org.keycloak.operator.controllers.KeycloakController.reconcile(KeycloakController.java:57)
    at org.keycloak.operator.controllers.KeycloakController_ClientProxy.reconcile(Unknown Source)
    at io.javaoperatorsdk.operator.processing.Controller$1.execute(Controller.java:161)
    at io.javaoperatorsdk.operator.processing.Controller$1.execute(Controller.java:117)
    at io.javaoperatorsdk.operator.api.monitoring.Metrics.timeControllerExecution(Metrics.java:159)
    at io.javaoperatorsdk.operator.proc
70D4
essing.Controller.reconcile(Controller.java:116)
    at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.reconcileExecution(ReconciliationDispatcher.java:153)
    at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleReconcile(ReconciliationDispatcher.java:130)
    at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleDispatch(ReconciliationDispatcher.java:97)
    at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleExecution(ReconciliationDispatcher.java:68)
    at io.javaoperatorsdk.operator.processing.event.EventProcessor$ReconcilerExecutor.run(EventProcessor.java:467)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)

From a quick glance I think this desiredPullSecrets can be null if not imagePullSecrets are specified in the Keycloak CRD instance, so when it tries to use the contains method on it in the next line it throws the exception. Tried with the operator in both 26.2.2 and 26.2.4 and both failed with the same message.

It seems this variable is new from version 26.2.1, so I will mark it as a regression.

Version

26.2.4

Regression

  • The issue is a regression

Expected behavior

ImagePullSecrets are optional and thus it should not fail if they are not defined in the Keycloak resource.

Actual behavior

Keycloak operator fails to update the pods

How to Reproduce?

  • Install the operator in the latest version
  • Install a keycloak instance using the operator CRD, without specifying imagePullSecret for an older version (e.g. 26.2.3).
  • Try to update the keycloak instance to a newer version (e.g. 26.2.4)
  • It fails and the log will be printed

Anything else?

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0