4343import org .keycloak .operator .Constants ;
4444import org .keycloak .operator .ContextUtils ;
4545import org .keycloak .operator .Utils ;
46+ import org .keycloak .operator .crds .v2alpha1 .CRDUtils ;
4647import org .keycloak .operator .crds .v2alpha1 .deployment .Keycloak ;
4748import org .keycloak .operator .crds .v2alpha1 .deployment .KeycloakSpec ;
4849import org .keycloak .operator .crds .v2alpha1 .deployment .ValueOrSecret ;
@@ -146,10 +147,13 @@ public StatefulSet desired(Keycloak primary, Context<Keycloak> context) {
146147 watchedResources .annotateDeployment (new ArrayList <>(allSecrets ), Secret .class , baseDeployment , context .getClient ());
147148 }
148149
150+ // add revision from CR if set
151+ UpdateSpec .getRevision (primary ).ifPresent (rev -> addUpdateRevisionAnnotation (rev , baseDeployment ));
152+
149153 var updateType = ContextUtils .getUpdateType (context );
150154 // empty means no existing stateful set.
151155 if (updateType .isEmpty ()) {
152- return addUpdateRevisionAnnotation ( baseDeployment , primary ) ;
156+ return baseDeployment ;
153157 }
154158
155159 var existingDeployment = ContextUtils .getCurrentStatefulSet (context ).orElseThrow ();
@@ -162,7 +166,7 @@ public StatefulSet desired(Keycloak primary, Context<Keycloak> context) {
162166
163167 return switch (updateType .get ()) {
164168 case ROLLING -> handleRollingUpdate (baseDeployment , context , primary );
165- case RECREATE -> handleRecreateUpdate (existingDeployment , baseDeployment , context , primary );
169+ case RECREATE -> handleRecreateUpdate (existingDeployment , baseDeployment , context );
166170 };
167171 }
168172
@@ -551,11 +555,10 @@ private static StatefulSet handleRollingUpdate(StatefulSet desired, Context<Keyc
551555 .editMetadata ()
552556 .addToAnnotations (Constants .KEYCLOAK_RECREATE_UPDATE_ANNOTATION , "false" )
553557 .addToAnnotations (Constants .KEYCLOAK_UPDATE_REASON_ANNOTATION , ContextUtils .getUpdateReason (context ));
554- addUpdateRevisionAnnotation (builder , primary );
555558 return builder .endMetadata ().build ();
556559 }
557560
558- private static StatefulSet handleRecreateUpdate (StatefulSet actual , StatefulSet desired , Context <Keycloak > context , Keycloak primary ) {
561+ private static StatefulSet handleRecreateUpdate (StatefulSet actual , StatefulSet desired , Context <Keycloak > context ) {
559562 if (actual .getStatus ().getReplicas () == 0 ) {
560563 Log .debug ("Performing a recreate update - scaling up the stateful set" );
561564 return desired ;
@@ -567,25 +570,24 @@ private static StatefulSet handleRecreateUpdate(StatefulSet actual, StatefulSet
567570 .withReplicas (0 )
568571 .endSpec ();
569572 // update metadata from the new stateful set, it is safe to do so.
570- builder .withMetadata (desired .getMetadata ());
571- var metadataBuilder = builder .editMetadata ()
573+ var metadataBuilder = desired .getMetadata ().edit ()
572574 .addToAnnotations (Constants .KEYCLOAK_MIGRATING_ANNOTATION , Boolean .TRUE .toString ())
573575 .addToAnnotations (Constants .KEYCLOAK_RECREATE_UPDATE_ANNOTATION , Boolean .TRUE .toString ())
574576 .addToAnnotations (Constants .KEYCLOAK_UPDATE_REASON_ANNOTATION , ContextUtils .getUpdateReason (context ));
575- addUpdateRevisionAnnotation (metadataBuilder , primary );
576- metadataBuilder .endMetadata ();
577- return builder .build ();
577+ // copy revision number from the previous stateful set.
578+ CRDUtils .getRevision (actual ).ifPresent (rev -> addUpdateRevisionAnnotation (rev , metadataBuilder ));
579+ return builder
580+ .withMetadata (metadataBuilder .build ())
581+ .build ();
578582 }
579583
580- private static StatefulSet addUpdateRevisionAnnotation (StatefulSet statefulSet , Keycloak primary ) {
581- var builder = statefulSet .toBuilder ()
582- .editMetadata ();
583- addUpdateRevisionAnnotation (builder , primary );
584- return builder .endMetadata ().build ();
584+ private static void addUpdateRevisionAnnotation (String revision , StatefulSet toUpdate ) {
585+ var metadataBuilder = toUpdate .getMetadata ().edit ();
586+ addUpdateRevisionAnnotation (revision , metadataBuilder );
587+ toUpdate .setMetadata (metadataBuilder .build ());
585588 }
586589
587- private static void addUpdateRevisionAnnotation (ObjectMetaFluent <?> builder , Keycloak primary ) {
588- UpdateSpec .getRevision (primary )
589- .ifPresent (rev -> builder .addToAnnotations (Constants .KEYCLOAK_UPDATE_REVISION_ANNOTATION , rev ));
590+ private static void addUpdateRevisionAnnotation (String revision , ObjectMetaFluent <?> builder ) {
591+ builder .addToAnnotations (Constants .KEYCLOAK_UPDATE_REVISION_ANNOTATION , revision );
590592 }
591593}
0 commit comments