From ce68419029f526877ec8dfb26c6b0e805087e7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 20 Mar 2024 10:26:33 +0100 Subject: [PATCH 1/3] feat: remove resource discriminator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/api/reconciler/Context.java | 5 +- .../api/reconciler/DefaultContext.java | 6 --- .../api/reconciler/IndexDiscriminator.java | 50 ------------------- .../api/reconciler/ResourceDiscriminator.java | 11 ---- .../ResourceIDMatcherDiscriminator.java | 45 ----------------- .../dependent/AbstractDependentResource.java | 20 +++----- .../kubernetes/KubernetesDependent.java | 3 -- .../KubernetesDependentConverter.java | 7 +-- .../KubernetesDependentResource.java | 8 --- .../KubernetesDependentResourceConfig.java | 13 +---- ...ernetesDependentResourceConfigBuilder.java | 10 +--- .../dependent/FirstService.java | 9 +--- .../dependent/FirstStatefulSet.java | 10 +--- .../NamePrefixResourceDiscriminator.java | 31 ------------ .../dependent/SecondService.java | 9 +--- .../dependent/SecondStatefulSet.java | 8 +-- .../IndexDiscriminatorTestReconciler.java | 6 --- .../TestIndexDiscriminator.java | 14 ------ ...ntResourceWithDiscriminatorReconciler.java | 12 ----- .../ConfigMap1MultiInformerDiscriminator.java | 28 ----------- .../ConfigMap2MultiInformerDiscriminator.java | 28 ----------- ...endentResourceMultiInformerConfigMap1.java | 2 +- ...endentResourceMultiInformerConfigMap2.java | 2 +- .../ConfigMap1Discriminator.java | 26 ---------- .../ConfigMap2Discriminator.java | 26 ---------- ...pleManagedDependentResourceConfigMap1.java | 2 +- ...pleManagedDependentResourceConfigMap2.java | 2 +- .../ExternalDependentResource1.java | 4 -- .../ExternalDependentResource2.java | 4 -- .../ExternalResourceDiscriminator.java | 25 ---------- .../ConfigMapDependentResource1.java | 12 +---- .../ConfigMapDependentResource2.java | 12 +---- 32 files changed, 21 insertions(+), 429 deletions(-) delete mode 100644 operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/IndexDiscriminator.java delete mode 100644 operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java delete mode 100644 operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceIDMatcherDiscriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/NamePrefixResourceDiscriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/TestIndexDiscriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap1MultiInformerDiscriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap2MultiInformerDiscriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap1Discriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap2Discriminator.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalResourceDiscriminator.java 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 a997835822..27547703b7 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 @@ -17,7 +17,7 @@ public interface Context

{ Optional getRetryInfo(); default Optional getSecondaryResource(Class expectedType) { - return getSecondaryResource(expectedType, (String) null); + return getSecondaryResource(expectedType, null); } Set getSecondaryResources(Class expectedType); @@ -29,9 +29,6 @@ default Stream getSecondaryResourcesAsStream(Class expectedType) { @Deprecated(forRemoval = true) Optional getSecondaryResource(Class expectedType, String eventSourceName); - Optional getSecondaryResource(Class expectedType, - ResourceDiscriminator discriminator); - ControllerConfiguration

getControllerConfiguration(); /** 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 9ff7ddd7a3..86f29e6878 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 @@ -68,12 +68,6 @@ public Optional getSecondaryResource(Class expectedType, String eventS .getSecondaryResource(primaryResource); } - @Override - public Optional getSecondaryResource(Class expectedType, - ResourceDiscriminator discriminator) { - return discriminator.distinguish(expectedType, primaryResource, this); - } - @Override public ControllerConfiguration

getControllerConfiguration() { return controllerConfiguration; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/IndexDiscriminator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/IndexDiscriminator.java deleted file mode 100644 index 7a27397b26..0000000000 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/IndexDiscriminator.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.javaoperatorsdk.operator.api.reconciler; - -import java.util.Optional; -import java.util.function.Function; - -import io.fabric8.kubernetes.api.model.HasMetadata; -import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; - -/** - * Uses a custom index of {@link InformerEventSource} to access the target resource. The index needs - * to be explicitly created when the event source is defined. This approach improves the performance - * to access the resource. - */ -public class IndexDiscriminator - implements ResourceDiscriminator { - - private final String indexName; - private final String eventSourceName; - private final Function keyMapper; - - public IndexDiscriminator(String indexName, Function keyMapper) { - this(indexName, null, keyMapper); - } - - public IndexDiscriminator(String indexName, String eventSourceName, - Function keyMapper) { - this.indexName = indexName; - this.eventSourceName = eventSourceName; - this.keyMapper = keyMapper; - } - - @Override - public Optional distinguish(Class resource, - P primary, - Context

context) { - - InformerEventSource eventSource = - (InformerEventSource) context - .eventSourceRetriever() - .getResourceEventSourceFor(resource, eventSourceName); - var resources = eventSource.byIndex(indexName, keyMapper.apply(primary)); - if (resources.isEmpty()) { - return Optional.empty(); - } else if (resources.size() > 1) { - throw new IllegalStateException("More than one resource found"); - } else { - return Optional.of(resources.get(0)); - } - } -} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java deleted file mode 100644 index 072e7d8078..0000000000 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.javaoperatorsdk.operator.api.reconciler; - -import java.util.Optional; - -import io.fabric8.kubernetes.api.model.HasMetadata; - -public interface ResourceDiscriminator { - - Optional distinguish(Class resource, P primary, Context

context); - -} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceIDMatcherDiscriminator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceIDMatcherDiscriminator.java deleted file mode 100644 index da773fc210..0000000000 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceIDMatcherDiscriminator.java +++ /dev/null @@ -1,45 +0,0 @@ -package io.javaoperatorsdk.operator.api.reconciler; - -import java.util.Optional; -import java.util.function.Function; - -import io.fabric8.kubernetes.api.model.HasMetadata; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -import io.javaoperatorsdk.operator.processing.event.source.Cache; - -public class ResourceIDMatcherDiscriminator - implements ResourceDiscriminator { - - - private final String eventSourceName; - private final Function mapper; - - public ResourceIDMatcherDiscriminator(Function mapper) { - this(null, mapper); - } - - public ResourceIDMatcherDiscriminator(String eventSourceName, Function mapper) { - this.eventSourceName = eventSourceName; - this.mapper = mapper; - } - - @SuppressWarnings("unchecked") - @Override - public Optional distinguish(Class resource, P primary, Context

context) { - var resourceID = mapper.apply(primary); - if (eventSourceName != null) { - return ((Cache) context.eventSourceRetriever().getResourceEventSourceFor(resource, - eventSourceName)) - .get(resourceID); - } else { - var eventSources = context.eventSourceRetriever().getResourceEventSourcesFor(resource); - if (eventSources.size() == 1) { - return ((Cache) eventSources.get(0)).get(resourceID); - } else { - return context.getSecondaryResourcesAsStream(resource) - .filter(resourceID::isSameResource) - .findFirst(); - } - } - } -} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java index 590affe617..05c5b26a0e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java @@ -9,7 +9,6 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.Ignore; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter; import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; import io.javaoperatorsdk.operator.api.reconciler.dependent.NameSetter; @@ -28,7 +27,6 @@ public abstract class AbstractDependentResource protected Creator creator; protected Updater updater; - private ResourceDiscriminator resourceDiscriminator; private final DependentResourceReconciler dependentResourceReconciler; protected String name; @@ -98,16 +96,14 @@ protected ReconcileResult reconcile(P primary, R actualResource, Context

c @Override public Optional getSecondaryResource(P primary, Context

context) { - if (resourceDiscriminator != null) { - return resourceDiscriminator.distinguish(resourceType(), primary, context); + + var secondaryResources = context.getSecondaryResources(resourceType()); + if (secondaryResources.isEmpty()) { + return Optional.empty(); } else { - var secondaryResources = context.getSecondaryResources(resourceType()); - if (secondaryResources.isEmpty()) { - return Optional.empty(); - } else { - return selectManagedSecondaryResource(secondaryResources, primary, context); - } + return selectManagedSecondaryResource(secondaryResources, primary, context); } + } /** @@ -198,10 +194,6 @@ protected void handleDelete(P primary, R secondary, Context

context) { "handleDelete method must be implemented if Deleter trait is supported"); } - public void setResourceDiscriminator(ResourceDiscriminator resourceDiscriminator) { - this.resourceDiscriminator = resourceDiscriminator; - } - protected boolean isCreatable() { return creatable; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java index eb4c9cf9b0..572741dcbd 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java @@ -6,7 +6,6 @@ import java.lang.annotation.Target; import io.javaoperatorsdk.operator.api.reconciler.Constants; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter; @@ -70,8 +69,6 @@ */ Class genericFilter() default GenericFilter.class; - Class resourceDiscriminator() default ResourceDiscriminator.class; - /** * Creates the resource only if did not exist before, this applies only if SSA is used. */ diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java index 7a434aecf1..493f0b0146 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java @@ -8,7 +8,6 @@ import io.javaoperatorsdk.operator.api.config.Utils; import io.javaoperatorsdk.operator.api.config.dependent.ConfigurationConverter; import io.javaoperatorsdk.operator.api.reconciler.Constants; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter; @@ -33,7 +32,6 @@ public KubernetesDependentResourceConfig configFrom(KubernetesDependent confi OnUpdateFilter onUpdateFilter = null; OnDeleteFilter onDeleteFilter = null; GenericFilter genericFilter = null; - ResourceDiscriminator resourceDiscriminator = null; Boolean useSSA = null; if (configAnnotation != null) { if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES, configAnnotation.namespaces())) { @@ -54,9 +52,6 @@ public KubernetesDependentResourceConfig configFrom(KubernetesDependent confi genericFilter = Utils.instantiate(configAnnotation.genericFilter(), GenericFilter.class, context); - resourceDiscriminator = - Utils.instantiate(configAnnotation.resourceDiscriminator(), ResourceDiscriminator.class, - context); createResourceOnlyIfNotExistingWithSSA = configAnnotation.createResourceOnlyIfNotExistingWithSSA(); useSSA = configAnnotation.useSSA().asBoolean(); @@ -64,6 +59,6 @@ public KubernetesDependentResourceConfig configFrom(KubernetesDependent confi return new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS, createResourceOnlyIfNotExistingWithSSA, - resourceDiscriminator, useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter); + useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter); } } 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 edc7491469..2fe4d2bea6 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 @@ -61,10 +61,6 @@ public KubernetesDependentResource(Class resourceType, String name) { @Override public void configureWith(KubernetesDependentResourceConfig config) { this.kubernetesDependentResourceConfig = config; - var discriminator = kubernetesDependentResourceConfig.getResourceDiscriminator(); - if (discriminator != null) { - setResourceDiscriminator(discriminator); - } } private void configureWith(String labelSelector, Set namespaces, @@ -259,10 +255,6 @@ protected InformerEventSource createEventSource(EventSourceContext

cont onUpdateFilter = kubernetesDependentResourceConfig.onUpdateFilter(); onDeleteFilter = kubernetesDependentResourceConfig.onDeleteFilter(); genericFilter = kubernetesDependentResourceConfig.genericFilter(); - var discriminator = kubernetesDependentResourceConfig.getResourceDiscriminator(); - if (discriminator != null) { - setResourceDiscriminator(discriminator); - } configureWith(kubernetesDependentResourceConfig.labelSelector(), kubernetesDependentResourceConfig.namespaces(), !kubernetesDependentResourceConfig.wereNamespacesConfigured(), context); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java index 9b3838831d..b1cb743232 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java @@ -4,7 +4,6 @@ import java.util.Set; import io.javaoperatorsdk.operator.api.reconciler.Constants; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter; @@ -20,7 +19,6 @@ public class KubernetesDependentResourceConfig { private String labelSelector; private final boolean namespacesWereConfigured; private final boolean createResourceOnlyIfNotExistingWithSSA; - private final ResourceDiscriminator resourceDiscriminator; private final Boolean useSSA; private final OnAddFilter onAddFilter; @@ -31,7 +29,7 @@ public class KubernetesDependentResourceConfig { public KubernetesDependentResourceConfig() { this(Constants.SAME_AS_CONTROLLER_NAMESPACES_SET, NO_VALUE_SET, true, DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA, - null, null, null, + null, null, null, null, null); } @@ -39,7 +37,6 @@ public KubernetesDependentResourceConfig(Set namespaces, String labelSelector, boolean configuredNS, boolean createResourceOnlyIfNotExistingWithSSA, - ResourceDiscriminator resourceDiscriminator, Boolean useSSA, OnAddFilter onAddFilter, OnUpdateFilter onUpdateFilter, @@ -52,7 +49,6 @@ public KubernetesDependentResourceConfig(Set namespaces, this.onUpdateFilter = onUpdateFilter; this.onDeleteFilter = onDeleteFilter; this.genericFilter = genericFilter; - this.resourceDiscriminator = resourceDiscriminator; this.useSSA = useSSA; } @@ -60,7 +56,7 @@ public KubernetesDependentResourceConfig(Set namespaces, @Deprecated(forRemoval = true) public KubernetesDependentResourceConfig(Set namespaces, String labelSelector) { this(namespaces, labelSelector, true, DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA, - null, null, null, + null, null, null, null, null); } @@ -104,11 +100,6 @@ public GenericFilter genericFilter() { return genericFilter; } - @SuppressWarnings("rawtypes") - public ResourceDiscriminator getResourceDiscriminator() { - return resourceDiscriminator; - } - @SuppressWarnings("unused") protected void setNamespaces(Set namespaces) { if (!wereNamespacesConfigured() && namespaces != null && !namespaces.isEmpty()) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java index a18d8b8a41..854ec7a56f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java @@ -3,7 +3,6 @@ import java.util.Set; import io.javaoperatorsdk.operator.api.reconciler.Constants; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter; import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter; @@ -14,7 +13,6 @@ public final class KubernetesDependentResourceConfigBuilder { private Set namespaces = Constants.SAME_AS_CONTROLLER_NAMESPACES_SET; private String labelSelector; private boolean createResourceOnlyIfNotExistingWithSSA; - private ResourceDiscriminator resourceDiscriminator; private Boolean useSSA; private OnAddFilter onAddFilter; private OnUpdateFilter onUpdateFilter; @@ -43,12 +41,6 @@ public KubernetesDependentResourceConfigBuilder withCreateResourceOnlyIfNotEx return this; } - public KubernetesDependentResourceConfigBuilder withResourceDiscriminator( - ResourceDiscriminator resourceDiscriminator) { - this.resourceDiscriminator = resourceDiscriminator; - return this; - } - public KubernetesDependentResourceConfigBuilder withUseSSA(Boolean useSSA) { this.useSSA = useSSA; return this; @@ -80,7 +72,7 @@ public KubernetesDependentResourceConfigBuilder withGenericFilter( public KubernetesDependentResourceConfig build() { return new KubernetesDependentResourceConfig<>(namespaces, labelSelector, namespaces != Constants.SAME_AS_CONTROLLER_NAMESPACES_SET, - createResourceOnlyIfNotExistingWithSSA, resourceDiscriminator, useSSA, onAddFilter, + createResourceOnlyIfNotExistingWithSSA, useSSA, onAddFilter, onUpdateFilter, onDeleteFilter, genericFilter); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstService.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstService.java index b6b0513254..f568ce08e5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstService.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstService.java @@ -1,9 +1,8 @@ package io.javaoperatorsdk.operator.sample.complexdependent.dependent; -import io.fabric8.kubernetes.api.model.Service; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(resourceDiscriminator = FirstService.Discriminator.class) +@KubernetesDependent public class FirstService extends BaseService { public static final String DISCRIMINATOR_PREFIX = "first"; @@ -11,10 +10,4 @@ public FirstService() { super(DISCRIMINATOR_PREFIX); } - public static class Discriminator extends NamePrefixResourceDiscriminator { - protected Discriminator() { - super(DISCRIMINATOR_PREFIX); - } - } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstStatefulSet.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstStatefulSet.java index f50b94fe5f..d5740616b2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstStatefulSet.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/FirstStatefulSet.java @@ -1,9 +1,8 @@ package io.javaoperatorsdk.operator.sample.complexdependent.dependent; -import io.fabric8.kubernetes.api.model.apps.StatefulSet; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(resourceDiscriminator = FirstStatefulSet.Discriminator.class) +@KubernetesDependent public class FirstStatefulSet extends BaseStatefulSet { public static final String DISCRIMINATOR_PREFIX = "first"; @@ -12,11 +11,4 @@ public FirstStatefulSet() { super(DISCRIMINATOR_PREFIX); } - - public static class Discriminator extends NamePrefixResourceDiscriminator { - protected Discriminator() { - super(DISCRIMINATOR_PREFIX); - } - } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/NamePrefixResourceDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/NamePrefixResourceDiscriminator.java deleted file mode 100644 index eef8566c78..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/NamePrefixResourceDiscriminator.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.javaoperatorsdk.operator.sample.complexdependent.dependent; - -import java.util.Optional; -import java.util.stream.Collectors; - -import io.fabric8.kubernetes.api.model.HasMetadata; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.sample.complexdependent.ComplexDependentCustomResource; - -public abstract class NamePrefixResourceDiscriminator - implements ResourceDiscriminator { - - private final String prefix; - - protected NamePrefixResourceDiscriminator(String prefix) { - this.prefix = prefix; - } - - @Override - public Optional distinguish(Class resource, ComplexDependentCustomResource primary, - Context context) { - var resources = context.getSecondaryResources(resource); - var filtered = resources.stream().filter(r -> r.getMetadata().getName().startsWith(prefix)) - .collect(Collectors.toList()); - if (filtered.size() > 1) { - throw new IllegalStateException("More resources than expected for" + primary); - } - return filtered.isEmpty() ? Optional.empty() : Optional.of(filtered.get(0)); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondService.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondService.java index c939d1c2e6..ee6f5210d0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondService.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondService.java @@ -1,9 +1,8 @@ package io.javaoperatorsdk.operator.sample.complexdependent.dependent; -import io.fabric8.kubernetes.api.model.Service; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(resourceDiscriminator = SecondService.Discriminator.class) +@KubernetesDependent() public class SecondService extends BaseService { public static final String DISCRIMINATOR_PREFIX = "second"; @@ -11,10 +10,4 @@ public class SecondService extends BaseService { public SecondService() { super(DISCRIMINATOR_PREFIX); } - - public static class Discriminator extends NamePrefixResourceDiscriminator { - protected Discriminator() { - super(DISCRIMINATOR_PREFIX); - } - } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondStatefulSet.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondStatefulSet.java index 7a07682c57..3786d90c00 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondStatefulSet.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/complexdependent/dependent/SecondStatefulSet.java @@ -1,9 +1,8 @@ package io.javaoperatorsdk.operator.sample.complexdependent.dependent; -import io.fabric8.kubernetes.api.model.apps.StatefulSet; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(resourceDiscriminator = SecondStatefulSet.Discriminator.class) +@KubernetesDependent public class SecondStatefulSet extends BaseStatefulSet { public static final String DISCRIMINATOR_PREFIX = "second"; @@ -12,9 +11,4 @@ public SecondStatefulSet() { super(DISCRIMINATOR_PREFIX); } - public static class Discriminator extends NamePrefixResourceDiscriminator { - protected Discriminator() { - super(DISCRIMINATOR_PREFIX); - } - } } 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 927f7e8efd..39c7bc02a9 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 @@ -75,12 +75,6 @@ public Map prepareEventSources( firstDependentResourceConfigMap.configureWith(eventSource); secondDependentResourceConfigMap.configureWith(eventSource); - firstDependentResourceConfigMap - .setResourceDiscriminator( - new TestIndexDiscriminator(CONFIG_MAP_INDEX_1, FIRST_CONFIG_MAP_SUFFIX_1)); - secondDependentResourceConfigMap - .setResourceDiscriminator( - new TestIndexDiscriminator(CONFIG_MAP_INDEX_2, FIRST_CONFIG_MAP_SUFFIX_2)); return EventSourceUtils.nameEventSources(eventSource); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/TestIndexDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/TestIndexDiscriminator.java deleted file mode 100644 index a56e44ced8..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/TestIndexDiscriminator.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.reconciler.IndexDiscriminator; - -import static io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestReconciler.configMapKeyFromPrimary; - -public class TestIndexDiscriminator - extends IndexDiscriminator { - - public TestIndexDiscriminator(String indexName, String nameSuffix) { - super(indexName, p -> configMapKeyFromPrimary(p, nameSuffix)); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresourcewithdiscriminator/MultipleDependentResourceWithDiscriminatorReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresourcewithdiscriminator/MultipleDependentResourceWithDiscriminatorReconciler.java index aae9d23cc7..f82d178bcb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresourcewithdiscriminator/MultipleDependentResourceWithDiscriminatorReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentresourcewithdiscriminator/MultipleDependentResourceWithDiscriminatorReconciler.java @@ -6,7 +6,6 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; 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.informer.InformerEventSource; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; @@ -26,17 +25,6 @@ public class MultipleDependentResourceWithDiscriminatorReconciler public MultipleDependentResourceWithDiscriminatorReconciler() { firstDependentResourceConfigMap = new MultipleDependentResourceConfigMap(FIRST_CONFIG_MAP_ID); secondDependentResourceConfigMap = new MultipleDependentResourceConfigMap(SECOND_CONFIG_MAP_ID); - - firstDependentResourceConfigMap - .setResourceDiscriminator( - new ResourceIDMatcherDiscriminator<>( - p -> new ResourceID(p.getConfigMapName(FIRST_CONFIG_MAP_ID), - p.getMetadata().getNamespace()))); - secondDependentResourceConfigMap - .setResourceDiscriminator( - new ResourceIDMatcherDiscriminator<>( - p -> new ResourceID(p.getConfigMapName(SECOND_CONFIG_MAP_ID), - p.getMetadata().getNamespace()))); } @Override diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap1MultiInformerDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap1MultiInformerDiscriminator.java deleted file mode 100644 index 32cf830bc1..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap1MultiInformerDiscriminator.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.javaoperatorsdk.operator.sample.multipledependentsametypemultiinformer; - -import java.util.Optional; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; - -import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceConfigMap1.NAME_SUFFIX; - -public class ConfigMap1MultiInformerDiscriminator - implements - ResourceDiscriminator { - @Override - public Optional distinguish(Class resource, - MultipleManagedDependentResourceMultiInformerCustomResource primary, - Context context) { - InformerEventSource ies = - (InformerEventSource) context - .eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class, - MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_1_DR); - - return ies.get(new ResourceID(primary.getMetadata().getName() + NAME_SUFFIX, - primary.getMetadata().getNamespace())); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap2MultiInformerDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap2MultiInformerDiscriminator.java deleted file mode 100644 index cc6a0a656e..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/ConfigMap2MultiInformerDiscriminator.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.javaoperatorsdk.operator.sample.multipledependentsametypemultiinformer; - -import java.util.Optional; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; - -import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceConfigMap2.NAME_SUFFIX; - -public class ConfigMap2MultiInformerDiscriminator - implements - ResourceDiscriminator { - @Override - public Optional distinguish(Class resource, - MultipleManagedDependentResourceMultiInformerCustomResource primary, - Context context) { - InformerEventSource ies = - (InformerEventSource) context - .eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class, - MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_2_DR); - - return ies.get(new ResourceID(primary.getMetadata().getName() + NAME_SUFFIX, - primary.getMetadata().getNamespace())); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java index 2a63b7267e..510ea37075 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java @@ -10,7 +10,7 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; import io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceReconciler; -@KubernetesDependent(resourceDiscriminator = ConfigMap1MultiInformerDiscriminator.class) +@KubernetesDependent public class MultipleManagedDependentResourceMultiInformerConfigMap1 extends CRUDKubernetesDependentResource { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java index 8db20cac14..2d27e162a7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java @@ -11,7 +11,7 @@ import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceReconciler.DATA_KEY; -@KubernetesDependent(resourceDiscriminator = ConfigMap2MultiInformerDiscriminator.class) +@KubernetesDependent public class MultipleManagedDependentResourceMultiInformerConfigMap2 extends CRUDKubernetesDependentResource { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap1Discriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap1Discriminator.java deleted file mode 100644 index cc20dfa45e..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap1Discriminator.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype; - -import java.util.Optional; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; - -import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceConfigMap1.NAME_SUFFIX; - -public class ConfigMap1Discriminator - implements ResourceDiscriminator { - @Override - public Optional distinguish(Class resource, - MultipleManagedDependentResourceCustomResource primary, - Context context) { - InformerEventSource ies = - (InformerEventSource) context - .eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class); - - return ies.get(new ResourceID(primary.getMetadata().getName() + NAME_SUFFIX, - primary.getMetadata().getNamespace())); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap2Discriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap2Discriminator.java deleted file mode 100644 index 8bda6afcee..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/ConfigMap2Discriminator.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype; - -import java.util.Optional; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; - -import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceConfigMap2.NAME_SUFFIX; - -public class ConfigMap2Discriminator - implements ResourceDiscriminator { - @Override - public Optional distinguish(Class resource, - MultipleManagedDependentResourceCustomResource primary, - Context context) { - InformerEventSource ies = - (InformerEventSource) context - .eventSourceRetriever().getResourceEventSourceFor(ConfigMap.class); - - return ies.get(new ResourceID(primary.getMetadata().getName() + NAME_SUFFIX, - primary.getMetadata().getNamespace())); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java index 98f8033076..8fe7cf5330 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java @@ -9,7 +9,7 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(resourceDiscriminator = ConfigMap1Discriminator.class) +@KubernetesDependent public class MultipleManagedDependentResourceConfigMap1 extends CRUDKubernetesDependentResource { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java index d4cdd4170f..b76f108d6b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java @@ -11,7 +11,7 @@ import static io.javaoperatorsdk.operator.sample.multiplemanageddependentsametype.MultipleManagedDependentResourceReconciler.DATA_KEY; -@KubernetesDependent(resourceDiscriminator = ConfigMap2Discriminator.class) +@KubernetesDependent public class MultipleManagedDependentResourceConfigMap2 extends CRUDKubernetesDependentResource { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource1.java index cfe67a3796..4dee39e8e6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource1.java @@ -4,10 +4,6 @@ public class ExternalDependentResource1 extends AbstractExternalDependentResourc public static final String SUFFIX = "-1"; - public ExternalDependentResource1() { - setResourceDiscriminator(new ExternalResourceDiscriminator(SUFFIX)); - } - @Override protected String resourceIDSuffix() { return SUFFIX; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource2.java index 29bb237e1a..b37aa65bdf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalDependentResource2.java @@ -4,10 +4,6 @@ public class ExternalDependentResource2 extends AbstractExternalDependentResourc public static final String SUFFIX = "-2"; - public ExternalDependentResource2() { - setResourceDiscriminator(new ExternalResourceDiscriminator(SUFFIX)); - } - @Override protected String resourceIDSuffix() { return SUFFIX; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalResourceDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalResourceDiscriminator.java deleted file mode 100644 index 5a394113c1..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/multiplemanagedexternaldependenttype/ExternalResourceDiscriminator.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.javaoperatorsdk.operator.sample.multiplemanagedexternaldependenttype; - -import java.util.Optional; - -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; -import io.javaoperatorsdk.operator.support.ExternalResource; - -public class ExternalResourceDiscriminator implements - ResourceDiscriminator { - - private final String suffix; - - public ExternalResourceDiscriminator(String suffix) { - this.suffix = suffix; - } - - @Override - public Optional distinguish(Class resource, - MultipleManagedExternalDependentResourceCustomResource primary, - Context context) { - var resources = context.getSecondaryResources(ExternalResource.class); - return resources.stream().filter(r -> r.getId().endsWith(suffix)).findFirst(); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java index bf8d60d9c4..14530cf17e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource1.java @@ -6,14 +6,11 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceIDMatcherDiscriminator; import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -@KubernetesDependent(labelSelector = "dependent = cm1", - resourceDiscriminator = ConfigMapDependentResource1.CM1ResourceDiscriminator.class) +@KubernetesDependent(labelSelector = "dependent = cm1") public class ConfigMapDependentResource1 extends CRUDKubernetesDependentResource { @@ -45,11 +42,4 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary, return configMap; } - public static class CM1ResourceDiscriminator - extends ResourceIDMatcherDiscriminator { - public CM1ResourceDiscriminator() { - super(p -> new ResourceID(p.getMetadata().getName() + "1", p.getMetadata().getNamespace())); - } - } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource2.java index 2b17d615b9..35ae69586e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/orderedmanageddependent/ConfigMapDependentResource2.java @@ -6,14 +6,11 @@ import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.api.reconciler.ResourceIDMatcherDiscriminator; import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -import io.javaoperatorsdk.operator.processing.event.ResourceID; -@KubernetesDependent(labelSelector = "dependent = cm2", - resourceDiscriminator = ConfigMapDependentResource2.CM2ResourceDiscriminator.class) +@KubernetesDependent(labelSelector = "dependent = cm2") public class ConfigMapDependentResource2 extends CRUDKubernetesDependentResource { @@ -45,11 +42,4 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary, return configMap; } - public static class CM2ResourceDiscriminator - extends ResourceIDMatcherDiscriminator { - public CM2ResourceDiscriminator() { - super(p -> new ResourceID(p.getMetadata().getName() + "2", p.getMetadata().getNamespace())); - } - } - } From 7c225ffe08d7e17e61253d0f11ebe9f857c4da3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 20 Mar 2024 10:35:26 +0100 Subject: [PATCH 2/3] docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- docs/documentation/dependent-resources.md | 6 ------ docs/documentation/v5-0-migration.md | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/documentation/dependent-resources.md b/docs/documentation/dependent-resources.md index db7a00fda8..5c6d1437e9 100644 --- a/docs/documentation/dependent-resources.md +++ b/docs/documentation/dependent-resources.md @@ -318,12 +318,6 @@ There might be casees, though, where it might be problematic to call the `desire - Override the `managedSecondaryResourceID` method, if your `DependentResource` extends `KubernetesDependentResource`, where it's very often possible to easily determine the `ResourceID` of the secondary resource. This would probably be the easiest solution if you're working with Kubernetes resources. -- Configure - a [`ResourceDiscriminator`](https://github.com/java-operator-sdk/java-operator-sdk/blob/main/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ResourceDiscriminator.java) - implementation for your `DependentResource`. This was the approach that was used before JOSDK v5 but should not be - needed anymore as it is simpler and more efficient to override one the methods above instead of creating a separate - class. Discriminators can be declaratively set when using managed Kubernetes dependent resources via - the `resourceDiscriminator` field of the `@KubernetesDependent` annotation. ### Sharing an Event Source Between Dependent Resources diff --git a/docs/documentation/v5-0-migration.md b/docs/documentation/v5-0-migration.md index b34a7a6b21..01b483449e 100644 --- a/docs/documentation/v5-0-migration.md +++ b/docs/documentation/v5-0-migration.md @@ -26,3 +26,5 @@ permalink: /docs/v5-0-migration Also, the related part of a [workaround](https://github.com/operator-framework/java-operator-sdk/blob/main/operator-framework/src/test/java/io/javaoperatorsdk/operator/StatusPatchSSAMigrationIT.java#L110-L116). 4. `ManagedDependentResourceContext` has been renamed to `ManagedWorkflowAndDependentResourceContext` and is accessed via the accordingly renamed `managedWorkflowAndDependentResourceContext` method. +5. `ResourceDiscriminator` was removed. In most of the cases you can just delete the discriminator, everything should + work without it by default. To optimize and handle special cases see the relevant section in [Dependent Resource documentation](/docs/dependent-resources#multiple-dependent-resources-of-same-type). From 17b4e72fc5337d6d4e085adb62829a074b17e82a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 20 Mar 2024 11:00:03 +0100 Subject: [PATCH 3/3] removed index discriminator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/IndexDiscriminatorIT.java | 77 --------------- .../IndexDiscriminatorTestCustomResource.java | 16 --- .../IndexDiscriminatorTestDRConfigMap.java | 38 ------- .../IndexDiscriminatorTestReconciler.java | 98 ------------------- .../IndexDiscriminatorTestSpec.java | 15 --- .../IndexDiscriminatorTestStatus.java | 5 - 6 files changed, 249 deletions(-) delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/IndexDiscriminatorIT.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestCustomResource.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestDRConfigMap.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestSpec.java delete mode 100644 operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestStatus.java diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/IndexDiscriminatorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/IndexDiscriminatorIT.java deleted file mode 100644 index fe5b63de8a..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/IndexDiscriminatorIT.java +++ /dev/null @@ -1,77 +0,0 @@ -package io.javaoperatorsdk.operator; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; -import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; -import io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestCustomResource; -import io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestReconciler; -import io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestSpec; - -import static io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestDRConfigMap.DATA_KEY; -import static io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestReconciler.FIRST_CONFIG_MAP_SUFFIX_1; -import static io.javaoperatorsdk.operator.sample.indexdiscriminator.IndexDiscriminatorTestReconciler.FIRST_CONFIG_MAP_SUFFIX_2; -import static org.assertj.core.api.Assertions.assertThat; -import static org.awaitility.Awaitility.await; - -class IndexDiscriminatorIT { - - public static final String TEST_RESOURCE_1 = "test1"; - public static final String CHANGED_SPEC_VALUE = "otherValue"; - @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(IndexDiscriminatorTestReconciler.class) - .build(); - - @Test - void resourcesFoundAndReconciled() { - var res = operator.create(createTestCustomResource()); - var reconciler = operator.getReconcilerOfType(IndexDiscriminatorTestReconciler.class); - - await().untilAsserted(() -> { - assertThat(reconciler.getNumberOfExecutions()).isEqualTo(1); - assertThat(operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_1)) - .isNotNull(); - assertThat(operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_2)) - .isNotNull(); - }); - - res.getSpec().setValue(CHANGED_SPEC_VALUE); - res = operator.replace(res); - - await().untilAsserted(() -> { - assertThat(reconciler.getNumberOfExecutions()).isEqualTo(2); - var cm1 = operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_1); - var cm2 = operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_2); - assertThat(cm1).isNotNull(); - assertThat(cm2).isNotNull(); - assertThat(cm1.getData().get(DATA_KEY)).isEqualTo(CHANGED_SPEC_VALUE); - assertThat(cm2.getData().get(DATA_KEY)).isEqualTo(CHANGED_SPEC_VALUE); - }); - - operator.delete(res); - - await().untilAsserted(() -> { - var cm1 = operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_1); - var cm2 = operator.get(ConfigMap.class, TEST_RESOURCE_1 + FIRST_CONFIG_MAP_SUFFIX_2); - assertThat(cm1).isNull(); - assertThat(cm2).isNull(); - }); - } - - public IndexDiscriminatorTestCustomResource createTestCustomResource() { - IndexDiscriminatorTestCustomResource resource = - new IndexDiscriminatorTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(TEST_RESOURCE_1) - .withNamespace(operator.getNamespace()) - .build()); - resource.setSpec(new IndexDiscriminatorTestSpec()); - resource.getSpec().setValue("default"); - return resource; - } - -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestCustomResource.java deleted file mode 100644 index 729b1d80eb..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestCustomResource.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -import io.fabric8.kubernetes.api.model.Namespaced; -import io.fabric8.kubernetes.client.CustomResource; -import io.fabric8.kubernetes.model.annotation.Group; -import io.fabric8.kubernetes.model.annotation.ShortNames; -import io.fabric8.kubernetes.model.annotation.Version; - -@Group("sample.javaoperatorsdk") -@Version("v1") -@ShortNames("idt") -public class IndexDiscriminatorTestCustomResource - extends CustomResource - implements Namespaced { - -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestDRConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestDRConfigMap.java deleted file mode 100644 index 88dc40f55c..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestDRConfigMap.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -import java.util.HashMap; -import java.util.Map; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.fabric8.kubernetes.api.model.ConfigMapBuilder; -import io.javaoperatorsdk.operator.api.reconciler.Context; -import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; - -@KubernetesDependent -public class IndexDiscriminatorTestDRConfigMap - extends CRUDNoGCKubernetesDependentResource { - - public static final String DATA_KEY = "key"; - private final String suffix; - - public IndexDiscriminatorTestDRConfigMap(String value) { - super(ConfigMap.class); - this.suffix = value; - } - - @Override - protected ConfigMap desired(IndexDiscriminatorTestCustomResource primary, - Context context) { - Map data = new HashMap<>(); - data.put(DATA_KEY, primary.getSpec().getValue()); - - return new ConfigMapBuilder() - .withNewMetadata() - .withName(primary.getMetadata().getName() + suffix) - .withNamespace(primary.getMetadata().getNamespace()) - .endMetadata() - .withData(data) - .build(); - } -} 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 deleted file mode 100644 index 39c7bc02a9..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestReconciler.java +++ /dev/null @@ -1,98 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; - -import io.fabric8.kubernetes.api.model.ConfigMap; -import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; -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.support.TestExecutionInfoProvider; - -@ControllerConfiguration -public class IndexDiscriminatorTestReconciler - implements Reconciler, - Cleaner, - TestExecutionInfoProvider { - - public static final String FIRST_CONFIG_MAP_SUFFIX_1 = "-1"; - public static final String FIRST_CONFIG_MAP_SUFFIX_2 = "-2"; - public static final String CONFIG_MAP_INDEX_1 = "CONFIG_MAP_INDEX1"; - public static final String CONFIG_MAP_INDEX_2 = "CONFIG_MAP_INDEX2"; - - private final AtomicInteger numberOfExecutions = new AtomicInteger(0); - - private final IndexDiscriminatorTestDRConfigMap firstDependentResourceConfigMap; - private final IndexDiscriminatorTestDRConfigMap secondDependentResourceConfigMap; - - public IndexDiscriminatorTestReconciler() { - firstDependentResourceConfigMap = - new IndexDiscriminatorTestDRConfigMap(FIRST_CONFIG_MAP_SUFFIX_1); - secondDependentResourceConfigMap = - new IndexDiscriminatorTestDRConfigMap(FIRST_CONFIG_MAP_SUFFIX_2); - } - - @Override - public UpdateControl reconcile( - IndexDiscriminatorTestCustomResource resource, - Context context) { - numberOfExecutions.getAndIncrement(); - firstDependentResourceConfigMap.reconcile(resource, context); - secondDependentResourceConfigMap.reconcile(resource, context); - return UpdateControl.noUpdate(); - } - - public int getNumberOfExecutions() { - return numberOfExecutions.get(); - } - - @Override - public Map prepareEventSources( - EventSourceContext context) { - - InformerEventSource eventSource = - new InformerEventSource<>(InformerConfiguration.from(ConfigMap.class, context) - .build(), context); - - eventSource.addIndexer(CONFIG_MAP_INDEX_1, cm -> { - if (cm.getMetadata().getName().endsWith(FIRST_CONFIG_MAP_SUFFIX_1)) { - return List.of(configMapKey(cm)); - } else { - return Collections.emptyList(); - } - }); - eventSource.addIndexer(CONFIG_MAP_INDEX_2, cm -> { - if (cm.getMetadata().getName().endsWith(FIRST_CONFIG_MAP_SUFFIX_2)) { - return List.of(configMapKey(cm)); - } else { - return Collections.emptyList(); - } - }); - - firstDependentResourceConfigMap.configureWith(eventSource); - secondDependentResourceConfigMap.configureWith(eventSource); - - return EventSourceUtils.nameEventSources(eventSource); - } - - public static String configMapKey(ConfigMap configMap) { - return configMap.getMetadata().getName() + "#" + configMap.getMetadata().getNamespace(); - } - - public static String configMapKeyFromPrimary(IndexDiscriminatorTestCustomResource primary, - String nameSuffix) { - return primary.getMetadata().getName() + nameSuffix + "#" - + primary.getMetadata().getNamespace(); - } - - @Override - public DeleteControl cleanup(IndexDiscriminatorTestCustomResource resource, - Context context) { - firstDependentResourceConfigMap.delete(resource, context); - secondDependentResourceConfigMap.delete(resource, context); - return DeleteControl.defaultDelete(); - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestSpec.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestSpec.java deleted file mode 100644 index fcedd48abe..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestSpec.java +++ /dev/null @@ -1,15 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -public class IndexDiscriminatorTestSpec { - - private String value; - - public String getValue() { - return value; - } - - public IndexDiscriminatorTestSpec setValue(String value) { - this.value = value; - return this; - } -} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestStatus.java deleted file mode 100644 index d31c86e8de..0000000000 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/indexdiscriminator/IndexDiscriminatorTestStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.javaoperatorsdk.operator.sample.indexdiscriminator; - -public class IndexDiscriminatorTestStatus { - -}