From fe9f9e73c62395b456c1e532a8bc815cae685f7a Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 28 Mar 2022 13:04:14 +0200 Subject: [PATCH 1/3] feat: utility method for event source default names --- .../reconciler/EventSourceInitializer.java | 9 ++++ ...CreateUpdateEventFilterTestReconciler.java | 2 +- ...formerEventSourceTestCustomReconciler.java | 3 +- .../StandaloneDependentTestReconciler.java | 3 +- .../operator/sample/WebappReconciler.java | 3 +- .../operator/sample/WebPageReconciler.java | 3 +- ...WebPageStandaloneDependentsReconciler.java | 54 ++++++++++--------- 7 files changed, 47 insertions(+), 30 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java index e539e10b3a..1682e0d4e4 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java @@ -1,5 +1,6 @@ package io.javaoperatorsdk.operator.api.reconciler; +import java.util.HashMap; import java.util.Map; import io.fabric8.kubernetes.api.model.HasMetadata; @@ -23,4 +24,12 @@ public interface EventSourceInitializer

{ */ Map prepareEventSources(EventSourceContext

context); + static Map defaultNamedEventSources(EventSource... eventSources) { + Map eventSourceMap = new HashMap<>(eventSources.length); + for (EventSource eventSource : eventSources) { + eventSourceMap.put(EventSource.defaultNameFor(eventSource), eventSource); + } + return eventSourceMap; + } + } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java index c8ab434c4f..f070eda036 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java @@ -106,7 +106,7 @@ public Map prepareEventSources( .withLabelSelector("integrationtest = " + this.getClass().getSimpleName()) .build(); informerEventSource = new InformerEventSource<>(informerConfiguration, client); - return Map.of("test-informer", informerEventSource); + return EventSourceInitializer.defaultNamedEventSources(informerEventSource); } @Override diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java index efb3e18ac5..caacfd5157 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/informereventsource/InformerEventSourceTestCustomReconciler.java @@ -46,7 +46,8 @@ public Map prepareEventSources( .withPrimaryResourcesRetriever(Mappers.fromAnnotation(RELATED_RESOURCE_NAME)) .build(); - return Map.of("test-informer", new InformerEventSource<>(config, context)); + return EventSourceInitializer + .defaultNamedEventSources(new InformerEventSource<>(config, context)); } @Override diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java index 8519f5fa7b..ce7eeade23 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/standalonedependent/StandaloneDependentTestReconciler.java @@ -39,7 +39,8 @@ public StandaloneDependentTestReconciler() { @Override public Map prepareEventSources( EventSourceContext context) { - return Map.of("deployment", deploymentDependent.initEventSource(context)); + return EventSourceInitializer + .defaultNamedEventSources(deploymentDependent.initEventSource(context)); } @Override diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java index 3ece3ddfd9..a4a17c48f2 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java @@ -72,7 +72,8 @@ public Map prepareEventSources(EventSourceContext c .withPrimaryResourcesRetriever(webappsMatchingTomcatName) .withAssociatedSecondaryResourceIdentifier(tomcatFromWebAppSpec) .build(); - return Map.of("tomcat-informer", new InformerEventSource<>(configuration, context)); + return EventSourceInitializer + .defaultNamedEventSources(new InformerEventSource<>(configuration, context)); } /** diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java index b67a645506..8db2ad5880 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java @@ -65,7 +65,8 @@ public Map prepareEventSources(EventSourceContext new InformerEventSource<>(InformerConfiguration.from(context, Service.class) .withLabelSelector(LOW_LEVEL_LABEL_KEY) .build(), context); - return Map.of("configmap", configMapEventSource, "deployment", deploymentEventSource, "service", + return EventSourceInitializer.defaultNamedEventSources(configMapEventSource, + deploymentEventSource, serviceEventSource); } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java index c215ad9fa3..0e197bf53e 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java @@ -1,13 +1,13 @@ package io.javaoperatorsdk.operator.sample; import java.util.Map; -import java.util.Map.Entry; -import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.fabric8.kubernetes.api.model.HasMetadata; +import io.fabric8.kubernetes.api.model.ConfigMap; +import io.fabric8.kubernetes.api.model.Service; +import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration; @@ -37,25 +37,18 @@ public class WebPageStandaloneDependentsReconciler private static final Logger log = LoggerFactory.getLogger(WebPageStandaloneDependentsReconciler.class); - private final Map> dependentResources; + private KubernetesDependentResource configMapDR; + private KubernetesDependentResource deploymentDR; + private KubernetesDependentResource serviceDR; public WebPageStandaloneDependentsReconciler(KubernetesClient kubernetesClient) { - dependentResources = Map.of( - "configmap", new ConfigMapDependentResource(), - "deployment", new DeploymentDependentResource(), - "service", new ServiceDependentResource()); - final var config = new KubernetesDependentResourceConfig() - .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR); - dependentResources.values().forEach(dr -> { - dr.setKubernetesClient(kubernetesClient); - dr.configureWith(config); - }); + createDependentResources(kubernetesClient); } @Override public Map prepareEventSources(EventSourceContext context) { - return dependentResources.entrySet().stream() - .collect(Collectors.toUnmodifiableMap(Entry::getKey, Entry::getValue)); + return EventSourceInitializer.defaultNamedEventSources(configMapDR.initEventSource(context), + deploymentDR.initEventSource(context), serviceDR.initEventSource(context)); } @Override @@ -63,24 +56,35 @@ public UpdateControl reconcile(WebPage webPage, Context contex throws Exception { simulateErrorIfRequested(webPage); - dependentResources.values().forEach(dr -> dr.reconcile(webPage, context)); + configMapDR.reconcile(webPage, context); + deploymentDR.reconcile(webPage, context); + serviceDR.reconcile(webPage, context); - webPage.setStatus(createStatus(getConfigMapName(webPage))); + webPage.setStatus( + createStatus(configMapDR.getResource(webPage).orElseThrow().getMetadata().getName())); return UpdateControl.updateStatus(webPage); } - private String getConfigMapName(WebPage webPage) { - return dependent("configmap").getAssociatedResource(webPage).orElseThrow().getMetadata() - .getName(); - } - @Override public ErrorStatusUpdateControl updateErrorStatus( WebPage resource, Context retryInfo, Exception e) { return handleError(resource, e); } - private KubernetesDependentResource dependent(String name) { - return dependentResources.get(name); + private void createDependentResources(KubernetesClient client) { + this.configMapDR = new ConfigMapDependentResource(); + this.configMapDR.setKubernetesClient(client); + configMapDR.configureWith(new KubernetesDependentResourceConfig() + .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); + + this.deploymentDR = new DeploymentDependentResource(); + deploymentDR.setKubernetesClient(client); + deploymentDR.configureWith(new KubernetesDependentResourceConfig() + .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); + + this.serviceDR = new ServiceDependentResource(); + serviceDR.setKubernetesClient(client); + serviceDR.configureWith(new KubernetesDependentResourceConfig() + .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); } } From e453a381ca70df7212a102d6af8137b7fb346c22 Mon Sep 17 00:00:00 2001 From: csviri Date: Mon, 28 Mar 2022 13:06:42 +0200 Subject: [PATCH 2/3] docs: javadoc --- .../operator/api/reconciler/EventSourceInitializer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java index 1682e0d4e4..d1ded023b0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceInitializer.java @@ -24,6 +24,12 @@ public interface EventSourceInitializer

{ */ Map prepareEventSources(EventSourceContext

context); + /** + * Utility method to easily create map with default names of event sources. + * + * @param eventSources to name + * @return even source with default names + */ static Map defaultNamedEventSources(EventSource... eventSources) { Map eventSourceMap = new HashMap<>(eventSources.length); for (EventSource eventSource : eventSources) { From 9bedbcaee7e8085bc21950c68327492521273dac Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 29 Mar 2022 09:29:32 +0200 Subject: [PATCH 3/3] fix: Stablond web reconciler --- ...WebPageStandaloneDependentsReconciler.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java index 0e197bf53e..b0625cdb0c 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java @@ -1,5 +1,6 @@ package io.javaoperatorsdk.operator.sample; +import java.util.Arrays; import java.util.Map; import org.slf4j.Logger; @@ -56,12 +57,12 @@ public UpdateControl reconcile(WebPage webPage, Context contex throws Exception { simulateErrorIfRequested(webPage); - configMapDR.reconcile(webPage, context); - deploymentDR.reconcile(webPage, context); - serviceDR.reconcile(webPage, context); + Arrays.asList(configMapDR, deploymentDR, serviceDR) + .forEach(dr -> dr.reconcile(webPage, context)); webPage.setStatus( - createStatus(configMapDR.getResource(webPage).orElseThrow().getMetadata().getName())); + createStatus( + configMapDR.getAssociatedResource(webPage).orElseThrow().getMetadata().getName())); return UpdateControl.updateStatus(webPage); } @@ -73,18 +74,13 @@ public ErrorStatusUpdateControl updateErrorStatus( private void createDependentResources(KubernetesClient client) { this.configMapDR = new ConfigMapDependentResource(); - this.configMapDR.setKubernetesClient(client); - configMapDR.configureWith(new KubernetesDependentResourceConfig() - .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); - this.deploymentDR = new DeploymentDependentResource(); - deploymentDR.setKubernetesClient(client); - deploymentDR.configureWith(new KubernetesDependentResourceConfig() - .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); - this.serviceDR = new ServiceDependentResource(); - serviceDR.setKubernetesClient(client); - serviceDR.configureWith(new KubernetesDependentResourceConfig() - .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); + + Arrays.asList(configMapDR, deploymentDR, serviceDR).forEach(dr -> { + dr.setKubernetesClient(client); + dr.configureWith(new KubernetesDependentResourceConfig() + .setLabelSelector(DEPENDENT_RESOURCE_LABEL_SELECTOR)); + }); } }