Skip to content

Commit 3380ef8

Browse files
committed
kubernetes dependent resource configuration
1 parent 2e786e3 commit 3380ef8

File tree

6 files changed

+60
-11
lines changed

6 files changed

+60
-11
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@
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;
2625
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource;
2726
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig;
28-
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
2927
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
3028
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
3129
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilters;
@@ -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())) {
@@ -311,10 +310,14 @@ private Object createKubernetesResourceConfig(Class<? extends DependentResource>
311310
genericFilter =
312311
createFilter(kubeDependent.genericFilter(), GenericFilter.class, context)
313312
.orElse(null);
313+
314+
resourceDiscriminator = instantiateIfNotVoid(kubeDependent.resourceDiscriminator(),
315+
VoidResourceDiscriminator.class);
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;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.javaoperatorsdk.operator.api.reconciler;
2+
3+
import java.util.Optional;
4+
5+
import io.fabric8.kubernetes.api.model.HasMetadata;
6+
import io.javaoperatorsdk.operator.processing.event.EventSourceRetriever;
7+
8+
public class VoidResourceDiscriminator<R, P extends HasMetadata>
9+
implements ResourceDiscriminator<R, P> {
10+
11+
@Override
12+
public Optional<R> distinguish(Class<R> resource, Context<P> context,
13+
EventSourceRetriever<P> eventSourceManager) {
14+
throw new UnsupportedOperationException();
15+
}
16+
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.fabric8.kubernetes.api.model.HasMetadata;
99
import io.javaoperatorsdk.operator.api.reconciler.Context;
1010
import io.javaoperatorsdk.operator.api.reconciler.Ignore;
11+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
1112
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
1213
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
1314
import io.javaoperatorsdk.operator.processing.event.ResourceID;
@@ -23,6 +24,8 @@ public abstract class AbstractDependentResource<R, P extends HasMetadata>
2324
protected Creator<R, P> creator;
2425
protected Updater<R, P> updater;
2526

27+
private ResourceDiscriminator<R, P> resourceDiscriminator;
28+
2629
@SuppressWarnings("unchecked")
2730
public AbstractDependentResource() {
2831
creator = creatable ? (Creator<R, P>) this : null;
@@ -66,7 +69,11 @@ public ReconcileResult<R> reconcile(P primary, Context<P> context) {
6669
}
6770

6871
protected Optional<R> getSecondaryResource(P primary, Context<P> context) {
69-
return context.getSecondaryResource(resourceType());
72+
if (resourceDiscriminator == null) {
73+
return context.getSecondaryResource(resourceType());
74+
} else {
75+
return context.getSecondaryResource(resourceType(), resourceDiscriminator);
76+
}
7077
}
7178

7279
private void throwIfNull(R desired, P primary, String descriptor) {
@@ -125,4 +132,14 @@ protected R desired(P primary, Context<P> context) {
125132
throw new IllegalStateException(
126133
"desired method must be implemented if this DependentResource can be created and/or updated");
127134
}
135+
136+
protected ResourceDiscriminator<R, P> getResourceDiscriminator() {
137+
return resourceDiscriminator;
138+
}
139+
140+
protected AbstractDependentResource<R, P> setResourceDiscriminator(
141+
ResourceDiscriminator<R, P> resourceDiscriminator) {
142+
this.resourceDiscriminator = resourceDiscriminator;
143+
return this;
144+
}
128145
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import java.lang.annotation.Target;
77

88
import io.javaoperatorsdk.operator.api.reconciler.Constants;
9+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
10+
import io.javaoperatorsdk.operator.api.reconciler.VoidResourceDiscriminator;
11+
import io.javaoperatorsdk.operator.processing.event.source.filter.*;
912
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
1013
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
1114
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -68,4 +71,6 @@
6871
* itself if no value is set
6972
*/
7073
Class<? extends GenericFilter> genericFilter() default GenericFilter.class;
74+
75+
Class<? extends ResourceDiscriminator> resourceDiscriminator() default VoidResourceDiscriminator.class;
7176
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ protected InformerEventSource<R, P> createEventSource(EventSourceContext<P> cont
166166
onUpdateFilter = kubernetesDependentResourceConfig.onUpdateFilter();
167167
onDeleteFilter = kubernetesDependentResourceConfig.onDeleteFilter();
168168
genericFilter = kubernetesDependentResourceConfig.genericFilter();
169+
setResourceDiscriminator(kubernetesDependentResourceConfig.getResourceDiscriminator());
169170

170171
configureWith(kubernetesDependentResourceConfig.labelSelector(),
171172
kubernetesDependentResourceConfig.namespaces(),

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Set;
44

55
import io.javaoperatorsdk.operator.api.reconciler.Constants;
6+
import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator;
67
import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter;
78
import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter;
89
import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter;
@@ -15,7 +16,7 @@ public class KubernetesDependentResourceConfig<R> {
1516
private Set<String> namespaces = Constants.SAME_AS_CONTROLLER_NAMESPACES_SET;
1617
private String labelSelector = NO_VALUE_SET;
1718
private boolean namespacesWereConfigured = false;
18-
19+
private ResourceDiscriminator<R, ?> resourceDiscriminator;
1920

2021
private OnAddFilter<R> onAddFilter;
2122

@@ -29,7 +30,8 @@ public KubernetesDependentResourceConfig() {}
2930

3031
@SuppressWarnings("rawtypes")
3132
public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSelector,
32-
boolean configuredNS, OnAddFilter<R> onAddFilter,
33+
boolean configuredNS, ResourceDiscriminator<R, ?> resourceDiscriminator,
34+
OnAddFilter<R> onAddFilter,
3335
OnUpdateFilter<R> onUpdateFilter,
3436
OnDeleteFilter<R> onDeleteFilter, GenericFilter<R> genericFilter) {
3537
this.namespaces = namespaces;
@@ -42,7 +44,7 @@ public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSel
4244
}
4345

4446
public KubernetesDependentResourceConfig(Set<String> namespaces, String labelSelector) {
45-
this(namespaces, labelSelector, true, null, null, null, null);
47+
this(namespaces, labelSelector, true, null, null, null, null, null);
4648
}
4749

4850
public KubernetesDependentResourceConfig<R> setNamespaces(Set<String> namespaces) {
@@ -73,17 +75,22 @@ public OnAddFilter onAddFilter() {
7375
return onAddFilter;
7476
}
7577

76-
@SuppressWarnings("rawtypes")
77-
public OnUpdateFilter onUpdateFilter() {
78+
79+
public OnUpdateFilter<R> onUpdateFilter() {
7880
return onUpdateFilter;
7981
}
8082

8183
@SuppressWarnings("rawtypes")
82-
public OnDeleteFilter onDeleteFilter() {
84+
public OnDeleteFilter<R> onDeleteFilter() {
8385
return onDeleteFilter;
8486
}
8587

8688
public GenericFilter<R> genericFilter() {
8789
return genericFilter;
8890
}
91+
92+
@SuppressWarnings("rawtypes")
93+
public ResourceDiscriminator getResourceDiscriminator() {
94+
return resourceDiscriminator;
95+
}
8996
}

0 commit comments

Comments
 (0)