From 736999261c234bf1fb0db33f67ea1b8dba5f6dd2 Mon Sep 17 00:00:00 2001 From: csviri Date: Wed, 11 Oct 2023 13:55:52 +0200 Subject: [PATCH] Sample custom config for Kubernetes Dependent Resource Signed-off-by: csviri --- .../WebPageManagedDependentsReconciler.java | 4 +- .../operator/sample/WebPageOperator.java | 9 ++++- .../ConfigMapDependentResource.java | 38 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java index d370cd3315..e6e30a652b 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java @@ -15,7 +15,8 @@ */ @ControllerConfiguration( dependents = { - @Dependent(type = ConfigMapDependentResource.class), + @Dependent(type = ConfigMapDependentResource.class, + name = WebPageManagedDependentsReconciler.CONFIG_MAP_DEPENDENT), @Dependent(type = DeploymentDependentResource.class), @Dependent(type = ServiceDependentResource.class), @Dependent(type = IngressDependentResource.class, @@ -25,6 +26,7 @@ public class WebPageManagedDependentsReconciler implements Reconciler, ErrorStatusHandler, Cleaner { public static final String SELECTOR = "managed"; + public static final String CONFIG_MAP_DEPENDENT = "configMapDependentName"; @Override public ErrorStatusUpdateControl updateErrorStatus(WebPage resource, diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java index 28a0b4e84f..9ea79c8cd5 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java @@ -9,11 +9,14 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientBuilder; import io.javaoperatorsdk.operator.Operator; +import io.javaoperatorsdk.operator.sample.dependentresource.ConfigMapDependentResource; import io.javaoperatorsdk.operator.sample.probes.LivenessHandler; import io.javaoperatorsdk.operator.sample.probes.StartupHandler; import com.sun.net.httpserver.HttpServer; +import static io.javaoperatorsdk.operator.sample.WebPageManagedDependentsReconciler.CONFIG_MAP_DEPENDENT; + public class WebPageOperator { public static final String WEBPAGE_RECONCILER_ENV = "WEBPAGE_RECONCILER"; public static final String WEBPAGE_CLASSIC_RECONCILER_ENV_VALUE = "classic"; @@ -35,7 +38,11 @@ public static void main(String[] args) throws IOException { operator.register(new WebPageReconciler(client)); } else if (WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE .equals(reconcilerEnvVar)) { - operator.register(new WebPageManagedDependentsReconciler()); + operator.register(new WebPageManagedDependentsReconciler(), o -> { + o.replacingNamedDependentResourceConfig(CONFIG_MAP_DEPENDENT, + new ConfigMapDependentResource.MyConfig("customValue")); + }); + } else { operator.register(new WebPageStandaloneDependentsReconciler(client)); } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java index cc7b15146b..26fac9205c 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java @@ -2,6 +2,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,8 +11,14 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.ResourceDiscriminator; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; +import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig; +import io.javaoperatorsdk.operator.processing.event.source.filter.GenericFilter; +import io.javaoperatorsdk.operator.processing.event.source.filter.OnAddFilter; +import io.javaoperatorsdk.operator.processing.event.source.filter.OnDeleteFilter; +import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter; import io.javaoperatorsdk.operator.sample.customresource.WebPage; import static io.javaoperatorsdk.operator.sample.Utils.configMapName; @@ -31,6 +38,7 @@ public ConfigMapDependentResource() { @Override protected ConfigMap desired(WebPage webPage, Context context) { + log.info("custom value: {}", ((MyConfig) configuration().orElseThrow()).getCustomValue()); Map data = new HashMap<>(); data.put("index.html", webPage.getSpec().getHtml()); Map labels = new HashMap<>(); @@ -63,4 +71,34 @@ public ConfigMap update(ConfigMap actual, ConfigMap target, WebPage primary, .delete(); return res; } + + public static class MyConfig extends KubernetesDependentResourceConfig { + + public MyConfig(String customValue) { + this.customValue = customValue; + } + + public MyConfig() {} + + public MyConfig(Set namespaces, String labelSelector, + boolean configuredNS, ResourceDiscriminator resourceDiscriminator, + OnAddFilter onAddFilter, OnUpdateFilter onUpdateFilter, + OnDeleteFilter onDeleteFilter, GenericFilter genericFilter, + String customValue) { + super(namespaces, labelSelector, configuredNS, resourceDiscriminator, onAddFilter, + onUpdateFilter, onDeleteFilter, genericFilter); + this.customValue = customValue; + } + + private String customValue; + + public String getCustomValue() { + return customValue; + } + + public void setCustomValue(String customValue) { + this.customValue = customValue; + } + } + }