Skip to content

Commit a67ba0b

Browse files
authored
feat: configure resource class and name for controller (#1781)
1 parent ae00752 commit a67ba0b

File tree

8 files changed

+64
-39
lines changed

8 files changed

+64
-39
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,10 @@ protected <P extends HasMetadata> ControllerConfiguration<P> configFor(Reconcile
105105
+
106106
" annotation for reconciler: " + reconciler);
107107
}
108+
Class<Reconciler<P>> reconcilerClass = (Class<Reconciler<P>>) reconciler.getClass();
109+
final var resourceClass = ConfigurationServiceProvider.instance().getResourceClassResolver()
110+
.getResourceClass(reconcilerClass);
108111

109-
final var resourceClass = (Class<P>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(
110-
reconciler.getClass(), Reconciler.class);
111112
final var name = ReconcilerUtils.getNameFor(reconciler);
112113
final var generationAware = valueOrDefault(
113114
annotation,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,8 @@ default Optional<InformerStoppedHandler> getInformerStoppedHandler() {
206206
default ManagedWorkflowFactory getWorkflowFactory() {
207207
return ManagedWorkflowFactory.DEFAULT;
208208
}
209+
210+
default ResourceClassResolver getResourceClassResolver() {
211+
return new DefaultResourceClassResolver();
212+
}
209213
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class ConfigurationServiceOverrider {
3030
private InformerStoppedHandler informerStoppedHandler;
3131
private Boolean stopOnInformerErrorDuringStartup;
3232
private Duration cacheSyncTimeout;
33+
private ResourceClassResolver resourceClassResolver;
3334

3435
ConfigurationServiceOverrider(ConfigurationService original) {
3536
this.original = original;
@@ -113,6 +114,12 @@ public ConfigurationServiceOverrider withCacheSyncTimeout(Duration cacheSyncTime
113114
return this;
114115
}
115116

117+
public ConfigurationServiceOverrider withResourceClassResolver(
118+
ResourceClassResolver resourceClassResolver) {
119+
this.resourceClassResolver = resourceClassResolver;
120+
return this;
121+
}
122+
116123
public ConfigurationService build() {
117124
return new BaseConfigurationService(original.getVersion(), cloner, objectMapper) {
118125
@Override
@@ -196,6 +203,12 @@ public boolean stopOnInformerErrorDuringStartup() {
196203
public Duration cacheSyncTimeout() {
197204
return cacheSyncTimeout != null ? cacheSyncTimeout : super.cacheSyncTimeout();
198205
}
206+
207+
@Override
208+
public ResourceClassResolver getResourceClassResolver() {
209+
return resourceClassResolver != null ? resourceClassResolver
210+
: super.getResourceClassResolver();
211+
}
199212
};
200213
}
201214

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ default ConfigurationService getConfigurationService() {
114114
@SuppressWarnings("unchecked")
115115
@Override
116116
default Class<P> getResourceClass() {
117+
// note that this implementation at the end not used within the boundaries of the core
118+
// framework, should be removed in the future, (and marked as an API changed, or behavior
119+
// change)
117120
return (Class<P>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(getClass(),
118121
ControllerConfiguration.class);
119122
}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,22 @@ public class ControllerConfigurationOverrider<R extends HasMetadata> {
3636
private GenericFilter<R> genericFilter;
3737
private RateLimiter rateLimiter;
3838
private Map<DependentResourceSpec, Object> configurations;
39+
private String name;
3940

4041
private ControllerConfigurationOverrider(ControllerConfiguration<R> original) {
41-
finalizer = original.getFinalizerName();
42-
generationAware = original.isGenerationAware();
43-
namespaces = new HashSet<>(original.getNamespaces());
44-
retry = original.getRetry();
45-
labelSelector = original.getLabelSelector();
46-
customResourcePredicate = original.getEventFilter();
47-
reconciliationMaxInterval = original.maxReconciliationInterval().orElse(null);
42+
this.finalizer = original.getFinalizerName();
43+
this.generationAware = original.isGenerationAware();
44+
this.namespaces = new HashSet<>(original.getNamespaces());
45+
this.retry = original.getRetry();
46+
this.labelSelector = original.getLabelSelector();
47+
this.customResourcePredicate = original.getEventFilter();
48+
this.reconciliationMaxInterval = original.maxReconciliationInterval().orElse(null);
4849
this.onAddFilter = original.onAddFilter().orElse(null);
4950
this.onUpdateFilter = original.onUpdateFilter().orElse(null);
5051
this.genericFilter = original.genericFilter().orElse(null);
5152
this.original = original;
5253
this.rateLimiter = original.getRateLimiter();
54+
this.name = original.getName();
5355
}
5456

5557
public ControllerConfigurationOverrider<R> withFinalizer(String finalizer) {
@@ -152,6 +154,11 @@ public ControllerConfigurationOverrider<R> withGenericFilter(GenericFilter<R> ge
152154
return this;
153155
}
154156

157+
public ControllerConfigurationOverrider<R> withName(String name) {
158+
this.name = name;
159+
return this;
160+
}
161+
155162
public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig(String name,
156163
Object dependentResourceConfig) {
157164

@@ -165,13 +172,12 @@ public ControllerConfigurationOverrider<R> replacingNamedDependentResourceConfig
165172
configurations = new HashMap<>(specs.size());
166173
}
167174
configurations.put(spec, dependentResourceConfig);
168-
169175
return this;
170176
}
171177

172178
public ControllerConfiguration<R> build() {
173-
final var overridden = new ResolvedControllerConfiguration<>(
174-
original.getResourceClass(), original.getName(),
179+
final var overridden = new ResolvedControllerConfiguration<>(original.getResourceClass(),
180+
name,
175181
generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter,
176182
reconciliationMaxInterval, onAddFilter, onUpdateFilter, genericFilter,
177183
original.getDependentResources(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
5+
6+
public class DefaultResourceClassResolver implements ResourceClassResolver {
7+
8+
@SuppressWarnings("unchecked")
9+
@Override
10+
public <R extends HasMetadata> Class<R> getResourceClass(
11+
Class<? extends Reconciler<R>> reconcilerClass) {
12+
return (Class<R>) Utils.getFirstTypeArgumentFromSuperClassOrInterface(reconcilerClass,
13+
Reconciler.class);
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.javaoperatorsdk.operator.api.config;
2+
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
5+
6+
public interface ResourceClassResolver {
7+
8+
<R extends HasMetadata> Class<R> getResourceClass(Class<? extends Reconciler<R>> reconcilerClass);
9+
10+
}

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

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)