From 603cd76046c401ca1b896f780b977a5e5c574bdb Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 10 Mar 2022 14:46:31 +0100 Subject: [PATCH 1/2] feat: dependent resource inherints namespaces from controller config --- .../informer/InformerConfiguration.java | 3 +- .../api/reconciler/EventSourceContext.java | 22 +++++----- .../operator/processing/Controller.java | 41 +++++++++---------- .../KubernetesDependentResource.java | 3 +- 4 files changed, 34 insertions(+), 35 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java index 0d08b65f99..ee8c30773b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java @@ -105,7 +105,8 @@ public InformerConfiguration build() { static InformerConfigurationBuilder from( EventSourceContext

context, Class resourceClass) { - return new InformerConfigurationBuilder<>(resourceClass, context.getConfigurationService()); + return new InformerConfigurationBuilder<>(resourceClass, context.getControllerConfiguration() + .getConfigurationService()); } static InformerConfigurationBuilder from(ConfigurationService configurationService, diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java index ba32f493ec..9f49c3b737 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java @@ -2,7 +2,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.client.KubernetesClient; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.processing.event.source.EventSource; import io.javaoperatorsdk.operator.processing.event.source.ResourceCache; @@ -14,13 +14,14 @@ public class EventSourceContext

{ private final ResourceCache

primaryCache; - private final ConfigurationService configurationService; + private final ControllerConfiguration

controllerConfiguration; private final KubernetesClient client; public EventSourceContext(ResourceCache

primaryCache, - ConfigurationService configurationService, KubernetesClient client) { + ControllerConfiguration

controllerConfiguration, + KubernetesClient client) { this.primaryCache = primaryCache; - this.configurationService = configurationService; + this.controllerConfiguration = controllerConfiguration; this.client = client; } @@ -34,16 +35,13 @@ public ResourceCache

getPrimaryCache() { } /** - * Retrieves the {@link ConfigurationService} associated with the operator. This allows, in - * particular, to lookup global configuration information such as the configured - * {@link io.javaoperatorsdk.operator.api.monitoring.Metrics} or - * {@link io.javaoperatorsdk.operator.api.config.Cloner} implementations, which could be useful to - * event sources. + * Retrieves the {@link ControllerConfiguration} associated with the operator. This allows, in + * particular, to lookup controller and global configuration information such as the configured* * - * @return the {@link ConfigurationService} associated with the operator + * @return the {@link ControllerConfiguration} associated with the operator */ - public ConfigurationService getConfigurationService() { - return configurationService; + public ControllerConfiguration

getControllerConfiguration() { + return controllerConfiguration; } /** 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 a6c1979421..5e527a0ab0 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 @@ -36,21 +36,21 @@ @SuppressWarnings({"unchecked"}) @Ignore -public class Controller implements Reconciler, - LifecycleAware, EventSourceInitializer { +public class Controller

implements Reconciler

, + LifecycleAware, EventSourceInitializer

{ private static final Logger log = LoggerFactory.getLogger(Controller.class); - private final Reconciler reconciler; - private final ControllerConfiguration configuration; + private final Reconciler

reconciler; + private final ControllerConfiguration

configuration; private final KubernetesClient kubernetesClient; - private final EventSourceManager eventSourceManager; - private final DependentResourceManager dependents; + private final EventSourceManager

eventSourceManager; + private final DependentResourceManager

dependents; private ConfigurationService configurationService; - public Controller(Reconciler reconciler, - ControllerConfiguration configuration, + public Controller(Reconciler

reconciler, + ControllerConfiguration

configuration, KubernetesClient kubernetesClient) { this.reconciler = reconciler; this.configuration = configuration; @@ -61,7 +61,7 @@ public Controller(Reconciler reconciler, } @Override - public DeleteControl cleanup(R resource, Context context) { + public DeleteControl cleanup(P resource, Context context) { dependents.cleanup(resource, context); return metrics().timeControllerExecution( @@ -89,7 +89,7 @@ public DeleteControl execute() { } @Override - public UpdateControl reconcile(R resource, Context context) { + public UpdateControl

reconcile(P resource, Context context) { dependents.reconcile(resource, context); return metrics().timeControllerExecution( @@ -105,7 +105,7 @@ public String controllerName() { } @Override - public String successTypeName(UpdateControl result) { + public String successTypeName(UpdateControl

result) { String successType = "resource"; if (result.isUpdateStatus()) { successType = "status"; @@ -117,7 +117,7 @@ public String successTypeName(UpdateControl result) { } @Override - public UpdateControl execute() { + public UpdateControl

execute() { return reconciler.reconcile(resource, context); } }); @@ -130,13 +130,13 @@ private Metrics metrics() { } @Override - public List prepareEventSources(EventSourceContext context) { + public List prepareEventSources(EventSourceContext

context) { final var dependentSources = dependents.prepareEventSources(context); List sources = new LinkedList<>(dependentSources); // add manually defined event sources if (reconciler instanceof EventSourceInitializer) { - sources.addAll(((EventSourceInitializer) reconciler).prepareEventSources(context)); + sources.addAll(((EventSourceInitializer

) reconciler).prepareEventSources(context)); } return sources; } @@ -164,11 +164,11 @@ public String toString() { return "'" + configuration.getName() + "' Controller"; } - public Reconciler getReconciler() { + public Reconciler

getReconciler() { return reconciler; } - public ControllerConfiguration getConfiguration() { + public ControllerConfiguration

getConfiguration() { return configuration; } @@ -176,7 +176,7 @@ public KubernetesClient getClient() { return kubernetesClient; } - public MixedOperation, Resource> getCRClient() { + public MixedOperation, Resource

> getCRClient() { return kubernetesClient.resources(configuration.getResourceClass()); } @@ -189,7 +189,7 @@ public MixedOperation, Resource> getCRClient() { * @throws OperatorException if a problem occurred during the registration process */ public void start() throws OperatorException { - final Class resClass = configuration.getResourceClass(); + final Class

resClass = configuration.getResourceClass(); final String controllerName = configuration.getName(); final var crdName = configuration.getResourceTypeName(); final var specVersion = "v1"; @@ -215,8 +215,7 @@ public void start() throws OperatorException { } final var context = new EventSourceContext<>( - eventSourceManager.getControllerResourceEventSource(), - configurationService(), kubernetesClient); + eventSourceManager.getControllerResourceEventSource(), configuration, kubernetesClient); prepareEventSources(context).forEach(eventSourceManager::registerEventSource); @@ -273,7 +272,7 @@ private void failOnMissingCurrentNS() { } } - public EventSourceManager getEventSourceManager() { + public EventSourceManager

getEventSourceManager() { return eventSourceManager; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index c94cec73d8..8f364949b2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -129,7 +129,8 @@ protected NonNamespaceOperation, Resource> prepa @Override public EventSource initEventSource(EventSourceContext

context) { if (informerEventSource == null) { - configureWith(context.getConfigurationService(), null, null, + configureWith(context.getControllerConfiguration().getConfigurationService(), null, + context.getControllerConfiguration().getNamespaces(), KubernetesDependent.ADD_OWNER_REFERENCE_DEFAULT); log.warn("Using default configuration for " + resourceType().getSimpleName() + " KubernetesDependentResource, call configureWith to provide configuration"); From 1cbd06376e0747942842b1034241b1300a09cf16 Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 10 Mar 2022 15:15:48 +0100 Subject: [PATCH 2/2] fix: Using ControllerConfiguration in context instead of ConfigService --- .../operator/api/reconciler/Context.java | 7 ++++--- .../operator/api/reconciler/DefaultContext.java | 12 ++++++------ .../operator/api/reconciler/Reconciler.java | 4 ++-- .../dependent/AbstractDependentResource.java | 16 ++++++++-------- .../api/reconciler/dependent/Creator.java | 2 +- .../api/reconciler/dependent/Deleter.java | 2 +- .../reconciler/dependent/DependentResource.java | 4 ++-- .../dependent/DesiredEqualsMatcher.java | 2 +- .../api/reconciler/dependent/Matcher.java | 2 +- .../api/reconciler/dependent/Updater.java | 4 ++-- .../operator/processing/Controller.java | 4 ++-- .../dependent/DependentResourceManager.java | 4 ++-- .../AbstractSimpleDependentResource.java | 8 ++++---- .../GenericKubernetesResourceMatcher.java | 5 +++-- .../GenericResourceUpdatePreProcessor.java | 3 ++- .../kubernetes/KubernetesDependentResource.java | 8 ++++---- .../event/ReconciliationDispatcher.java | 4 ++-- .../GenericKubernetesResourceMatcherTest.java | 5 ++++- .../GenericResourceUpdatePreProcessorTest.java | 5 ++++- .../event/ReconciliationDispatcherTest.java | 2 +- .../ErrorStatusHandlerTestReconciler.java | 3 ++- .../sample/retry/RetryTestCustomReconciler.java | 2 +- .../StandaloneDependentTestReconciler.java | 3 ++- .../operator/sample/MySQLSchemaReconciler.java | 2 +- .../dependent/SchemaDependentResource.java | 6 +++--- .../operator/sample/TomcatReconciler.java | 2 +- .../operator/sample/WebappReconciler.java | 4 ++-- .../operator/sample/WebPageReconciler.java | 2 +- .../WebPageReconcilerDependentResources.java | 2 +- 29 files changed, 70 insertions(+), 59 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java index 2f203fa07c..2c3fb6ff1e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java @@ -2,10 +2,11 @@ import java.util.Optional; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.fabric8.kubernetes.api.model.HasMetadata; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.dependent.ManagedDependentResourceContext; -public interface Context { +public interface Context

{ Optional getRetryInfo(); @@ -15,7 +16,7 @@ default Optional getSecondaryResource(Class expectedType) { Optional getSecondaryResource(Class expectedType, String eventSourceName); - ConfigurationService getConfigurationService(); + ControllerConfiguration

getControllerConfiguration(); ManagedDependentResourceContext managedDependentResourceContext(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java index 33f640789b..96084ffd1f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java @@ -3,23 +3,23 @@ import java.util.Optional; import io.fabric8.kubernetes.api.model.HasMetadata; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.dependent.ManagedDependentResourceContext; import io.javaoperatorsdk.operator.processing.Controller; -public class DefaultContext

implements Context { +public class DefaultContext

implements Context

{ private final RetryInfo retryInfo; private final Controller

controller; private final P primaryResource; - private final ConfigurationService configurationService; + private final ControllerConfiguration

controllerConfiguration; private ManagedDependentResourceContext managedDependentResourceContext; public DefaultContext(RetryInfo retryInfo, Controller

controller, P primaryResource) { this.retryInfo = retryInfo; this.controller = controller; this.primaryResource = primaryResource; - this.configurationService = controller.getConfiguration().getConfigurationService(); + this.controllerConfiguration = controller.getConfiguration(); this.managedDependentResourceContext = new ManagedDependentResourceContext( controller.getDependents()); } @@ -37,8 +37,8 @@ public Optional getSecondaryResource(Class expectedType, String eventS } @Override - public ConfigurationService getConfigurationService() { - return configurationService; + public ControllerConfiguration

getControllerConfiguration() { + return controllerConfiguration; } public ManagedDependentResourceContext managedDependentResourceContext() { 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 2b725afd73..0be4d58ae5 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 @@ -13,7 +13,7 @@ public interface Reconciler { * @return UpdateControl to manage updates on the custom resource (usually the status) after * reconciliation. */ - UpdateControl reconcile(R resource, Context context); + UpdateControl reconcile(R resource, Context context); /** * Note that this method is used in combination with finalizers. If automatic finalizer handling @@ -37,7 +37,7 @@ public interface Reconciler { * finalizer to indicate that the resource should not be deleted after all, in which case * the controller should restore the resource's state appropriately. */ - default DeleteControl cleanup(R resource, Context context) { + default DeleteControl cleanup(R resource, Context context) { return DeleteControl.defaultDelete(); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java index af727b66eb..3e4414a009 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/AbstractDependentResource.java @@ -36,7 +36,7 @@ public AbstractDependentResource() { } @Override - public void reconcile(P primary, Context context) { + public void reconcile(P primary, Context

context) { final var creatable = isCreatable(primary, context); final var updatable = isUpdatable(primary, context); if (creatable || updatable) { @@ -67,7 +67,7 @@ public void reconcile(P primary, Context context) { } } - protected void handleCreate(R desired, P primary, Context context) { + protected void handleCreate(R desired, P primary, Context

context) { ResourceID resourceID = ResourceID.fromResource(primary); R created = null; try { @@ -107,7 +107,7 @@ private void prepareEventFiltering(R desired, ResourceID resourceID) { } } - protected void handleUpdate(R actual, R desired, P primary, Context context) { + protected void handleUpdate(R actual, R desired, P primary, Context

context) { ResourceID resourceID = ResourceID.fromResource(primary); R updated = null; try { @@ -131,29 +131,29 @@ private RecentOperationCacheFiller eventSourceAsRecentOperationCacheFiller() } @Override - public void cleanup(P primary, Context context) { + public void cleanup(P primary, Context

context) { if (isDeletable(primary, context)) { deleter.delete(primary, context); } } - protected R desired(P primary, Context context) { + protected R desired(P primary, Context

context) { throw new IllegalStateException( "desired method must be implemented if this DependentResource can be created and/or updated"); } @SuppressWarnings("unused") - protected boolean isCreatable(P primary, Context context) { + protected boolean isCreatable(P primary, Context

context) { return creatable; } @SuppressWarnings("unused") - protected boolean isUpdatable(P primary, Context context) { + protected boolean isUpdatable(P primary, Context

context) { return updatable; } @SuppressWarnings("unused") - protected boolean isDeletable(P primary, Context context) { + protected boolean isDeletable(P primary, Context

context) { return deletable; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Creator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Creator.java index 223203b2b0..48af8fb61b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Creator.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Creator.java @@ -5,5 +5,5 @@ @FunctionalInterface public interface Creator { - R create(R desired, P primary, Context context); + R create(R desired, P primary, Context

context); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Deleter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Deleter.java index b81ffc0380..0a1bfc1bab 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Deleter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Deleter.java @@ -5,5 +5,5 @@ @FunctionalInterface public interface Deleter

{ - void delete(P primary, Context context); + void delete(P primary, Context

context); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java index 239ac58d0b..8fc3cea73f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DependentResource.java @@ -6,9 +6,9 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; public interface DependentResource { - void reconcile(P primary, Context context); + void reconcile(P primary, Context

context); - default void cleanup(P primary, Context context) {} + default void cleanup(P primary, Context

context) {} Optional getResource(P primaryResource); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DesiredEqualsMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DesiredEqualsMatcher.java index 99470bf1d5..2cf8b155ff 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DesiredEqualsMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/DesiredEqualsMatcher.java @@ -12,7 +12,7 @@ public DesiredEqualsMatcher(AbstractDependentResource abstractDependentRes } @Override - public Result match(R actualResource, P primary, Context context) { + public Result match(R actualResource, P primary, Context

context) { var desired = abstractDependentResource.desired(primary, context); return Result.computed(actualResource.equals(desired), desired); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Matcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Matcher.java index f0c5bd7fd9..09e78911e6 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Matcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Matcher.java @@ -32,5 +32,5 @@ public Optional computedDesired() { } } - Result match(R actualResource, P primary, Context context); + Result match(R actualResource, P primary, Context

context); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Updater.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Updater.java index 25e0567781..d49ccc632e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Updater.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/Updater.java @@ -5,7 +5,7 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Matcher.Result; public interface Updater { - R update(R actual, R desired, P primary, Context context); + R update(R actual, R desired, P primary, Context

context); - Result match(R actualResource, P primary, Context context); + Result match(R actualResource, P primary, Context

context); } 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 5e527a0ab0..5c432bf95e 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 @@ -61,7 +61,7 @@ public Controller(Reconciler

reconciler, } @Override - public DeleteControl cleanup(P resource, Context context) { + public DeleteControl cleanup(P resource, Context

context) { dependents.cleanup(resource, context); return metrics().timeControllerExecution( @@ -89,7 +89,7 @@ public DeleteControl execute() { } @Override - public UpdateControl

reconcile(P resource, Context context) { + public UpdateControl

reconcile(P resource, Context

context) { dependents.reconcile(resource, context); return metrics().timeControllerExecution( diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceManager.java index 554f019d81..3dd3a2860e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceManager.java @@ -63,14 +63,14 @@ public List prepareEventSources(EventSourceContext

context) { } @Override - public UpdateControl

reconcile(P resource, Context context) { + public UpdateControl

reconcile(P resource, Context

context) { initContextIfNeeded(resource, context); dependents.forEach(dependent -> dependent.reconcile(resource, context)); return UpdateControl.noUpdate(); } @Override - public DeleteControl cleanup(P resource, Context context) { + public DeleteControl cleanup(P resource, Context

context) { initContextIfNeeded(resource, context); dependents.forEach(dependent -> dependent.cleanup(resource, context)); return Reconciler.super.cleanup(resource, context); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResource.java index 564646b217..e7a0edd549 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/AbstractSimpleDependentResource.java @@ -43,26 +43,26 @@ public Optional getResource(HasMetadata primaryResource) { public abstract Optional fetchResource(HasMetadata primaryResource); @Override - public void reconcile(P primary, Context context) { + public void reconcile(P primary, Context

context) { var resourceId = ResourceID.fromResource(primary); Optional resource = fetchResource(primary); resource.ifPresentOrElse(r -> cache.put(resourceId, r), () -> cache.remove(resourceId)); super.reconcile(primary, context); } - public void cleanup(P primary, Context context) { + public void cleanup(P primary, Context

context) { super.cleanup(primary, context); cache.remove(ResourceID.fromResource(primary)); } @Override - protected void handleCreate(R desired, P primary, Context context) { + protected void handleCreate(R desired, P primary, Context

context) { var res = this.creator.create(desired, primary, context); cache.put(ResourceID.fromResource(primary), res); } @Override - protected void handleUpdate(R actual, R desired, P primary, Context context) { + protected void handleUpdate(R actual, R desired, P primary, Context

context) { var res = updater.update(actual, desired, primary, context); cache.put(ResourceID.fromResource(primary), res); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java index 25d7c098d5..5bde08b0aa 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java @@ -39,8 +39,9 @@ static Matcher matcherFor( } @Override - public Result match(R actualResource, P primary, Context context) { - final var objectMapper = context.getConfigurationService().getObjectMapper(); + public Result match(R actualResource, P primary, Context

context) { + final var objectMapper = + context.getControllerConfiguration().getConfigurationService().getObjectMapper(); final var desired = dependentResource.desired(primary, context); // reflection will be replaced by this: diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessor.java index b33719f64e..ce73a409cd 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessor.java @@ -44,7 +44,8 @@ protected void updateClonedActual(R actual, R desired) { } public R replaceSpecOnActual(R actual, R desired, Context context) { - var clonedActual = context.getConfigurationService().getResourceCloner().clone(actual); + var clonedActual = context.getControllerConfiguration().getConfigurationService() + .getResourceCloner().clone(actual); updateClonedActual(clonedActual, desired); return clonedActual; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index 8f364949b2..900f9ce42a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -92,11 +92,11 @@ public void configureWith( this.addOwnerReference = addOwnerReference; } - public R create(R target, P primary, Context context) { + public R create(R target, P primary, Context

context) { return prepare(target, primary, "Creating").create(target); } - public R update(R actual, R target, P primary, Context context) { + public R update(R actual, R target, P primary, Context

context) { var updatedActual = processor.replaceSpecOnActual(actual, target, context); return prepare(target, primary, "Updating").replace(updatedActual); } @@ -105,7 +105,7 @@ public Result match(R actualResource, P primary, Context context) { return matcher.match(actualResource, primary, context); } - public void delete(P primary, Context context) { + public void delete(P primary, Context

context) { if (!addOwnerReference) { var resource = getResource(primary); resource.ifPresent(r -> client.resource(r).delete()); @@ -160,7 +160,7 @@ public void setKubernetesClient(KubernetesClient kubernetesClient) { } @Override - protected R desired(P primary, Context context) { + protected R desired(P primary, Context

context) { return super.desired(primary, context); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java index 14ba12636a..2a14e8a69b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java @@ -163,11 +163,11 @@ && shouldUpdateObservedGenerationAutomatically(resourceForExecution)) { return createPostExecutionControl(updatedCustomResource, updateControl); } - private void handleErrorStatusHandler(R resource, Context context, + private void handleErrorStatusHandler(R resource, Context context, RuntimeException e) { if (isErrorStatusHandlerPresent()) { try { - var retryInfo = context.getRetryInfo().orElse(new RetryInfo() { + RetryInfo retryInfo = context.getRetryInfo().orElse(new RetryInfo() { @Override public int getAttemptCount() { return 0; diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java index 3ae424cdfb..4621e4700e 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java @@ -9,6 +9,7 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; import io.javaoperatorsdk.operator.ReconcilerUtils; import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Context; import com.fasterxml.jackson.databind.ObjectMapper; @@ -22,8 +23,10 @@ class GenericKubernetesResourceMatcherTest { private static final Context context = mock(Context.class); static { final var configurationService = mock(ConfigurationService.class); + final var controllerConfiguration = mock(ControllerConfiguration.class); when(configurationService.getObjectMapper()).thenReturn(new ObjectMapper()); - when(context.getConfigurationService()).thenReturn(configurationService); + when(controllerConfiguration.getConfigurationService()).thenReturn(configurationService); + when(context.getControllerConfiguration()).thenReturn(controllerConfiguration); } @Test diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java index 941738ad7f..6c763d20fe 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdatePreProcessorTest.java @@ -7,6 +7,7 @@ import io.fabric8.kubernetes.api.model.apps.Deployment; import io.javaoperatorsdk.operator.ReconcilerUtils; import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.dependent.ResourceUpdatePreProcessor; @@ -20,8 +21,10 @@ class GenericResourceUpdatePreProcessorTest { static { final var configurationService = mock(ConfigurationService.class); + final var controllerConfiguration = mock(ControllerConfiguration.class); + when(controllerConfiguration.getConfigurationService()).thenReturn(configurationService); when(configurationService.getResourceCloner()).thenReturn(ConfigurationService.DEFAULT_CLONER); - when(context.getConfigurationService()).thenReturn(configurationService); + when(context.getControllerConfiguration()).thenReturn(controllerConfiguration); } ResourceUpdatePreProcessor processor = diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java index f67909056d..f07d88db1e 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java @@ -296,7 +296,7 @@ public boolean isLastAttempt() { ArgumentCaptor.forClass(Context.class); verify(reconciler, times(1)) .reconcile(any(), contextArgumentCaptor.capture()); - Context context = contextArgumentCaptor.getValue(); + Context context = contextArgumentCaptor.getValue(); final var retryInfo = context.getRetryInfo().get(); assertThat(retryInfo.getAttemptCount()).isEqualTo(2); assertThat(retryInfo.isLastAttempt()).isEqualTo(true); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/errorstatushandler/ErrorStatusHandlerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/errorstatushandler/ErrorStatusHandlerTestReconciler.java index 0ce67d30c3..c3b8632e02 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/errorstatushandler/ErrorStatusHandlerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/errorstatushandler/ErrorStatusHandlerTestReconciler.java @@ -22,7 +22,8 @@ public class ErrorStatusHandlerTestReconciler @Override public UpdateControl reconcile( - ErrorStatusHandlerTestCustomResource resource, Context context) { + ErrorStatusHandlerTestCustomResource resource, + Context context) { var number = numberOfExecutions.addAndGet(1); var retryAttempt = -1; if (context.getRetryInfo().isPresent()) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/retry/RetryTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/retry/RetryTestCustomReconciler.java index a76b5b0113..8ccd7c2160 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/retry/RetryTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/retry/RetryTestCustomReconciler.java @@ -31,7 +31,7 @@ public RetryTestCustomReconciler(int numberOfExecutionFails) { @Override public UpdateControl reconcile(RetryTestCustomResource resource, - Context context) { + Context context) { numberOfExecutions.addAndGet(1); if (!resource.getMetadata().getFinalizers().contains(FINALIZER_NAME)) { 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 12b7f9506e..aa8689e471 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 @@ -85,7 +85,8 @@ private static class DeploymentDependentResource extends Updater { @Override - protected Deployment desired(StandaloneDependentTestCustomResource primary, Context context) { + protected Deployment desired(StandaloneDependentTestCustomResource primary, + Context context) { Deployment deployment = ReconcilerUtils.loadYaml(Deployment.class, getClass(), "nginx-deployment.yaml"); deployment.getMetadata().setName(primary.getMetadata().getName()); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java index 140047a3b4..eb66f918ab 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java @@ -35,7 +35,7 @@ public MySQLSchemaReconciler() {} @Override - public UpdateControl reconcile(MySQLSchema schema, Context context) { + public UpdateControl reconcile(MySQLSchema schema, Context context) { // we only need to update the status if we just built the schema, i.e. when it's present in the // context Secret secret = context.getSecondaryResource(Secret.class).orElseThrow(); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java index f1fbc4b642..f5a5e9ea18 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java @@ -42,12 +42,12 @@ public void configureWith(ResourcePollerConfig config) { } @Override - public Schema desired(MySQLSchema primary, Context context) { + public Schema desired(MySQLSchema primary, Context context) { return new Schema(primary.getMetadata().getName(), primary.getSpec().getEncoding()); } @Override - public Schema create(Schema target, MySQLSchema mySQLSchema, Context context) { + public Schema create(Schema target, MySQLSchema mySQLSchema, Context context) { try (Connection connection = getConnection()) { Secret secret = context.getSecondaryResource(Secret.class).orElseThrow(); var username = decode(secret.getData().get(MYSQL_SECRET_USERNAME)); @@ -70,7 +70,7 @@ private Connection getConnection() throws SQLException { } @Override - public void delete(MySQLSchema primary, Context context) { + public void delete(MySQLSchema primary, Context context) { try (Connection connection = getConnection()) { var userName = primary.getStatus() != null ? primary.getStatus().getUserName() : null; SchemaService.deleteSchemaAndRelatedUser(connection, primary.getMetadata().getName(), diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java index 416d7f3ee0..dfad4533e3 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java @@ -30,7 +30,7 @@ public class TomcatReconciler implements Reconciler { private final Logger log = LoggerFactory.getLogger(getClass()); @Override - public UpdateControl reconcile(Tomcat tomcat, Context context) { + public UpdateControl reconcile(Tomcat tomcat, Context context) { return context.getSecondaryResource(Deployment.class).map(deployment -> { Tomcat updatedTomcat = updateTomcatStatus(tomcat, deployment); log.info( 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 9e10c39ca8..aabeefbf46 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 @@ -79,7 +79,7 @@ public List prepareEventSources(EventSourceContext context) * change. */ @Override - public UpdateControl reconcile(Webapp webapp, Context context) { + public UpdateControl reconcile(Webapp webapp, Context context) { if (webapp.getStatus() != null && Objects.equals(webapp.getSpec().getUrl(), webapp.getStatus().getDeployedArtifact())) { return UpdateControl.noUpdate(); @@ -120,7 +120,7 @@ public UpdateControl reconcile(Webapp webapp, Context context) { } @Override - public DeleteControl cleanup(Webapp webapp, Context context) { + public DeleteControl cleanup(Webapp webapp, Context context) { String[] command = new String[] {"rm", "/data/" + webapp.getSpec().getContextPath() + ".war"}; String[] commandStatusInAllPods = executeCommandInAllPods(kubernetesClient, webapp, command); 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 90fb61251f..ef0c2f5d17 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 @@ -56,7 +56,7 @@ public List prepareEventSources(EventSourceContext context } @Override - public UpdateControl reconcile(WebPage webPage, Context context) { + public UpdateControl reconcile(WebPage webPage, Context context) { log.info("Reconciling web page: {}", webPage); if (webPage.getSpec().getHtml().contains("error")) { throw new ErrorSimulationException("Simulating error"); diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconcilerDependentResources.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconcilerDependentResources.java index b4f6db1395..ef1d4d5703 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconcilerDependentResources.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconcilerDependentResources.java @@ -128,7 +128,7 @@ protected Class resourceType() { new CrudKubernetesDependentResource<>() { @Override - protected Service desired(WebPage webPage, Context context) { + protected Service desired(WebPage webPage, Context context) { Service service = loadYaml(Service.class, getClass(), "service.yaml"); service.getMetadata().setName(serviceName(webPage)); service.getMetadata().setNamespace(webPage.getMetadata().getNamespace());