diff --git a/bootstrapper-maven-plugin/src/main/resources/templates/Reconciler.java b/bootstrapper-maven-plugin/src/main/resources/templates/Reconciler.java
index f3efb2114d..6d03196fe9 100644
--- a/bootstrapper-maven-plugin/src/main/resources/templates/Reconciler.java
+++ b/bootstrapper-maven-plugin/src/main/resources/templates/Reconciler.java
@@ -5,7 +5,6 @@
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java
index b6e3ba2c8f..7a53db8bd9 100644
--- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java
+++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java
@@ -28,7 +28,7 @@
import com.github.benmanes.caffeine.cache.Caffeine;
public abstract class AbstractTestReconciler
>
- implements Reconciler
, EventSourceInitializer
{
+ implements Reconciler
{
private static final Logger log =
LoggerFactory.getLogger(BoundedCacheClusterScopeTestReconciler.class);
@@ -82,7 +82,7 @@ public Map prepareEventSources(
Mappers.fromOwnerReference(this instanceof BoundedCacheClusterScopeTestReconciler))
.build(), context);
- return EventSourceInitializer.nameEventSources(es);
+ return EventSourceUtils.nameEventSources(es);
}
private void ensureStatus(P resource) {
diff --git a/docs/documentation/dependent-resources.md b/docs/documentation/dependent-resources.md
index 61e18fd3f2..4f623ccdd1 100644
--- a/docs/documentation/dependent-resources.md
+++ b/docs/documentation/dependent-resources.md
@@ -101,13 +101,13 @@ and labels, which are ignored by default:
```java
public class MyDependentResource extends KubernetesDependentResource
- implements Matcher {
- // your implementation
+ implements Matcher {
+ // your implementation
- public Result match(MyDependent actualResource, MyPrimary primary,
- Context context) {
- return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, true);
- }
+ public Result match(MyDependent actualResource, MyPrimary primary,
+ Context context) {
+ return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, true);
+ }
}
```
@@ -141,24 +141,24 @@ Deleted (or set to be garbage collected). The following example shows how to cre
@KubernetesDependent(labelSelector = WebPageManagedDependentsReconciler.SELECTOR)
class DeploymentDependentResource extends CRUDKubernetesDependentResource {
- public DeploymentDependentResource() {
- super(Deployment.class);
- }
-
- @Override
- protected Deployment desired(WebPage webPage, Context context) {
- var deploymentName = deploymentName(webPage);
- Deployment deployment = loadYaml(Deployment.class, getClass(), "deployment.yaml");
- deployment.getMetadata().setName(deploymentName);
- deployment.getMetadata().setNamespace(webPage.getMetadata().getNamespace());
- deployment.getSpec().getSelector().getMatchLabels().put("app", deploymentName);
-
- deployment.getSpec().getTemplate().getMetadata().getLabels()
- .put("app", deploymentName);
- deployment.getSpec().getTemplate().getSpec().getVolumes().get(0)
- .setConfigMap(new ConfigMapVolumeSourceBuilder().withName(configMapName(webPage)).build());
- return deployment;
- }
+ public DeploymentDependentResource() {
+ super(Deployment.class);
+ }
+
+ @Override
+ protected Deployment desired(WebPage webPage, Context context) {
+ var deploymentName = deploymentName(webPage);
+ Deployment deployment = loadYaml(Deployment.class, getClass(), "deployment.yaml");
+ deployment.getMetadata().setName(deploymentName);
+ deployment.getMetadata().setNamespace(webPage.getMetadata().getNamespace());
+ deployment.getSpec().getSelector().getMatchLabels().put("app", deploymentName);
+
+ deployment.getSpec().getTemplate().getMetadata().getLabels()
+ .put("app", deploymentName);
+ deployment.getSpec().getTemplate().getSpec().getVolumes().get(0)
+ .setConfigMap(new ConfigMapVolumeSourceBuilder().withName(configMapName(webPage)).build());
+ return deployment;
+ }
}
```
@@ -194,25 +194,25 @@ instances are managed by JOSDK, an example of which can be seen below:
```java
@ControllerConfiguration(
- labelSelector = SELECTOR,
- dependents = {
- @Dependent(type = ConfigMapDependentResource.class),
- @Dependent(type = DeploymentDependentResource.class),
- @Dependent(type = ServiceDependentResource.class)
- })
+ labelSelector = SELECTOR,
+ dependents = {
+ @Dependent(type = ConfigMapDependentResource.class),
+ @Dependent(type = DeploymentDependentResource.class),
+ @Dependent(type = ServiceDependentResource.class)
+ })
public class WebPageManagedDependentsReconciler
- implements Reconciler, ErrorStatusHandler {
+ implements Reconciler, ErrorStatusHandler {
- // omitted code
+ // omitted code
- @Override
- public UpdateControl reconcile(WebPage webPage, Context context) {
+ @Override
+ public UpdateControl reconcile(WebPage webPage, Context context) {
- final var name = context.getSecondaryResource(ConfigMap.class).orElseThrow()
- .getMetadata().getName();
- webPage.setStatus(createStatus(name));
- return UpdateControl.patchStatus(webPage);
- }
+ final var name = context.getSecondaryResource(ConfigMap.class).orElseThrow()
+ .getMetadata().getName();
+ webPage.setStatus(createStatus(name));
+ return UpdateControl.patchStatus(webPage);
+ }
}
```
@@ -227,104 +227,11 @@ It is also possible to wire dependent resources programmatically. In practice th
developer is responsible for initializing and managing the dependent resources as well as calling
their `reconcile` method. However, this makes it possible for developers to fully customize the
reconciliation process. Standalone dependent resources should be used in cases when the managed use
-case does not fit.
-
-Note that [Workflows](https://javaoperatorsdk.io/docs/workflows) also can be invoked from standalone
-resources.
-
-The following sample is similar to the one above, simply performing additional checks, and
-conditionally creating an `Ingress`:
-
-```java
-
-@ControllerConfiguration
-public class WebPageStandaloneDependentsReconciler
- implements Reconciler, ErrorStatusHandler,
- EventSourceInitializer {
-
- private KubernetesDependentResource configMapDR;
- private KubernetesDependentResource deploymentDR;
- private KubernetesDependentResource serviceDR;
- private KubernetesDependentResource ingressDR;
-
- public WebPageStandaloneDependentsReconciler(KubernetesClient kubernetesClient) {
- // 1.
- createDependentResources(kubernetesClient);
- }
-
- @Override
- public List prepareEventSources(EventSourceContext context) {
- // 2.
- return List.of(
- configMapDR.initEventSource(context),
- deploymentDR.initEventSource(context),
- serviceDR.initEventSource(context));
- }
-
- @Override
- public UpdateControl reconcile(WebPage webPage, Context context) {
-
- // 3.
- if (!isValidHtml(webPage.getHtml())) {
- return UpdateControl.patchStatus(setInvalidHtmlErrorMessage(webPage));
- }
+case does not fit. You can, of course, also use [Workflows](https://javaoperatorsdk.io/docs/workflows) when managing
+resources programmatically.
- // 4.
- configMapDR.reconcile(webPage, context);
- deploymentDR.reconcile(webPage, context);
- serviceDR.reconcile(webPage, context);
-
- // 5.
- if (Boolean.TRUE.equals(webPage.getSpec().getExposed())) {
- ingressDR.reconcile(webPage, context);
- } else {
- ingressDR.delete(webPage, context);
- }
-
- // 6.
- webPage.setStatus(
- createStatus(configMapDR.getResource(webPage).orElseThrow().getMetadata().getName()));
- return UpdateControl.patchStatus(webPage);
- }
-
- private void createDependentResources(KubernetesClient client) {
- this.configMapDR = new ConfigMapDependentResource();
- this.deploymentDR = new DeploymentDependentResource();
- this.serviceDR = new ServiceDependentResource();
- this.ingressDR = new IngressDependentResource();
-
- Arrays.asList(configMapDR, deploymentDR, serviceDR, ingressDR).forEach(dr -> {
- dr.setKubernetesClient(client);
- dr.configureWith(new KubernetesDependentResourceConfig()
- .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR));
- });
- }
-
- // omitted code
-}
-```
-
-There are multiple things happening here:
-
-1. Dependent resources are explicitly created and can be access later by reference.
-2. Event sources are produced by the dependent resources, but needs to be explicitly registered in
- this case by implementing
- the [`EventSourceInitializer`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java)
- interface.
-3. The input html is validated, and error message is set in case it is invalid.
-4. Reconciliation of dependent resources is called explicitly, but here the workflow
- customization is fully in the hand of the developer.
-5. An `Ingress` is created but only in case `exposed` flag set to true on custom resource. Tries to
- delete it if not.
-6. Status is set in a different way, this is just an alternative way to show, that the actual state
- can be read using the reference. This could be written in a same way as in the managed example.
-
-See the full source code of
-sample [here](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java)
-.
-
-Note also the Workflows feature makes it possible to also support this conditional creation use
-case in managed dependent resources.
+You can see a commented example of how to do
+so [here](https://github.com/operator-framework/java-operator-sdk/blob/main/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java).
## Creating/Updating Kubernetes Resources
@@ -357,17 +264,17 @@ Since SSA is a complex feature, JOSDK implements a feature flag allowing users t
these implementations. See
in [ConfigurationService](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java#L332-L358).
-It is, however, important to note that these implementations are default, generic
-implementations that the framework can provide expected behavior out of the box. In many
-situations, these will work just fine but it is also possible to provide matching algorithms
+It is, however, important to note that these implementations are default, generic
+implementations that the framework can provide expected behavior out of the box. In many
+situations, these will work just fine but it is also possible to provide matching algorithms
optimized for specific use cases. This is easily done by simply overriding
-the `match(...)` [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/e16559fd41bbb8bef6ce9d1f47bffa212a941b09/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java#L156-L156).
+the `match(...)` [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/e16559fd41bbb8bef6ce9d1f47bffa212a941b09/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java#L156-L156).
-It is also possible to bypass the matching logic altogether to simply rely on the server-side
+It is also possible to bypass the matching logic altogether to simply rely on the server-side
apply mechanism if always sending potentially unchanged resources to the cluster is not an issue.
JOSDK's matching mechanism allows to spare some potentially useless calls to the Kubernetes API
-server. To bypass the matching feature completely, simply override the `match` method to always
-return `false`, thus telling JOSDK that the actual state never matches the desired one, making
+server. To bypass the matching feature completely, simply override the `match` method to always
+return `false`, thus telling JOSDK that the actual state never matches the desired one, making
it always update the resources using SSA.
WARNING: Older versions of Kubernetes before 1.25 would create an additional resource version for every SSA update
@@ -489,15 +396,18 @@ also be created, one per dependent resource.
See [integration test](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/ExternalStateBulkIT.java)
as a sample.
-
## GenericKubernetesResource based Dependent Resources
-In rare circumstances resource handling where there is no class representation or just typeless handling might be needed.
-Fabric8 Client provides [GenericKubernetesResource](https://github.com/fabric8io/kubernetes-client/blob/main/doc/CHEATSHEET.md#resource-typeless-api)
-to support that.
+In rare circumstances resource handling where there is no class representation or just typeless handling might be
+needed.
+Fabric8 Client
+provides [GenericKubernetesResource](https://github.com/fabric8io/kubernetes-client/blob/main/doc/CHEATSHEET.md#resource-typeless-api)
+to support that.
-For dependent resource this is supported by [GenericKubernetesDependentResource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java#L8-L8)
-. See samples [here](https://github.com/java-operator-sdk/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource).
+For dependent resource this is supported
+by [GenericKubernetesDependentResource](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java#L8-L8)
+. See
+samples [here](https://github.com/java-operator-sdk/java-operator-sdk/tree/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource).
## Other Dependent Resource Features
diff --git a/docs/documentation/features.md b/docs/documentation/features.md
index 564b5233f5..3a3eb0c876 100644
--- a/docs/documentation/features.md
+++ b/docs/documentation/features.md
@@ -66,7 +66,8 @@ and/or re-schedule a reconciliation with a desired time delay:
@Override
public UpdateControl reconcile(
EventSourceTestCustomResource resource, Context context) {
- ...
+ // omitted code
+
return UpdateControl.patchStatus(resource).rescheduleAfter(10, TimeUnit.SECONDS);
}
```
@@ -77,7 +78,8 @@ without an update:
@Override
public UpdateControl reconcile(
EventSourceTestCustomResource resource, Context context) {
- ...
+ // omitted code
+
return UpdateControl.noUpdate().rescheduleAfter(10, TimeUnit.SECONDS);
}
```
@@ -108,7 +110,8 @@ resource are cleaned up in `cleanup` implementation.
```java
public DeleteControl cleanup(MyCustomResource customResource,Context context){
- ...
+ // omitted code
+
return DeleteControl.defaultDelete();
}
@@ -192,10 +195,7 @@ the [WebPage example](https://github.com/java-operator-sdk/java-operator-sdk/blo
```java
public class WebPageStatus extends ObservedGenerationAwareStatus {
-
- private String htmlConfigMap;
-
- ...
+ // omitted code
}
```
@@ -247,11 +247,12 @@ for reconciling deployments.
public class DeploymentReconciler
implements Reconciler, TestExecutionInfoProvider {
- @Override
- public UpdateControl reconcile(
- Deployment resource, Context context) {
- ...
- }
+ @Override
+ public UpdateControl reconcile(
+ Deployment resource, Context context) {
+ // omitted code
+ }
+}
```
## Max Interval Between Reconciliations
@@ -269,6 +270,7 @@ standard annotation:
@ControllerConfiguration(maxReconciliationInterval = @MaxReconciliationInterval(
interval = 50,
timeUnit = TimeUnit.MILLISECONDS))
+public class MyReconciler implements Reconciler {}
```
The event is not propagated at a fixed rate, rather it's scheduled after each reconciliation. So the
@@ -491,9 +493,8 @@ related [method](https://github.com/java-operator-sdk/java-operator-sdk/blob/mai
### Registering Event Sources
-To register event sources, your `Reconciler` has to implement the
-[`EventSourceInitializer`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java)
-interface and initialize a list of event sources to register. One way to see this in action is
+To register event sources, your `Reconciler` has to override the `prepareEventSources` and return
+list of event sources to register. One way to see this in action is
to look at the
[tomcat example](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java)
(irrelevant details omitted):
@@ -501,8 +502,10 @@ to look at the
```java
@ControllerConfiguration
-public class TomcatReconciler implements Reconciler, EventSourceInitializer {
+public class TomcatReconciler implements Reconciler {
+ // omitted code
+
@Override
public List prepareEventSources(EventSourceContext context) {
var configMapEventSource =
@@ -511,9 +514,9 @@ public class TomcatReconciler implements Reconciler, EventSourceInitiali
.withSecondaryToPrimaryMapper(
Mappers.fromAnnotation(ANNOTATION_NAME, ANNOTATION_NAMESPACE)
.build(), context));
- return EventSourceInitializer.nameEventSources(configMapEventSource);
+ return EventSourceUtils.nameEventSources(configMapEventSource);
}
- ...
+
}
```
@@ -657,15 +660,15 @@ registering an associated `Informer` and then calling the `changeNamespaces` met
```java
-public static void main(String[]args)throws IOException{
- KubernetesClient client=new DefaultKubernetesClient();
- Operator operator=new Operator(client);
- RegisteredController registeredController=operator.register(new WebPageReconciler(client));
- operator.installShutdownHook();
- operator.start();
+public static void main(String[] args) {
+ KubernetesClient client = new DefaultKubernetesClient();
+ Operator operator = new Operator(client);
+ RegisteredController registeredController = operator.register(new WebPageReconciler(client));
+ operator.installShutdownHook();
+ operator.start();
- // call registeredController further while operator is running
- }
+ // call registeredController further while operator is running
+}
```
@@ -677,8 +680,7 @@ configured appropriately so that the `followControllerNamespaceChanges` method r
```java
@ControllerConfiguration
-public class MyReconciler
- implements Reconciler, EventSourceInitializer {
+public class MyReconciler implements Reconciler {
@Override
public Map prepareEventSources(
@@ -689,7 +691,7 @@ public class MyReconciler
.withNamespacesInheritedFromController(context)
.build(), context);
- return EventSourceInitializer.nameEventSources(configMapES);
+ return EventSourceUtils.nameEventSources(configMapES);
}
}
@@ -768,8 +770,8 @@ You can use a different implementation by overriding the default one provided by
follows:
```java
-Metrics metrics= …;
-Operator operator = new Operator(client, o -> o.withMetrics());
+Metrics metrics; // initialize your metrics implementation
+Operator operator = new Operator(client, o -> o.withMetrics(metrics));
```
### Micrometer implementation
@@ -785,8 +787,8 @@ To create a `MicrometerMetrics` implementation that behaves how it has historica
instance via:
```java
-MeterRegistry registry= …;
-Metrics metrics=new MicrometerMetrics(registry)
+MeterRegistry registry; // initialize your registry implementation
+Metrics metrics = new MicrometerMetrics(registry);
```
Note, however, that this constructor is deprecated and we encourage you to use the factory methods instead, which either
@@ -802,7 +804,7 @@ basis, deleting the associated meters after 5 seconds when a resource is deleted
MicrometerMetrics.newPerResourceCollectingMicrometerMetricsBuilder(registry)
.withCleanUpDelayInSeconds(5)
.withCleaningThreadNumber(2)
- .build()
+ .build();
```
The micrometer implementation records the following metrics:
diff --git a/docs/documentation/v5-0-migration.md b/docs/documentation/v5-0-migration.md
index bc83b49103..f4ec51f4fb 100644
--- a/docs/documentation/v5-0-migration.md
+++ b/docs/documentation/v5-0-migration.md
@@ -12,3 +12,8 @@ permalink: /docs/v5-0-migration
1. [Result of managed dependent resources](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedDependentResourceContext.java#L55-L57)
is not `Optional` anymore. In case you use this result, simply use the result
objects directly.
+2. `EventSourceInitializer` is not a separate interface anymore. It is part of the `Reconciler` interface with a
+ default implementation. You can simply remove this interface from your reconciler. The
+ [`EventSourceUtils`](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java#L11-L11)
+ now contains all the utility methods used for event sources naming that were previously defined in
+ the `EventSourceInitializer` interface.
diff --git a/docs/documentation/workflows.md b/docs/documentation/workflows.md
index 7190f8e8e3..d0d7e5b2c7 100644
--- a/docs/documentation/workflows.md
+++ b/docs/documentation/workflows.md
@@ -122,7 +122,7 @@ page sample):
@ControllerConfiguration(
labelSelector = WebPageDependentsWorkflowReconciler.DEPENDENT_RESOURCE_LABEL_SELECTOR)
public class WebPageDependentsWorkflowReconciler
- implements Reconciler, ErrorStatusHandler, EventSourceInitializer {
+ implements Reconciler, ErrorStatusHandler {
public static final String DEPENDENT_RESOURCE_LABEL_SELECTOR = "!low-level";
private static final Logger log =
@@ -147,7 +147,7 @@ public class WebPageDependentsWorkflowReconciler
@Override
public Map prepareEventSources(EventSourceContext context) {
- return EventSourceInitializer.nameEventSources(
+ return EventSourceUtils.nameEventSources(
configMapDR.initEventSource(context),
deploymentDR.initEventSource(context),
serviceDR.initEventSource(context),
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java
similarity index 69%
rename from operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java
rename to operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java
index 09c1687e1e..8b89d95b71 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java
@@ -8,24 +8,7 @@
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.ResourceEventSource;
-/**
- * An interface that a {@link Reconciler} can implement to have the SDK register the provided
- * {@link EventSource}
- *
- * @param the primary resource type handled by the associated {@link Reconciler}
- */
-public interface EventSourceInitializer
{
-
- /**
- * Prepares a map of {@link EventSource} implementations keyed by the name with which they need to
- * be registered by the SDK.
- *
- * @param context a {@link EventSourceContext} providing access to information useful to event
- * sources
- * @return a map of event sources to register
- */
- Map prepareEventSources(EventSourceContext context);
-
+public class EventSourceUtils {
/**
* Utility method to easily create map with generated name for event sources. This is for the use
* case when the event sources are not access explicitly by name in the reconciler.
@@ -33,7 +16,7 @@ public interface EventSourceInitializer
{
* @param eventSources to name
* @return even source with default names
*/
- static Map nameEventSources(EventSource... eventSources) {
+ public static Map nameEventSources(EventSource... eventSources) {
Map eventSourceMap = new HashMap<>(eventSources.length);
for (EventSource eventSource : eventSources) {
eventSourceMap.put(generateNameFor(eventSource), eventSource);
@@ -42,7 +25,7 @@ static Map nameEventSources(EventSource... eventSources) {
}
@SuppressWarnings("unchecked")
- static Map eventSourcesFromWorkflow(
+ public static Map eventSourcesFromWorkflow(
EventSourceContext context,
Workflow workflow) {
Map result = new HashMap<>();
@@ -54,13 +37,13 @@ static Map eventSourcesFromWorkflow
}
@SuppressWarnings("rawtypes")
- static Map nameEventSourcesFromDependentResource(
+ public static Map nameEventSourcesFromDependentResource(
EventSourceContext context, DependentResource... dependentResources) {
return nameEventSourcesFromDependentResource(context, Arrays.asList(dependentResources));
}
@SuppressWarnings("unchecked,rawtypes")
- static Map nameEventSourcesFromDependentResource(
+ public static Map nameEventSourcesFromDependentResource(
EventSourceContext context, Collection dependentResources) {
if (dependentResources != null) {
@@ -81,9 +64,8 @@ static Map nameEventSourcesFromDepe
* @param eventSource EventSource
* @return generated name
*/
- static String generateNameFor(EventSource eventSource) {
+ public static String generateNameFor(EventSource eventSource) {
// we can have multiple event sources for the same class
return eventSource.getClass().getName() + "#" + eventSource.hashCode();
}
-
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java
index 55df9d1cea..2047762c35 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java
@@ -1,8 +1,11 @@
package io.javaoperatorsdk.operator.api.reconciler;
+import java.util.*;
+
import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.javaoperatorsdk.operator.processing.event.source.EventSource;
-public interface Reconciler {
+public interface Reconciler {
/**
* The implementation of this operation is required to be idempotent. Always use the UpdateControl
@@ -14,6 +17,19 @@ public interface Reconciler {
* @return UpdateControl to manage updates on the custom resource (usually the status) after
* reconciliation.
*/
- UpdateControl reconcile(R resource, Context context) throws Exception;
+ UpdateControl reconcile(P resource, Context
context) throws Exception;
+
+
+ /**
+ * Prepares a map of {@link EventSource} implementations keyed by the name with which they need to
+ * be registered by the SDK.
+ *
+ * @param context a {@link EventSourceContext} providing access to information useful to event
+ * sources
+ * @return a map of event sources to register
+ */
+ default Map prepareEventSources(EventSourceContext context) {
+ return Map.of();
+ }
}
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java
index 70069148c3..78b3a64043 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java
@@ -1,11 +1,6 @@
package io.javaoperatorsdk.operator.processing;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -25,16 +20,7 @@
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
import io.javaoperatorsdk.operator.api.monitoring.Metrics;
import io.javaoperatorsdk.operator.api.monitoring.Metrics.ControllerExecution;
-import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
-import io.javaoperatorsdk.operator.api.reconciler.Constants;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ContextInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.Ignore;
-import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceNotFoundException;
import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceProvider;
import io.javaoperatorsdk.operator.api.reconciler.dependent.EventSourceReferencer;
@@ -230,11 +216,8 @@ private void initContextIfNeeded(P resource, Context
context) {
}
public void initAndRegisterEventSources(EventSourceContext
context) {
- if (reconciler instanceof EventSourceInitializer) {
- final var provider = (EventSourceInitializer
) this.reconciler;
- final var ownSources = provider.prepareEventSources(context);
- ownSources.forEach(eventSourceManager::registerEventSource);
- }
+ final var ownSources = this.reconciler.prepareEventSources(context);
+ ownSources.forEach(eventSourceManager::registerEventSource);
// register created event sources
final var dependentResourcesByName =
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java
index bd299b464a..9772c9edd5 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java
@@ -14,7 +14,7 @@
import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager;
import io.javaoperatorsdk.operator.api.config.NamespaceChangeable;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
import io.javaoperatorsdk.operator.processing.Controller;
import io.javaoperatorsdk.operator.processing.LifecycleAware;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
@@ -150,7 +150,7 @@ public final synchronized void registerEventSource(String name, EventSource even
Objects.requireNonNull(eventSource, "EventSource must not be null");
try {
if (name == null || name.isBlank()) {
- name = EventSourceInitializer.generateNameFor(eventSource);
+ name = EventSourceUtils.generateNameFor(eventSource);
}
if (eventSource instanceof ManagedInformerEventSource) {
var managedInformerEventSource = ((ManagedInformerEventSource) eventSource);
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/NamedEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/NamedEventSource.java
index a1d1a601e4..a4e4ead83a 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/NamedEventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/NamedEventSource.java
@@ -4,7 +4,7 @@
import java.util.Optional;
import io.javaoperatorsdk.operator.OperatorException;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
import io.javaoperatorsdk.operator.processing.event.source.Configurable;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.EventSourceStartPriority;
@@ -19,7 +19,7 @@ class NamedEventSource implements EventSource, EventSourceMetadata {
NamedEventSource(EventSource original, String name) {
this.original = original;
this.name = name;
- nameSet = !name.equals(EventSourceInitializer.generateNameFor(original));
+ nameSet = !name.equals(EventSourceUtils.generateNameFor(original));
}
@Override
diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java
index ec2783f797..05a034a7a7 100644
--- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java
+++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java
@@ -7,10 +7,8 @@
/**
* Creates an event source to trigger your reconciler whenever something happens to a secondary or
- * external resource that would not normally trigger your reconciler (as the primary resources are
- * not changed). To register EventSources with so that your reconciler is triggered, please make
- * your reconciler implement
- * {@link io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer}.
+ * external resource that should cause a reconciliation of the primary resource. EventSource
+ * generalizes the concept of Informers and extends it to external (i.e. non Kubernetes) resources.
*/
public interface EventSource extends LifecycleAware, EventSourceHealthIndicator {
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtilsTest.java
similarity index 75%
rename from operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializerTest.java
rename to operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtilsTest.java
index b89ae730ee..b606f1fc1c 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializerTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtilsTest.java
@@ -8,15 +8,15 @@
import static org.assertj.core.api.Assertions.assertThat;
-class EventSourceInitializerTest {
+class EventSourceUtilsTest {
@Test
@SuppressWarnings({"rawtypes", "unchecked"})
void defaultNameDifferentForOtherInstance() {
var eventSource1 = new PollingEventSource(HashMap::new, 1000, String.class);
var eventSource2 = new PollingEventSource(HashMap::new, 1000, String.class);
- var eventSourceName1 = EventSourceInitializer.generateNameFor(eventSource1);
- var eventSourceName2 = EventSourceInitializer.generateNameFor(eventSource2);
+ var eventSourceName1 = EventSourceUtils.generateNameFor(eventSource1);
+ var eventSourceName2 = EventSourceUtils.generateNameFor(eventSource2);
assertThat(eventSourceName1).isNotEqualTo(eventSourceName2);
}
diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java
index 64f0993139..04e0bc0aff 100644
--- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java
+++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java
@@ -11,6 +11,8 @@
import io.javaoperatorsdk.operator.TestUtils;
import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
import io.javaoperatorsdk.operator.api.config.ResolvedControllerConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
+import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.processing.Controller;
import io.javaoperatorsdk.operator.processing.event.EventHandler;
import io.javaoperatorsdk.operator.processing.event.EventSourceManager;
@@ -152,18 +154,21 @@ void genericFilterFiltersOutAddUpdateAndDeleteEvents() {
@SuppressWarnings("unchecked")
private static class TestController extends Controller {
+ private static final Reconciler reconciler =
+ (resource, context) -> UpdateControl.noUpdate();
+
private final EventSourceManager eventSourceManager =
mock(EventSourceManager.class);
public TestController(OnAddFilter onAddFilter,
OnUpdateFilter onUpdateFilter,
GenericFilter genericFilter) {
- super(null, new TestConfiguration(true, onAddFilter, onUpdateFilter, genericFilter),
+ super(reconciler, new TestConfiguration(true, onAddFilter, onUpdateFilter, genericFilter),
MockKubernetesClient.client(TestCustomResource.class));
}
public TestController(boolean generationAware) {
- super(null, new TestConfiguration(generationAware, null, null, null),
+ super(reconciler, new TestConfiguration(generationAware, null, null, null),
MockKubernetesClient.client(TestCustomResource.class));
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/StandaloneBulkDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/StandaloneBulkDependentReconciler.java
index 6af93232b4..ef07bb5520 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/StandaloneBulkDependentReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/bulkdependent/StandaloneBulkDependentReconciler.java
@@ -9,8 +9,7 @@
@ControllerConfiguration
public class StandaloneBulkDependentReconciler
- implements Reconciler, TestExecutionInfoProvider,
- EventSourceInitializer {
+ implements Reconciler, TestExecutionInfoProvider {
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
@@ -38,7 +37,7 @@ public int getNumberOfExecutions() {
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer
+ return EventSourceUtils
.nameEventSources(dependent.initEventSource(context));
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/changenamespace/ChangeNamespaceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/changenamespace/ChangeNamespaceTestReconciler.java
index 7d51f311e1..36a46c9da3 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/changenamespace/ChangeNamespaceTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/changenamespace/ChangeNamespaceTestReconciler.java
@@ -13,8 +13,7 @@
@ControllerConfiguration
public class ChangeNamespaceTestReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
private final ConcurrentHashMap numberOfResourceReconciliations =
new ConcurrentHashMap<>();
@@ -27,7 +26,7 @@ public Map prepareEventSources(
new InformerEventSource<>(InformerConfiguration.from(ConfigMap.class, context)
.build(), context);
- return EventSourceInitializer.nameEventSources(configMapES);
+ return EventSourceUtils.nameEventSources(configMapES);
}
@Override
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/clusterscopedresource/ClusterScopedCustomResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/clusterscopedresource/ClusterScopedCustomResourceReconciler.java
index a6f5e00c96..eedb5ae70b 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/clusterscopedresource/ClusterScopedCustomResourceReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/clusterscopedresource/ClusterScopedCustomResourceReconciler.java
@@ -13,8 +13,7 @@
@ControllerConfiguration
public class ClusterScopedCustomResourceReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
public static final String DATA_KEY = "data-key";
@@ -59,6 +58,6 @@ public Map prepareEventSources(
.withSecondaryToPrimaryMapper(Mappers.fromOwnerReference(true))
.withLabelSelector(TEST_LABEL_KEY + "=" + TEST_LABEL_VALUE)
.build(), context);
- return EventSourceInitializer.nameEventSources(ies);
+ return EventSourceUtils.nameEventSources(ies);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/ComplexDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/ComplexDependentReconciler.java
index 42db07333f..e8fa40c63e 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/ComplexDependentReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/ComplexDependentReconciler.java
@@ -31,8 +31,7 @@
readyPostcondition = StatefulSetReadyCondition.class),
})
@ControllerConfiguration(name = "project-operator")
-public class ComplexDependentReconciler implements Reconciler,
- EventSourceInitializer {
+public class ComplexDependentReconciler implements Reconciler {
public static final String SERVICE_EVENT_SOURCE_NAME = "serviceEventSource";
public static final String STATEFUL_SET_EVENT_SOURCE_NAME = "statefulSetEventSource";
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java
index ab0369d998..d59c87236c 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java
@@ -15,8 +15,7 @@
@ControllerConfiguration
public class CreateUpdateEventFilterTestReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
private static final class DirectConfigMapDependentResource
extends
@@ -97,7 +96,7 @@ public Map prepareEventSources(
informerEventSource = new InformerEventSource<>(informerConfiguration, context.getClient());
this.configMapDR.setEventSource(informerEventSource);
- return EventSourceInitializer.nameEventSources(informerEventSource);
+ return EventSourceUtils.nameEventSources(informerEventSource);
}
public int getNumberOfExecutions() {
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentreinitialization/DependentReInitializationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentreinitialization/DependentReInitializationReconciler.java
index a8e6a48e6b..65916d7a58 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentreinitialization/DependentReInitializationReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentreinitialization/DependentReInitializationReconciler.java
@@ -7,8 +7,7 @@
@ControllerConfiguration
public class DependentReInitializationReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
private final ConfigMapDependentResource configMapDependentResource;
@@ -27,7 +26,7 @@ public UpdateControl reconcile(
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer.nameEventSourcesFromDependentResource(context,
+ return EventSourceUtils.nameEventSourcesFromDependentResource(context,
configMapDependentResource);
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentssa/DependentSSAReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentssa/DependentSSAReconciler.java
index f1c11dea6d..44395ead5e 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentssa/DependentSSAReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentssa/DependentSSAReconciler.java
@@ -11,8 +11,7 @@
@ControllerConfiguration
public class DependentSSAReconciler
- implements Reconciler, TestExecutionInfoProvider,
- EventSourceInitializer {
+ implements Reconciler, TestExecutionInfoProvider {
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
@@ -45,7 +44,7 @@ public int getNumberOfExecutions() {
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer.nameEventSourcesFromDependentResource(context,
+ return EventSourceUtils.nameEventSourcesFromDependentResource(context,
ssaConfigMapDependent);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateDependentReconciler.java
index fd67e7805d..9c2b019adc 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateDependentReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateDependentReconciler.java
@@ -15,7 +15,6 @@
@ControllerConfiguration
public class ExternalStateDependentReconciler
implements Reconciler,
- EventSourceInitializer,
TestExecutionInfoProvider {
public static final String ID_KEY = "id";
@@ -39,7 +38,7 @@ public Map prepareEventSources(
EventSourceContext context) {
var configMapEventSource = new InformerEventSource<>(
InformerConfiguration.from(ConfigMap.class, context).build(), context);
- return EventSourceInitializer.nameEventSources(configMapEventSource);
+ return EventSourceUtils.nameEventSources(configMapEventSource);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
index 66c53c3971..148309cad8 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/ExternalStateReconciler.java
@@ -23,7 +23,6 @@
@ControllerConfiguration()
public class ExternalStateReconciler
implements Reconciler, Cleaner,
- EventSourceInitializer,
TestExecutionInfoProvider {
public static final String ID_KEY = "id";
@@ -116,7 +115,7 @@ public Map prepareEventSources(
return externalResource.map(Set::of).orElseGet(Collections::emptySet);
}, context, Duration.ofMillis(300L), ExternalResource.class);
- return EventSourceInitializer.nameEventSources(configMapEventSource,
+ return EventSourceUtils.nameEventSources(configMapEventSource,
externalResourceEventSource);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java
index dba6623254..a69feabb71 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java
@@ -15,7 +15,6 @@
@ControllerConfiguration
public class ExternalStateBulkDependentReconciler
implements Reconciler,
- EventSourceInitializer,
TestExecutionInfoProvider {
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
@@ -38,7 +37,7 @@ public Map prepareEventSources(
EventSourceContext context) {
var configMapEventSource = new InformerEventSource<>(
InformerConfiguration.from(ConfigMap.class, context).build(), context);
- return EventSourceInitializer.nameEventSources(configMapEventSource);
+ return EventSourceUtils.nameEventSources(configMapEventSource);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/filter/FilterTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/filter/FilterTestReconciler.java
index ab5c9b7400..541e220f4a 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/filter/FilterTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/filter/FilterTestReconciler.java
@@ -12,8 +12,7 @@
@ControllerConfiguration(onUpdateFilter = UpdateFilter.class)
public class FilterTestReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
public static final String CONFIG_MAP_FILTER_VALUE = "config_map_skip_this";
public static final String CUSTOM_RESOURCE_FILTER_VALUE = "custom_resource_skip_this";
@@ -59,6 +58,6 @@ public Map prepareEventSources(
.equals(CONFIG_MAP_FILTER_VALUE))
.build(), context);
- return EventSourceInitializer.nameEventSources(configMapES);
+ return EventSourceUtils.nameEventSources(configMapES);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java
index 1969ad8f2a..1cb1372abe 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java
@@ -7,8 +7,7 @@
@ControllerConfiguration
public class GenericKubernetesDependentStandaloneReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
private final ConfigMapGenericKubernetesDependent dependent =
new ConfigMapGenericKubernetesDependent();
@@ -28,6 +27,6 @@ public UpdateControl reconci
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer.nameEventSources(dependent.eventSource(context).orElseThrow());
+ return EventSourceUtils.nameEventSources(dependent.eventSource(context).orElseThrow());
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java
index 45be0281f6..2b967fa62c 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/generickubernetesresource/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java
@@ -14,8 +14,7 @@
@ControllerConfiguration
public class GenericKubernetesResourceHandlingReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
public static final String VERSION = "v1";
@@ -72,6 +71,6 @@ public Map prepareEventSources(
new GroupVersionKind("", VERSION, KIND), context).build(),
context);
- return EventSourceInitializer.nameEventSources(informerEventSource);
+ return EventSourceUtils.nameEventSources(informerEventSource);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java
index 4acda2feee..927f7e8efd 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java
@@ -16,7 +16,7 @@
public class IndexDiscriminatorTestReconciler
implements Reconciler,
Cleaner,
- TestExecutionInfoProvider, EventSourceInitializer {
+ TestExecutionInfoProvider {
public static final String FIRST_CONFIG_MAP_SUFFIX_1 = "-1";
public static final String FIRST_CONFIG_MAP_SUFFIX_2 = "-2";
@@ -81,7 +81,7 @@ public Map prepareEventSources(
secondDependentResourceConfigMap
.setResourceDiscriminator(
new TestIndexDiscriminator(CONFIG_MAP_INDEX_2, FIRST_CONFIG_MAP_SUFFIX_2));
- return EventSourceInitializer.nameEventSources(eventSource);
+ return EventSourceUtils.nameEventSources(eventSource);
}
public static String configMapKey(ConfigMap configMap) {
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java
index bf92550542..d9a44cb027 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java
@@ -9,12 +9,7 @@
import io.fabric8.kubernetes.api.model.ConfigMap;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers;
@@ -25,8 +20,7 @@
*/
@ControllerConfiguration
public class InformerEventSourceTestCustomReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
private static final Logger LOGGER =
LoggerFactory.getLogger(InformerEventSourceTestCustomReconciler.class);
@@ -46,7 +40,7 @@ public Map prepareEventSources(
.withSecondaryToPrimaryMapper(Mappers.fromAnnotation(RELATED_RESOURCE_NAME))
.build();
- return EventSourceInitializer
+ return EventSourceUtils
.nameEventSources(new InformerEventSource<>(config, context));
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java
index fcb2192539..7a033800af 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java
@@ -16,7 +16,6 @@
@ControllerConfiguration
public class DependentGarbageCollectionTestReconciler
implements Reconciler,
- EventSourceInitializer,
ErrorStatusHandler {
private KubernetesClient kubernetesClient;
@@ -31,7 +30,7 @@ public DependentGarbageCollectionTestReconciler() {
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer.nameEventSourcesFromDependentResource(context,
+ return EventSourceUtils.nameEventSourcesFromDependentResource(context,
configMapDependent);
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresource/MultipleDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresource/MultipleDependentResourceReconciler.java
index 2dc7f6490f..e75764bc77 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresource/MultipleDependentResourceReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresource/MultipleDependentResourceReconciler.java
@@ -14,7 +14,7 @@
@ControllerConfiguration
public class MultipleDependentResourceReconciler
implements Reconciler,
- TestExecutionInfoProvider, EventSourceInitializer {
+ TestExecutionInfoProvider {
public static final int FIRST_CONFIG_MAP_ID = 1;
public static final int SECOND_CONFIG_MAP_ID = 2;
@@ -64,6 +64,6 @@ public Map prepareEventSources(
firstDependentResourceConfigMap.configureWith(eventSource);
secondDependentResourceConfigMap.configureWith(eventSource);
- return EventSourceInitializer.nameEventSources(eventSource);
+ return EventSourceUtils.nameEventSources(eventSource);
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java
index 7cf66614af..8651f13fac 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java
@@ -22,8 +22,7 @@
@ControllerConfiguration
public class MultipleManagedDependentResourceReconciler
implements Reconciler,
- TestExecutionInfoProvider,
- EventSourceInitializer {
+ TestExecutionInfoProvider {
public static final String CONFIG_MAP_EVENT_SOURCE = "ConfigMapEventSource";
public static final String DATA_KEY = "key";
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java
index 0773ff063a..1e7577302b 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java
@@ -26,8 +26,7 @@
@ControllerConfiguration()
public class MultipleManagedExternalDependentResourceReconciler
implements Reconciler,
- TestExecutionInfoProvider,
- EventSourceInitializer {
+ TestExecutionInfoProvider {
public static final String CONFIG_MAP_EVENT_SOURCE = "ConfigMapEventSource";
protected ExternalServiceMock externalServiceMock = ExternalServiceMock.getInstance();
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java
index 8f4ed834aa..1c8e1a1c60 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java
@@ -16,8 +16,7 @@
@ControllerConfiguration
public class MultipleSecondaryEventSourceReconciler
- implements Reconciler, TestExecutionInfoProvider,
- EventSourceInitializer {
+ implements Reconciler, TestExecutionInfoProvider {
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
@@ -76,7 +75,7 @@ public Map prepareEventSources(
}).build();
InformerEventSource configMapEventSource =
new InformerEventSource<>(config, context);
- return EventSourceInitializer.nameEventSources(configMapEventSource);
+ return EventSourceUtils.nameEventSources(configMapEventSource);
}
ConfigMap configMap(String name, MultipleSecondaryEventSourceCustomResource resource) {
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
index 81d8773986..6915d89e40 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java
@@ -12,8 +12,7 @@
@ControllerConfiguration
public class PerResourcePollingEventSourceTestReconciler
- implements Reconciler,
- EventSourceInitializer {
+ implements Reconciler {
public static final int POLL_PERIOD = 100;
private final Map numberOfExecutions = new ConcurrentHashMap<>();
@@ -38,7 +37,7 @@ public Map prepareEventSources(
return Set.of(UUID.randomUUID().toString());
},
context, Duration.ofMillis(POLL_PERIOD), String.class);
- return EventSourceInitializer.nameEventSources(eventSource);
+ return EventSourceUtils.nameEventSources(eventSource);
}
public int getNumberOfExecutions(String name) {
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primaryindexer/PrimaryIndexerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primaryindexer/PrimaryIndexerTestReconciler.java
index 6890a3c8c4..bc05a171cf 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primaryindexer/PrimaryIndexerTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primaryindexer/PrimaryIndexerTestReconciler.java
@@ -7,15 +7,14 @@
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
import io.javaoperatorsdk.operator.processing.event.ResourceID;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
@ControllerConfiguration
public class PrimaryIndexerTestReconciler
- extends AbstractPrimaryIndexerTestReconciler implements
- EventSourceInitializer {
+ extends AbstractPrimaryIndexerTestReconciler {
@Override
public Map prepareEventSources(
@@ -36,7 +35,7 @@ public Map prepareEventSources(
.collect(Collectors.toSet()))
.build();
- return EventSourceInitializer
+ return EventSourceUtils
.nameEventSources(new InformerEventSource<>(informerConfiguration, context));
}
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondary/JobReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondary/JobReconciler.java
index ace158360a..f2f975f248 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondary/JobReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondary/JobReconciler.java
@@ -20,7 +20,7 @@
*/
@ControllerConfiguration()
public class JobReconciler
- implements Reconciler, EventSourceInitializer, ErrorStatusHandler {
+ implements Reconciler, ErrorStatusHandler {
private static final String JOB_CLUSTER_INDEX = "job-cluster-index";
@@ -79,7 +79,7 @@ public Map prepareEventSources(EventSourceContext cont
primary.getSpec().getClusterName(), primary.getMetadata().getNamespace())));
}
- return EventSourceInitializer
+ return EventSourceUtils
.nameEventSources(new InformerEventSource<>(informerConfiguration.build(), context));
}
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java
index fc156bed4f..3283c76a93 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java
@@ -31,8 +31,7 @@
@Dependent(type = SecretDependent.class, dependsOn = CONFIG_MAP)})
@ControllerConfiguration()
public class PrimaryToSecondaryDependentReconciler
- implements Reconciler, TestExecutionInfoProvider,
- EventSourceInitializer {
+ implements Reconciler, TestExecutionInfoProvider {
public static final String DATA_KEY = "data";
public static final String CONFIG_MAP = "ConfigMap";
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java
index 77fcf0b85d..97c2435e3f 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java
@@ -7,14 +7,20 @@
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.javaoperatorsdk.operator.ReconcilerUtils;
import io.javaoperatorsdk.operator.StandaloneDependentResourceIT;
-import io.javaoperatorsdk.operator.api.reconciler.*;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
+import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
+import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
+import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
@ControllerConfiguration
public class StandaloneDependentTestReconciler
implements Reconciler,
- EventSourceInitializer,
ErrorStatusHandler {
private volatile boolean errorOccurred = false;
@@ -27,7 +33,7 @@ public StandaloneDependentTestReconciler() {
@Override
public Map prepareEventSources(
EventSourceContext context) {
- return EventSourceInitializer.nameEventSourcesFromDependentResource(context,
+ return EventSourceUtils.nameEventSourcesFromDependentResource(context,
deploymentDependent);
}
diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java
index 5b87d23aac..0329350fdb 100644
--- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java
+++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java
@@ -20,14 +20,7 @@
import io.fabric8.kubernetes.client.dsl.ExecListener;
import io.fabric8.kubernetes.client.dsl.ExecWatch;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
-import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.processing.event.ResourceID;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper;
@@ -35,7 +28,7 @@
@ControllerConfiguration
public class WebappReconciler
- implements Reconciler, Cleaner, EventSourceInitializer {
+ implements Reconciler, Cleaner {
private static final Logger log = LoggerFactory.getLogger(WebappReconciler.class);
@@ -66,7 +59,7 @@ public Map prepareEventSources(EventSourceContext c
(Webapp primary) -> Set.of(new ResourceID(primary.getSpec().getTomcat(),
primary.getMetadata().getNamespace())))
.build();
- return EventSourceInitializer
+ return EventSourceUtils
.nameEventSources(new InformerEventSource<>(configuration, context));
}
diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java
index 8494af5402..3d3b583659 100644
--- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java
+++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java
@@ -26,7 +26,7 @@
labelSelector = WebPageDependentsWorkflowReconciler.DEPENDENT_RESOURCE_LABEL_SELECTOR)
@SuppressWarnings("unused")
public class WebPageDependentsWorkflowReconciler
- implements Reconciler, ErrorStatusHandler, EventSourceInitializer {
+ implements Reconciler, ErrorStatusHandler {
public static final String DEPENDENT_RESOURCE_LABEL_SELECTOR = "!low-level";
@@ -49,7 +49,7 @@ public WebPageDependentsWorkflowReconciler(KubernetesClient kubernetesClient) {
@Override
public Map prepareEventSources(EventSourceContext context) {
- return EventSourceInitializer.nameEventSourcesFromDependentResource(context, configMapDR,
+ return EventSourceUtils.nameEventSourcesFromDependentResource(context, configMapDR,
deploymentDR, serviceDR,
ingressDR);
}
diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java
index 4be2da11c7..df6ba7ddb8 100644
--- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java
+++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java
@@ -8,46 +8,28 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-import io.fabric8.kubernetes.api.model.ConfigMapVolumeSourceBuilder;
-import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import io.fabric8.kubernetes.api.model.Service;
+import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.dsl.Replaceable;
import io.javaoperatorsdk.operator.ReconcilerUtils;
import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.*;
import io.javaoperatorsdk.operator.api.reconciler.Context;
-import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
-import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
-import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
-import io.javaoperatorsdk.operator.api.reconciler.EventSourceInitializer;
-import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
-import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.processing.event.rate.RateLimited;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource;
import io.javaoperatorsdk.operator.sample.customresource.WebPage;
-import static io.javaoperatorsdk.operator.sample.Utils.configMapName;
-import static io.javaoperatorsdk.operator.sample.Utils.createStatus;
-import static io.javaoperatorsdk.operator.sample.Utils.deploymentName;
-import static io.javaoperatorsdk.operator.sample.Utils.handleError;
-import static io.javaoperatorsdk.operator.sample.Utils.isValidHtml;
-import static io.javaoperatorsdk.operator.sample.Utils.makeDesiredIngress;
-import static io.javaoperatorsdk.operator.sample.Utils.serviceName;
-import static io.javaoperatorsdk.operator.sample.Utils.setInvalidHtmlErrorMessage;
-import static io.javaoperatorsdk.operator.sample.Utils.simulateErrorIfRequested;
+import static io.javaoperatorsdk.operator.sample.Utils.*;
import static io.javaoperatorsdk.operator.sample.WebPageManagedDependentsReconciler.SELECTOR;
/** Shows how to implement reconciler using the low level api directly. */
@RateLimited(maxReconciliations = 2, within = 3)
@ControllerConfiguration
public class WebPageReconciler
- implements Reconciler, ErrorStatusHandler, EventSourceInitializer {
+ implements Reconciler, ErrorStatusHandler {
public static final String INDEX_HTML = "index.html";
@@ -77,7 +59,7 @@ public Map prepareEventSources(EventSourceContext
new InformerEventSource<>(InformerConfiguration.from(Ingress.class, context)
.withLabelSelector(SELECTOR)
.build(), context);
- return EventSourceInitializer.nameEventSources(configMapEventSource, deploymentEventSource,
+ return EventSourceUtils.nameEventSources(configMapEventSource, deploymentEventSource,
serviceEventSource, ingressEventSource);
}
diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java
index 1799d72cea..4e4fa22b6b 100644
--- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java
+++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java
@@ -3,53 +3,70 @@
import java.util.Arrays;
import java.util.Map;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import io.fabric8.kubernetes.api.model.ConfigMap;
-import io.javaoperatorsdk.operator.api.reconciler.*;
+import io.javaoperatorsdk.operator.api.reconciler.Context;
+import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
+import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler;
+import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusUpdateControl;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceContext;
+import io.javaoperatorsdk.operator.api.reconciler.EventSourceUtils;
+import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
+import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfigBuilder;
import io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow;
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowBuilder;
import io.javaoperatorsdk.operator.processing.event.source.EventSource;
import io.javaoperatorsdk.operator.sample.customresource.WebPage;
-import io.javaoperatorsdk.operator.sample.dependentresource.*;
+import io.javaoperatorsdk.operator.sample.dependentresource.ConfigMapDependentResource;
+import io.javaoperatorsdk.operator.sample.dependentresource.DeploymentDependentResource;
+import io.javaoperatorsdk.operator.sample.dependentresource.ExposedIngressCondition;
+import io.javaoperatorsdk.operator.sample.dependentresource.IngressDependentResource;
+import io.javaoperatorsdk.operator.sample.dependentresource.ServiceDependentResource;
import static io.javaoperatorsdk.operator.sample.Utils.*;
import static io.javaoperatorsdk.operator.sample.WebPageManagedDependentsReconciler.SELECTOR;
/**
- * Shows how to implement reconciler using standalone dependent resources.
+ * Shows how to implement reconciler using standalone dependent resources and workflows.
*/
@ControllerConfiguration
public class WebPageStandaloneDependentsReconciler
- implements Reconciler, ErrorStatusHandler, EventSourceInitializer {
-
- private static final Logger log =
- LoggerFactory.getLogger(WebPageStandaloneDependentsReconciler.class);
+ implements Reconciler, ErrorStatusHandler {
- private Workflow workflow;
+ private final Workflow workflow;
public WebPageStandaloneDependentsReconciler() {
+ // initialize the workflow
workflow = createDependentResourcesAndWorkflow();
}
@Override
public Map prepareEventSources(EventSourceContext context) {
- return EventSourceInitializer.eventSourcesFromWorkflow(context, workflow);
+ // initializes the dependents' event sources from the given context
+ return EventSourceUtils.eventSourcesFromWorkflow(context, workflow);
}
@Override
public UpdateControl reconcile(WebPage webPage, Context context)
throws Exception {
+ // for testing purposes
simulateErrorIfRequested(webPage);
+ // validate the html page and update the status with an error message if it isn't valid
if (!isValidHtml(webPage)) {
return UpdateControl.patchStatus(setInvalidHtmlErrorMessage(webPage));
}
+ // Explicitly reconcile the dependent resources.
+ // Calling the workflow reconciliation explicitly allows control over the workflow customization
+ // but also *when* dependents are reconciled (as opposed to before the main reconciler's
+ // reconcile method in the managed case).
+ // With the default configuration, this will throw an exception if one of the dependents
+ // couldn't be properly reconciled
workflow.reconcile(webPage, context);
+ // retrieve the name of the ConfigMap secondary resource to update the status if everything went
+ // well
webPage.setStatus(
createStatus(
context.getSecondaryResource(ConfigMap.class).orElseThrow().getMetadata().getName()));
@@ -62,25 +79,37 @@ public ErrorStatusUpdateControl updateErrorStatus(
return handleError(resource, e);
}
+ /**
+ * Initializes the dependent resources and connect them in the context of a {@link Workflow}
+ *
+ * @return the {@link Workflow} that will reconcile automatically secondary resources
+ */
@SuppressWarnings({"unchecked", "rawtypes"})
private Workflow createDependentResourcesAndWorkflow() {
+ // create the dependent resources
var configMapDR = new ConfigMapDependentResource();
var deploymentDR = new DeploymentDependentResource();
var serviceDR = new ServiceDependentResource();
var ingressDR = new IngressDependentResource();
+ // configure them with our label selector
Arrays.asList(configMapDR, deploymentDR, serviceDR, ingressDR)
.forEach(dr -> dr.configureWith(new KubernetesDependentResourceConfigBuilder()
.withLabelSelector(SELECTOR + "=true").build()));
+ // connect the dependent resources into a workflow, configuring them as we go
+ // Note the method call order is significant and configuration applies to the dependent being
+ // configured as defined by the method call order (in this example, the reconcile pre-condition
+ // that is added applies to the Ingress dependent)
return new WorkflowBuilder()
.addDependentResource(configMapDR)
.addDependentResource(deploymentDR)
.addDependentResource(serviceDR)
.addDependentResource(ingressDR)
+ // prevent the Ingress from being created based on the linked condition (here: only if the
+ // `exposed` flag is set in the primary resource), delete the Ingress if it already exists
+ // and the condition becomes false
.withReconcilePrecondition(new ExposedIngressCondition())
.build();
}
-
-
}