Skip to content

Commit a488572

Browse files
authoredSep 28, 2022
feat: decouple event source from cache + list discriminator (#1378)
1 parent f762be4 commit a488572

File tree

47 files changed

+622
-221
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+622
-221
lines changed
 

‎operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AnnotationControllerConfiguration.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
import io.javaoperatorsdk.operator.OperatorException;
1818
import io.javaoperatorsdk.operator.ReconcilerUtils;
1919
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
20-
import io.javaoperatorsdk.operator.api.reconciler.Constants;
20+
import io.javaoperatorsdk.operator.api.reconciler.*;
2121
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
22-
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2322
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
2423
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
2524
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent;
@@ -54,9 +53,8 @@ public AnnotationControllerConfiguration(Reconciler<P> reconciler) {
5453
this.reconciler = reconciler;
5554
this.annotation = reconciler.getClass().getAnnotation(ControllerConfiguration.class);
5655
if (annotation == null) {
57-
throw new OperatorException(
58-
"Missing mandatory @" + ControllerConfiguration.class.getSimpleName() +
59-
" annotation for reconciler: " + reconciler);
56+
throw new OperatorException("Missing mandatory @" + CONTROLLER_CONFIG_ANNOTATION +
57+
" annotation for reconciler: " + reconciler);
6058
}
6159
}
6260

@@ -247,9 +245,9 @@ public List<DependentResourceSpec> getDependentResources() {
247245
final var context = "DependentResource of type '" + dependentType.getName() + "'";
248246
spec = new DependentResourceSpec(dependentType, config, name,
249247
Set.of(dependent.dependsOn()),
250-
instantiateConditionIfNotDefault(dependent.readyPostcondition(), context),
251-
instantiateConditionIfNotDefault(dependent.reconcilePrecondition(), context),
252-
instantiateConditionIfNotDefault(dependent.deletePostcondition(), context));
248+
instantiateIfNotDefault(dependent.readyPostcondition(), Condition.class, context),
249+
instantiateIfNotDefault(dependent.reconcilePrecondition(), Condition.class, context),
250+
instantiateIfNotDefault(dependent.deletePostcondition(), Condition.class, context));
253251
specsMap.put(name, spec);
254252
}
255253

@@ -258,10 +256,10 @@ public List<DependentResourceSpec> getDependentResources() {
258256
return specs;
259257
}
260258

261-
protected Condition<?, ?> instantiateConditionIfNotDefault(Class<? extends Condition> condition,
259+
protected <T> T instantiateIfNotDefault(Class<? extends T> toInstantiate, Class<T> defaultClass,
262260
String context) {
263-
if (condition != Condition.class) {
264-
return instantiateAndConfigureIfNeeded(condition, Condition.class, context);
261+
if (!defaultClass.equals(toInstantiate)) {
262+
return instantiateAndConfigureIfNeeded(toInstantiate, defaultClass, context);
265263
}
266264
return null;
267265
}
@@ -287,6 +285,7 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
287285
OnUpdateFilter<? extends HasMetadata> onUpdateFilter = null;
288286
OnDeleteFilter<? extends HasMetadata> onDeleteFilter = null;
289287
GenericFilter<? extends HasMetadata> genericFilter = null;
288+
ResourceDiscriminator<?, ? extends HasMetadata> resourceDiscriminator = null;
290289
if (kubeDependent != null) {
291290
if (!Arrays.equals(KubernetesDependent.DEFAULT_NAMESPACES,
292291
kubeDependent.namespaces())) {
@@ -297,7 +296,6 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
297296
final var fromAnnotation = kubeDependent.labelSelector();
298297
labelSelector = Constants.NO_VALUE_SET.equals(fromAnnotation) ? null : fromAnnotation;
299298

300-
301299
final var context =
302300
KUBE_DEPENDENT_NAME + " annotation on " + dependentType.getName() + " DependentResource";
303301
onAddFilter = createFilter(kubeDependent.onAddFilter(), OnAddFilter.class, context)
@@ -311,10 +309,15 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
311309
genericFilter =
312310
createFilter(kubeDependent.genericFilter(), GenericFilter.class, context)
313311
.orElse(null);
312+
313+
resourceDiscriminator =
314+
instantiateIfNotDefault(kubeDependent.resourceDiscriminator(),
315+
ResourceDiscriminator.class, context);
314316
}
315317

316318
config =
317-
new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS, onAddFilter,
319+
new KubernetesDependentResourceConfig(namespaces, labelSelector, configuredNS,
320+
resourceDiscriminator, onAddFilter,
318321
onUpdateFilter, onDeleteFilter, genericFilter);
319322

320323
return config;

‎operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,27 @@
66
import io.fabric8.kubernetes.api.model.HasMetadata;
77
import io.javaoperatorsdk.operator.api.config.ControllerConfiguration;
88
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.ManagedDependentResourceContext;
9+
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
910

1011
public interface Context<P extends HasMetadata> {
1112

1213
Optional<RetryInfo> getRetryInfo();
1314

14-
default <T> Optional<T> getSecondaryResource(Class<T> expectedType) {
15-
return getSecondaryResource(expectedType, null);
15+
default <R> Optional<R> getSecondaryResource(Class<R> expectedType) {
16+
return getSecondaryResource(expectedType, (String) null);
1617
}
1718

18-
<T> Set<T> getSecondaryResources(Class<T> expectedType);
19+
<R> Set<R> getSecondaryResources(Class<R> expectedType);
1920

20-
<T> Optional<T> getSecondaryResource(Class<T> expectedType, String eventSourceName);
21+
@Deprecated(forRemoval = true)
22+
<R> Optional<R> getSecondaryResource(Class<R> expectedType, String eventSourceName);
23+
24+
<R> Optional<R> getSecondaryResource(Class<R> expectedType,
25+
ResourceDiscriminator<R, P> discriminator);
2126

2227
ControllerConfiguration<P> getControllerConfiguration();
2328

2429
ManagedDependentResourceContext managedDependentResourceContext();
30+
31+
EventSourceRetriever<P> eventSourceRetriever();
2532
}

0 commit comments

Comments
 (0)
Please sign in to comment.