From 7818fe1081a245bc0f7f44c43529e4c0e337cc0b Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 28 Feb 2023 14:37:56 +0100 Subject: [PATCH 1/3] operator wip --- operator/pom.xml | 60 +++++++++++++++++++ .../longevitytest/ConfigMapReconciler.java | 40 +++++++++++++ pom.xml | 9 +++ 3 files changed, 109 insertions(+) create mode 100644 operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java diff --git a/operator/pom.xml b/operator/pom.xml index 0a9793b..2434857 100644 --- a/operator/pom.xml +++ b/operator/pom.xml @@ -15,7 +15,67 @@ Operator Test Operator + + true + + + io.quarkiverse.operatorsdk + quarkus-operator-sdk + + + io.quarkiverse.operatorsdk + quarkus-operator-sdk-bundle-generator + + + io.quarkus + quarkus-openshift + + + io.quarkiverse.operatorsdk + quarkus-operator-sdk-bundle-generator-deployment + provided + + + io.quarkus + quarkus-junit5 + test + + + io.quarkus + quarkus-junit5-mockito + test + + + org.awaitility + awaitility + test + + + + + io.quarkus + quarkus-maven-plugin + + + + build + + + + + + + + + + native + + native + + + + \ No newline at end of file diff --git a/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java new file mode 100644 index 0000000..fac2203 --- /dev/null +++ b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java @@ -0,0 +1,40 @@ +package io.javaoperatorsdk.operator.longevitytest; + +import io.fabric8.kubernetes.api.model.ConfigMap; +import io.fabric8.kubernetes.api.model.Secret; +import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; +import io.javaoperatorsdk.operator.api.reconciler.*; +import io.javaoperatorsdk.operator.processing.event.source.EventSource; +import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +@ControllerConfiguration(labelSelector = "type=longevity-test") +public class ConfigMapReconciler implements Reconciler, EventSourceInitializer { + + private static final Logger log = LoggerFactory.getLogger(ConfigMapReconciler.class); + + @Override + public UpdateControl reconcile(ConfigMap configMap, Context context) { + log.info("Reconciling ConfigMap name: {}, namespace: {}", + configMap.getMetadata().getName(), + configMap.getMetadata().getNamespace()); + + var maybeSecret = context.getSecondaryResource(Secret.class); +// maybeSecret.ifPresentOrElse(,()->{ +// +// }); + + return UpdateControl.noUpdate(); + } + + + @Override + public Map prepareEventSources(EventSourceContext context) { + InformerEventSource secretES = new InformerEventSource<>(InformerConfiguration.from(Secret.class,context) + .build(), context); + return EventSourceInitializer.nameEventSources(secretES); + } +} diff --git a/pom.xml b/pom.xml index 88e9879..3af9e3a 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,8 @@ 2.21.0 1.0 1.8.0 + 2.16.3.Final + 5.1.0 @@ -67,6 +69,13 @@ + + io.quarkiverse.operatorsdk + quarkus-operator-sdk-bom + ${quarkus.operator.sdk.version} + pom + import + org.junit junit-bom From e31dc17c10af25628f4244e80a21139f6982acb7 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 28 Feb 2023 15:46:08 +0100 Subject: [PATCH 2/3] fix: folder key --- .../longevitytest/ConfigMapReconciler.java | 49 ++++++++++--------- pom.xml | 2 +- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java index fac2203..dfaa9f7 100644 --- a/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java +++ b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java @@ -1,40 +1,43 @@ package io.javaoperatorsdk.operator.longevitytest; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.Secret; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.processing.event.source.EventSource; import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Map; @ControllerConfiguration(labelSelector = "type=longevity-test") -public class ConfigMapReconciler implements Reconciler, EventSourceInitializer { +public class ConfigMapReconciler + implements Reconciler, EventSourceInitializer { - private static final Logger log = LoggerFactory.getLogger(ConfigMapReconciler.class); + private static final Logger log = LoggerFactory.getLogger(ConfigMapReconciler.class); - @Override - public UpdateControl reconcile(ConfigMap configMap, Context context) { - log.info("Reconciling ConfigMap name: {}, namespace: {}", - configMap.getMetadata().getName(), - configMap.getMetadata().getNamespace()); + @Override + public UpdateControl reconcile(ConfigMap configMap, Context context) { + log.info("Reconciling ConfigMap name: {}, namespace: {}", + configMap.getMetadata().getName(), + configMap.getMetadata().getNamespace()); - var maybeSecret = context.getSecondaryResource(Secret.class); -// maybeSecret.ifPresentOrElse(,()->{ -// -// }); + var maybeSecret = context.getSecondaryResource(Secret.class); + // maybeSecret.ifPresentOrElse(,()->{ + // + // }); - return UpdateControl.noUpdate(); - } + return UpdateControl.noUpdate(); + } - @Override - public Map prepareEventSources(EventSourceContext context) { - InformerEventSource secretES = new InformerEventSource<>(InformerConfiguration.from(Secret.class,context) - .build(), context); - return EventSourceInitializer.nameEventSources(secretES); - } + @Override + public Map prepareEventSources(EventSourceContext context) { + InformerEventSource secretES = + new InformerEventSource<>(InformerConfiguration.from(Secret.class, context) + .build(), context); + return EventSourceInitializer.nameEventSources(secretES); + } } diff --git a/pom.xml b/pom.xml index 3af9e3a..6053103 100644 --- a/pom.xml +++ b/pom.xml @@ -177,7 +177,7 @@ initialize - longevitytest.project.root + longevity.test.project.root From 7b9d1b52799ec2918ddc440bf0734d63a5758a64 Mon Sep 17 00:00:00 2001 From: csviri Date: Tue, 28 Feb 2023 16:34:13 +0100 Subject: [PATCH 3/3] impl --- .../longevitytest/ConfigMapReconciler.java | 47 ++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java index dfaa9f7..c320b00 100644 --- a/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java +++ b/operator/src/main/java/io/javaoperatorsdk/operator/longevitytest/ConfigMapReconciler.java @@ -2,36 +2,57 @@ import java.util.Map; +import javax.inject.Inject; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import io.fabric8.kubernetes.api.model.ConfigMap; +import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.Secret; +import io.fabric8.kubernetes.api.model.SecretBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.processing.event.source.EventSource; import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; -@ControllerConfiguration(labelSelector = "type=longevity-test") +@ControllerConfiguration(labelSelector = "app=longevity-test") public class ConfigMapReconciler implements Reconciler, EventSourceInitializer { private static final Logger log = LoggerFactory.getLogger(ConfigMapReconciler.class); + private static final String DATA_KEY = "key"; + + @Inject + private KubernetesClient client; + @Override public UpdateControl reconcile(ConfigMap configMap, Context context) { - log.info("Reconciling ConfigMap name: {}, namespace: {}", + log.debug("Reconciling ConfigMap name: {}, namespace: {}", configMap.getMetadata().getName(), configMap.getMetadata().getNamespace()); var maybeSecret = context.getSecondaryResource(Secret.class); - // maybeSecret.ifPresentOrElse(,()->{ - // - // }); - + maybeSecret.ifPresentOrElse(secret -> { + if (!match(secret, configMap)) { + log.debug("Updating Secret, name:{}, namespace:{}", configMap.getMetadata().getName(), + configMap.getMetadata().getName()); + secret.setData(Map.of(DATA_KEY, configMap.getData().get(DATA_KEY))); + client.resource(secret).replace(); + } + }, () -> { + log.debug("Creating Secret, name:{}, namespace:{}", configMap.getMetadata().getName(), + configMap.getMetadata().getName()); + client.resource(desired(configMap)).create(); + }); return UpdateControl.noUpdate(); } + private boolean match(Secret secret, ConfigMap configMap) { + return secret.getData().get(DATA_KEY).equals(configMap.getData().get(DATA_KEY)); + } @Override public Map prepareEventSources(EventSourceContext context) { @@ -40,4 +61,18 @@ public Map prepareEventSources(EventSourceContext