99import io .fabric8 .kubernetes .api .model .SecretBuilder ;
1010import io .fabric8 .kubernetes .client .KubernetesClient ;
1111import io .fabric8 .kubernetes .client .KubernetesClientException ;
12- import io .javaoperatorsdk .operator .api .config .informer .InformerConfiguration ;
12+ import io .javaoperatorsdk .operator .api .config .informer .InformerEventSourceConfiguration ;
1313import io .javaoperatorsdk .operator .api .reconciler .Context ;
1414import io .javaoperatorsdk .operator .api .reconciler .ControllerConfiguration ;
15- import io .javaoperatorsdk .operator .api .reconciler .ErrorStatusHandler ;
1615import io .javaoperatorsdk .operator .api .reconciler .ErrorStatusUpdateControl ;
1716import io .javaoperatorsdk .operator .api .reconciler .EventSourceContext ;
18- import io .javaoperatorsdk .operator .api .reconciler .EventSourceInitializer ;
1917import io .javaoperatorsdk .operator .api .reconciler .Reconciler ;
2018import io .javaoperatorsdk .operator .api .reconciler .UpdateControl ;
2119import io .javaoperatorsdk .operator .processing .event .ResourceID ;
2826import io .strimzi .kafka .access .model .BindingStatus ;
2927import io .strimzi .kafka .access .model .KafkaAccess ;
3028import io .strimzi .kafka .access .model .KafkaAccessStatus ;
29+ import java .util .List ;
3130import org .slf4j .Logger ;
3231import org .slf4j .LoggerFactory ;
3332
4039 */
4140@ SuppressWarnings ("ClassFanOutComplexity" )
4241@ ControllerConfiguration
43- public class KafkaAccessReconciler implements Reconciler <KafkaAccess >, EventSourceInitializer < KafkaAccess >, ErrorStatusHandler < KafkaAccess > {
42+ public class KafkaAccessReconciler implements Reconciler <KafkaAccess > {
4443
4544 private final KubernetesClient kubernetesClient ;
4645 private InformerEventSource <Secret , KafkaAccess > kafkaAccessSecretEventSource ;
@@ -95,8 +94,8 @@ public UpdateControl<KafkaAccess> reconcile(final KafkaAccess kafkaAccess, final
9594
9695 kafkaAccessStatus .setBinding (new BindingStatus (secretName ));
9796 kafkaAccessStatus .setReadyCondition (true , "Ready" , "Ready" );
98-
99- return UpdateControl .updateStatus (kafkaAccess );
97+ kafkaAccessStatus . setObservedGeneration ( kafkaAccess . getMetadata (). getGeneration ());
98+ return UpdateControl .patchStatus (kafkaAccess );
10099 }
101100
102101 private void createOrUpdateSecret (final Map <String , String > data , final KafkaAccess kafkaAccess , final String secretName ) {
@@ -142,54 +141,50 @@ private void createOrUpdateSecret(final Map<String, String> data, final KafkaAcc
142141 }
143142
144143 /**
145- * Prepares the event sources required for triggering the reconciliation
144+ * Prepares the event sources required for triggering the reconciliation.
145+ * It configures the JOSDK framework with resources the operator needs to watch.
146146 *
147147 * @param context The EventSourceContext for KafkaAccess resource
148148 *
149149 * @return A new map of event sources
150150 */
151- @ Override
152- public Map <String , EventSource > prepareEventSources (final EventSourceContext <KafkaAccess > context ) {
151+ public List <EventSource <?, KafkaAccess >> prepareEventSources (EventSourceContext <KafkaAccess > context ) {
153152 LOGGER .info ("Preparing event sources" );
154- InformerEventSource <Kafka , KafkaAccess > kafkaEventSource = new InformerEventSource <>(
155- InformerConfiguration .from (Kafka .class , context )
153+ InformerEventSourceConfiguration <Kafka > kafkaEventSource =
154+ InformerEventSourceConfiguration .from (Kafka .class , KafkaAccess . class )
156155 .withSecondaryToPrimaryMapper (kafka -> KafkaAccessMapper .kafkaSecondaryToPrimaryMapper (context .getPrimaryCache ().list (), kafka ))
157156 .withPrimaryToSecondaryMapper (kafkaAccess -> KafkaAccessMapper .kafkaPrimaryToSecondaryMapper ((KafkaAccess ) kafkaAccess ))
158- .build (),
159- context );
160- InformerEventSource <KafkaUser , KafkaAccess > kafkaUserEventSource = new InformerEventSource <>(
161- InformerConfiguration .from (KafkaUser .class , context )
157+ .build ();
158+ InformerEventSourceConfiguration <KafkaUser > kafkaUserEventSource =
159+ InformerEventSourceConfiguration .from (KafkaUser .class , KafkaAccess .class )
162160 .withSecondaryToPrimaryMapper (kafkaUser -> KafkaAccessMapper .kafkaUserSecondaryToPrimaryMapper (context .getPrimaryCache ().list (), kafkaUser ))
163161 .withPrimaryToSecondaryMapper (kafkaAccess -> KafkaAccessMapper .kafkaUserPrimaryToSecondaryMapper ((KafkaAccess ) kafkaAccess ))
164- .build (),
165- context );
166- InformerEventSource < Secret , KafkaAccess > strimziSecretEventSource = new InformerEventSource <>(
167- InformerConfiguration . from ( Secret . class )
162+ .build ();
163+ InformerEventSourceConfiguration < Secret > strimziSecretEventSource =
164+ InformerEventSourceConfiguration . from ( Secret . class , KafkaAccess . class )
165+ . withName ( STRIMZI_SECRET_EVENT_SOURCE )
168166 .withLabelSelector (String .format ("%s=%s" , KafkaAccessMapper .MANAGED_BY_LABEL_KEY , KafkaAccessMapper .STRIMZI_CLUSTER_LABEL_VALUE ))
169167 .withSecondaryToPrimaryMapper (secret -> KafkaAccessMapper .secretSecondaryToPrimaryMapper (context .getPrimaryCache ().list (), secret ))
170- .build (),
171- context );
172- InformerEventSource < Secret , KafkaAccess > strimziKafkaUserSecretEventSource = new InformerEventSource <>(
173- InformerConfiguration . from ( Secret . class )
168+ .build ();
169+ InformerEventSourceConfiguration < Secret > strimziKafkaUserSecretEventSource =
170+ InformerEventSourceConfiguration . from ( Secret . class , KafkaAccess . class )
171+ . withName ( KAFKA_USER_SECRET_EVENT_SOURCE )
174172 .withLabelSelector (String .format ("%s=%s" , KafkaAccessMapper .MANAGED_BY_LABEL_KEY , KafkaAccessMapper .STRIMZI_USER_LABEL_VALUE ))
175173 .withSecondaryToPrimaryMapper (secret -> KafkaAccessMapper .secretSecondaryToPrimaryMapper (context .getPrimaryCache ().list (), secret ))
176- .build (),
177- context );
174+ .build ();
178175 kafkaAccessSecretEventSource = new InformerEventSource <>(
179- InformerConfiguration .from (Secret .class )
176+ InformerEventSourceConfiguration .from (Secret . class , KafkaAccess .class )
180177 .withLabelSelector (String .format ("%s=%s" , KafkaAccessMapper .MANAGED_BY_LABEL_KEY , KafkaAccessMapper .KAFKA_ACCESS_LABEL_VALUE ))
181178 .withSecondaryToPrimaryMapper (secret -> KafkaAccessMapper .secretSecondaryToPrimaryMapper (context .getPrimaryCache ().list (), secret ))
182179 .build (),
183180 context );
184- Map <String , EventSource > eventSources = EventSourceInitializer .nameEventSources (
185- kafkaEventSource ,
186- kafkaUserEventSource ,
187- kafkaAccessSecretEventSource
188- );
189- eventSources .put (STRIMZI_SECRET_EVENT_SOURCE , strimziSecretEventSource );
190- eventSources .put (KAFKA_USER_SECRET_EVENT_SOURCE , strimziKafkaUserSecretEventSource );
191181 LOGGER .info ("Finished preparing event sources" );
192- return eventSources ;
182+ return List .of (
183+ new InformerEventSource <>(kafkaEventSource , context ),
184+ new InformerEventSource <>(kafkaUserEventSource , context ),
185+ new InformerEventSource <>(strimziSecretEventSource , context ),
186+ new InformerEventSource <>(strimziKafkaUserSecretEventSource , context ),
187+ kafkaAccessSecretEventSource );
193188 }
194189
195190 @ Override
@@ -207,8 +202,9 @@ public ErrorStatusUpdateControl<KafkaAccess> updateErrorStatus(KafkaAccess kafka
207202 reason = "InvalidUserKind" ;
208203 }
209204 status .setReadyCondition (false , e .getMessage (), reason );
205+ status .setObservedGeneration (kafkaAccess .getMetadata ().getGeneration ());
210206
211- return ErrorStatusUpdateControl .updateStatus (kafkaAccess );
207+ return ErrorStatusUpdateControl .patchStatus (kafkaAccess );
212208 }
213209
214210 /**
0 commit comments