Skip to content

Commit bda268e

Browse files
committed
fix: update after rebase
1 parent fdb86b0 commit bda268e

File tree

6 files changed

+48
-37
lines changed

6 files changed

+48
-37
lines changed

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

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
2323
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
2424
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
25-
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.AnnotationDependentResourceConfigurator;
2625
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;
2726
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
2827
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEventFilter;
@@ -155,7 +154,8 @@ protected <P extends HasMetadata> ControllerConfiguration<P> configFor(Reconcile
155154
Constants.NO_VALUE_SET),
156155
valueOrDefault(annotation,
157156
io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::labelSelector,
158-
Constants.NO_VALUE_SET));
157+
Constants.NO_VALUE_SET),
158+
null);
159159

160160
ResourceEventFilter<P> answer = deprecatedEventFilter(annotation);
161161
config.setEventFilter(answer != null ? answer : ResourceEventFilters.passthrough());
@@ -215,15 +215,11 @@ private static List<DependentResourceSpec> dependentResources(
215215
}
216216

217217
final var name = parent.getName();
218-
final var dependentResource = Utils.instantiateAndConfigureIfNeeded(dependentType,
219-
DependentResource.class,
220-
Utils.contextFor(name, dependentType, Dependent.class),
221-
instance -> configureFromCustomAnnotation(instance, parent));
222218

223219
var eventSourceName = dependent.useEventSourceWithName();
224220
eventSourceName = Constants.NO_VALUE_SET.equals(eventSourceName) ? null : eventSourceName;
225221
final var context = Utils.contextFor(name, dependentType, null);
226-
spec = new DependentResourceSpec(dependentResource, dependentName,
222+
spec = new DependentResourceSpec(dependentType, dependentName,
227223
Set.of(dependent.dependsOn()),
228224
Utils.instantiate(dependent.readyPostcondition(), Condition.class, context),
229225
Utils.instantiate(dependent.reconcilePrecondition(), Condition.class, context),
@@ -253,6 +249,7 @@ private static <T> T valueOrDefault(
253249
return mapper.apply(controllerConfiguration);
254250
}
255251
}
252+
256253
@SuppressWarnings("rawtypes")
257254
private static String getName(String name, Class<? extends DependentResource> dependentType) {
258255
if (name.isBlank()) {
@@ -280,21 +277,4 @@ private static void configureFromAnnotatedReconciler(Object instance, Reconciler
280277
}
281278
}
282279
}
283-
284-
@SuppressWarnings({"unchecked", "rawtypes"})
285-
private static <P extends HasMetadata> void configureFromCustomAnnotation(Object instance,
286-
ControllerConfiguration<P> parent) {
287-
if (instance instanceof AnnotationDependentResourceConfigurator) {
288-
AnnotationDependentResourceConfigurator configurator =
289-
(AnnotationDependentResourceConfigurator) instance;
290-
final Class<? extends Annotation> configurationClass =
291-
(Class<? extends Annotation>) Utils.getFirstTypeArgumentFromInterface(
292-
instance.getClass(), AnnotationDependentResourceConfigurator.class);
293-
final var configAnnotation = instance.getClass().getAnnotation(configurationClass);
294-
// always called even if the annotation is null so that implementations can provide default
295-
// values
296-
final var config = configurator.configFrom(configAnnotation, parent);
297-
configurator.configureWith(config);
298-
}
299-
}
300280
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public ControllerConfiguration<R> build() {
184184
generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter,
185185
reconciliationMaxInterval, onAddFilter, onUpdateFilter, genericFilter, cachePruneFunction,
186186
original.getDependentResources(),
187-
namespaces, finalizer, labelSelector);
187+
namespaces, finalizer, labelSelector, configurations);
188188
overridden.setEventFilter(customResourcePredicate);
189189
return overridden;
190190
}

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import java.time.Duration;
44
import java.util.Collections;
55
import java.util.List;
6+
import java.util.Map;
67
import java.util.Optional;
78
import java.util.Set;
89
import java.util.concurrent.TimeUnit;
910
import java.util.function.UnaryOperator;
1011

1112
import io.fabric8.kubernetes.api.model.HasMetadata;
13+
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceConfigurationProvider;
1214
import io.javaoperatorsdk.operator.api.config.dependent.DependentResourceSpec;
1315
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
1416
import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter;
@@ -21,7 +23,8 @@
2123
@SuppressWarnings("rawtypes")
2224
public class ResolvedControllerConfiguration<P extends HasMetadata>
2325
extends DefaultResourceConfiguration<P>
24-
implements io.javaoperatorsdk.operator.api.config.ControllerConfiguration<P> {
26+
implements io.javaoperatorsdk.operator.api.config.ControllerConfiguration<P>,
27+
DependentResourceConfigurationProvider {
2528

2629
private final String name;
2730
private final boolean generationAware;
@@ -30,6 +33,7 @@ public class ResolvedControllerConfiguration<P extends HasMetadata>
3033
private final RateLimiter rateLimiter;
3134
private final Optional<Duration> maxReconciliationInterval;
3235
private final String finalizer;
36+
private final Map<DependentResourceSpec, Object> configurations;
3337

3438
private ResourceEventFilter<P> eventFilter;
3539
private List<DependentResourceSpec> dependentResources;
@@ -41,7 +45,7 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, ControllerConfigu
4145
other.onAddFilter().orElse(null), other.onUpdateFilter().orElse(null),
4246
other.genericFilter().orElse(null), other.cachePruneFunction().orElse(null),
4347
other.getDependentResources(), other.getNamespaces(),
44-
other.getFinalizerName(), other.getLabelSelector());
48+
other.getFinalizerName(), other.getLabelSelector(), Collections.emptyMap());
4549
}
4650

4751
public static Duration getMaxReconciliationInterval(long interval, TimeUnit timeUnit) {
@@ -67,10 +71,11 @@ public ResolvedControllerConfiguration(Class<P> resourceClass, String name,
6771
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter,
6872
GenericFilter<P> genericFilter, UnaryOperator<P> cachePruneFunction,
6973
List<DependentResourceSpec> dependentResources,
70-
Set<String> namespaces, String finalizer, String labelSelector) {
74+
Set<String> namespaces, String finalizer, String labelSelector,
75+
Map<DependentResourceSpec, Object> configurations) {
7176
this(resourceClass, name, generationAware, associatedReconcilerClassName, retry, rateLimiter,
7277
maxReconciliationInterval, onAddFilter, onUpdateFilter, genericFilter, cachePruneFunction,
73-
namespaces, finalizer, labelSelector);
78+
namespaces, finalizer, labelSelector, configurations);
7479
setDependentResources(dependentResources);
7580
}
7681

@@ -79,7 +84,8 @@ protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
7984
RateLimiter rateLimiter, Duration maxReconciliationInterval,
8085
OnAddFilter<P> onAddFilter, OnUpdateFilter<P> onUpdateFilter, GenericFilter<P> genericFilter,
8186
UnaryOperator<P> cachePruneFunction,
82-
Set<String> namespaces, String finalizer, String labelSelector) {
87+
Set<String> namespaces, String finalizer, String labelSelector,
88+
Map<DependentResourceSpec, Object> configurations) {
8389
super(resourceClass, namespaces, labelSelector, onAddFilter, onUpdateFilter, genericFilter,
8490
cachePruneFunction);
8591
this.name = ControllerConfiguration.ensureValidName(name, associatedReconcilerClassName);
@@ -88,6 +94,7 @@ protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
8894
this.retry = ensureRetry(retry);
8995
this.rateLimiter = ensureRateLimiter(rateLimiter);
9096
this.maxReconciliationInterval = Optional.ofNullable(maxReconciliationInterval);
97+
this.configurations = configurations != null ? configurations : Collections.emptyMap();
9198

9299
this.finalizer =
93100
ControllerConfiguration.ensureValidFinalizerName(finalizer, getResourceTypeName());
@@ -97,7 +104,7 @@ protected ResolvedControllerConfiguration(Class<P> resourceClass, String name,
97104
Class<? extends Reconciler> reconcilerClas) {
98105
this(resourceClass, name, false, getAssociatedReconcilerClassName(reconcilerClas), null, null,
99106
null, null, null, null, null,
100-
null, null, null);
107+
null, null, null, null);
101108
}
102109

103110
@Override
@@ -154,4 +161,9 @@ public ResourceEventFilter<P> getEventFilter() {
154161
protected void setEventFilter(ResourceEventFilter<P> eventFilter) {
155162
this.eventFilter = eventFilter;
156163
}
164+
165+
@Override
166+
public Object getConfigurationFor(DependentResourceSpec spec) {
167+
return configurations.get(spec);
168+
}
157169
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
import org.junit.jupiter.api.Test;
99

1010
import io.fabric8.kubernetes.api.model.ConfigMap;
11+
import io.fabric8.kubernetes.api.model.HasMetadata;
1112
import io.fabric8.kubernetes.api.model.Service;
12-
import io.javaoperatorsdk.operator.api.config.AnnotationControllerConfiguration;
13+
import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
1314
import io.javaoperatorsdk.operator.api.config.ControllerConfigurationOverrider;
1415
import io.javaoperatorsdk.operator.api.reconciler.Context;
1516
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
@@ -30,9 +31,27 @@
3031

3132
class DependentResourceConfigurationResolverTest {
3233

34+
// subclass to expose configFor method to this test class
35+
private final static class TestConfigurationService extends BaseConfigurationService {
36+
37+
@Override
38+
protected <P extends HasMetadata> io.javaoperatorsdk.operator.api.config.ControllerConfiguration<P> configFor(
39+
Reconciler<P> reconciler) {
40+
return super.configFor(reconciler);
41+
}
42+
}
43+
44+
private final TestConfigurationService configurationService = new TestConfigurationService();
45+
46+
private <P extends HasMetadata> io.javaoperatorsdk.operator.api.config.ControllerConfiguration<P> configFor(
47+
Reconciler<P> reconciler) {
48+
// ensure that a new configuration is created each time
49+
return configurationService.configFor(reconciler);
50+
}
51+
3352
@Test
3453
void controllerConfigurationProvidedShouldBeReturnedIfAvailable() {
35-
final var cfg = new AnnotationControllerConfiguration<>(new CustomAnnotationReconciler());
54+
final var cfg = configFor(new CustomAnnotationReconciler());
3655
final var customConfig = DependentResourceConfigurationResolver
3756
.extractConfigurationFromConfigured(CustomAnnotatedDep.class, cfg);
3857
assertTrue(customConfig instanceof CustomConfig);
@@ -51,7 +70,7 @@ void controllerConfigurationProvidedShouldBeReturnedIfAvailable() {
5170

5271
@Test
5372
void getConverterShouldWork() {
54-
final var cfg = new AnnotationControllerConfiguration<>(new CustomAnnotationReconciler());
73+
final var cfg = configFor(new CustomAnnotationReconciler());
5574
var converter = DependentResourceConfigurationResolver.getConverter(CustomAnnotatedDep.class);
5675
assertNull(converter);
5776
assertNull(DependentResourceConfigurationResolver.getConverter(ChildCustomAnnotatedDep.class));
@@ -77,7 +96,7 @@ void getConverterShouldWork() {
7796
@SuppressWarnings("rawtypes")
7897
@Test
7998
void registerConverterShouldWork() {
80-
final var cfg = new AnnotationControllerConfiguration<>(new CustomAnnotationReconciler());
99+
final var cfg = configFor(new CustomAnnotationReconciler());
81100
var converter = DependentResourceConfigurationResolver.getConverter(ConfigMapDep.class);
82101
assertNull(converter);
83102
DependentResourceConfigurationResolver.extractConfigurationFromConfigured(ConfigMapDep.class,

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventFilterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public ControllerConfig(String finalizer, boolean generationAware,
144144
null,
145145
null,
146146
null,
147-
null, null, null, finalizer, null);
147+
null, null, null, finalizer, null, null);
148148
setEventFilter(eventFilter);
149149
}
150150
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public TestConfiguration(boolean generationAware, OnAddFilter<TestCustomResource
197197
null,
198198
null,
199199
FINALIZER,
200-
null);
200+
null, null);
201201
}
202202
}
203203
}

0 commit comments

Comments
 (0)