Skip to content

Commit 69e3f0c

Browse files
authored
Utlity naming for Event Sources (#1098)
1 parent ab23a2c commit 69e3f0c

File tree

7 files changed

+49
-30
lines changed

7 files changed

+49
-30
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.javaoperatorsdk.operator.api.reconciler;
22

3+
import java.util.HashMap;
34
import java.util.Map;
45

56
import io.fabric8.kubernetes.api.model.HasMetadata;
@@ -23,4 +24,18 @@ public interface EventSourceInitializer<P extends HasMetadata> {
2324
*/
2425
Map<String, EventSource> prepareEventSources(EventSourceContext<P> context);
2526

27+
/**
28+
* Utility method to easily create map with default names of event sources.
29+
*
30+
* @param eventSources to name
31+
* @return even source with default names
32+
*/
33+
static Map<String, EventSource> defaultNamedEventSources(EventSource... eventSources) {
34+
Map<String, EventSource> eventSourceMap = new HashMap<>(eventSources.length);
35+
for (EventSource eventSource : eventSources) {
36+
eventSourceMap.put(EventSource.defaultNameFor(eventSource), eventSource);
37+
}
38+
return eventSourceMap;
39+
}
40+
2641
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public Map<String, EventSource> prepareEventSources(
106106
.withLabelSelector("integrationtest = " + this.getClass().getSimpleName())
107107
.build();
108108
informerEventSource = new InformerEventSource<>(informerConfiguration, client);
109-
return Map.of("test-informer", informerEventSource);
109+
return EventSourceInitializer.defaultNamedEventSources(informerEventSource);
110110
}
111111

112112
@Override

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ public Map<String, EventSource> prepareEventSources(
4646
.withPrimaryResourcesRetriever(Mappers.fromAnnotation(RELATED_RESOURCE_NAME))
4747
.build();
4848

49-
return Map.of("test-informer", new InformerEventSource<>(config, context));
49+
return EventSourceInitializer
50+
.defaultNamedEventSources(new InformerEventSource<>(config, context));
5051
}
5152

5253
@Override

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ public StandaloneDependentTestReconciler() {
3939
@Override
4040
public Map<String, EventSource> prepareEventSources(
4141
EventSourceContext<StandaloneDependentTestCustomResource> context) {
42-
return Map.of("deployment", deploymentDependent.initEventSource(context));
42+
return EventSourceInitializer
43+
.defaultNamedEventSources(deploymentDependent.initEventSource(context));
4344
}
4445

4546
@Override

sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public Map<String, EventSource> prepareEventSources(EventSourceContext<Webapp> c
7272
.withPrimaryResourcesRetriever(webappsMatchingTomcatName)
7373
.withAssociatedSecondaryResourceIdentifier(tomcatFromWebAppSpec)
7474
.build();
75-
return Map.of("tomcat-informer", new InformerEventSource<>(configuration, context));
75+
return EventSourceInitializer
76+
.defaultNamedEventSources(new InformerEventSource<>(configuration, context));
7677
}
7778

7879
/**

sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ public Map<String, EventSource> prepareEventSources(EventSourceContext<WebPage>
6565
new InformerEventSource<>(InformerConfiguration.from(context, Service.class)
6666
.withLabelSelector(LOW_LEVEL_LABEL_KEY)
6767
.build(), context);
68-
return Map.of("configmap", configMapEventSource, "deployment", deploymentEventSource, "service",
68+
return EventSourceInitializer.defaultNamedEventSources(configMapEventSource,
69+
deploymentEventSource,
6970
serviceEventSource);
7071
}
7172

Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package io.javaoperatorsdk.operator.sample;
22

3+
import java.util.Arrays;
34
import java.util.Map;
4-
import java.util.Map.Entry;
5-
import java.util.stream.Collectors;
65

76
import org.slf4j.Logger;
87
import org.slf4j.LoggerFactory;
98

10-
import io.fabric8.kubernetes.api.model.HasMetadata;
9+
import io.fabric8.kubernetes.api.model.ConfigMap;
10+
import io.fabric8.kubernetes.api.model.Service;
11+
import io.fabric8.kubernetes.api.model.apps.Deployment;
1112
import io.fabric8.kubernetes.client.KubernetesClient;
1213
import io.javaoperatorsdk.operator.api.reconciler.Context;
1314
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
@@ -37,50 +38,49 @@ public class WebPageStandaloneDependentsReconciler
3738
private static final Logger log =
3839
LoggerFactory.getLogger(WebPageStandaloneDependentsReconciler.class);
3940

40-
private final Map<String, KubernetesDependentResource<?, WebPage>> dependentResources;
41+
private KubernetesDependentResource<ConfigMap, WebPage> configMapDR;
42+
private KubernetesDependentResource<Deployment, WebPage> deploymentDR;
43+
private KubernetesDependentResource<Service, WebPage> serviceDR;
4144

4245
public WebPageStandaloneDependentsReconciler(KubernetesClient kubernetesClient) {
43-
dependentResources = Map.of(
44-
"configmap", new ConfigMapDependentResource(),
45-
"deployment", new DeploymentDependentResource(),
46-
"service", new ServiceDependentResource());
47-
final var config = new KubernetesDependentResourceConfig()
48-
.setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR);
49-
dependentResources.values().forEach(dr -> {
50-
dr.setKubernetesClient(kubernetesClient);
51-
dr.configureWith(config);
52-
});
46+
createDependentResources(kubernetesClient);
5347
}
5448

5549
@Override
5650
public Map<String, EventSource> prepareEventSources(EventSourceContext<WebPage> context) {
57-
return dependentResources.entrySet().stream()
58-
.collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue));
51+
return EventSourceInitializer.defaultNamedEventSources(configMapDR.initEventSource(context),
52+
deploymentDR.initEventSource(context), serviceDR.initEventSource(context));
5953
}
6054

6155
@Override
6256
public UpdateControl<WebPage> reconcile(WebPage webPage, Context<WebPage> context)
6357
throws Exception {
6458
simulateErrorIfRequested(webPage);
6559

66-
dependentResources.values().forEach(dr -> dr.reconcile(webPage, context));
60+
Arrays.asList(configMapDR, deploymentDR, serviceDR)
61+
.forEach(dr -> dr.reconcile(webPage, context));
6762

68-
webPage.setStatus(createStatus(getConfigMapName(webPage)));
63+
webPage.setStatus(
64+
createStatus(
65+
configMapDR.getAssociatedResource(webPage).orElseThrow().getMetadata().getName()));
6966
return UpdateControl.updateStatus(webPage);
7067
}
7168

72-
private String getConfigMapName(WebPage webPage) {
73-
return dependent("configmap").getAssociatedResource(webPage).orElseThrow().getMetadata()
74-
.getName();
75-
}
76-
7769
@Override
7870
public ErrorStatusUpdateControl<WebPage> updateErrorStatus(
7971
WebPage resource, Context<WebPage> retryInfo, Exception e) {
8072
return handleError(resource, e);
8173
}
8274

83-
private KubernetesDependentResource<? extends HasMetadata, WebPage> dependent(String name) {
84-
return dependentResources.get(name);
75+
private void createDependentResources(KubernetesClient client) {
76+
this.configMapDR = new ConfigMapDependentResource();
77+
this.deploymentDR = new DeploymentDependentResource();
78+
this.serviceDR = new ServiceDependentResource();
79+
80+
Arrays.asList(configMapDR, deploymentDR, serviceDR).forEach(dr -> {
81+
dr.setKubernetesClient(client);
82+
dr.configureWith(new KubernetesDependentResourceConfig()
83+
.setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR));
84+
});
8585
}
8686
}

0 commit comments

Comments
 (0)