From 78b56a74e3f252d9853f379c9dada08c1b0bb2e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Wed, 6 Aug 2025 15:50:33 +0200 Subject: [PATCH 1/3] CRD JsonNode generator reproducer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../baseapi/simple/ReconcilerExecutorIT.java | 1 + .../baseapi/simple/TestCustomResourceSpec.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java index cbd8de4459..577abb909f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java @@ -24,6 +24,7 @@ void configMapGetsCreatedForTestCustomResource() { operator.getReconcilerOfType(TestReconciler.class).setUpdateStatus(true); TestCustomResource resource = TestUtils.testCustomResource(); + // resource.getSpec() operator.create(resource); awaitResourcesCreatedOrUpdated(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java index eda3c477b2..7f0454d52c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java @@ -1,5 +1,9 @@ package io.javaoperatorsdk.operator.baseapi.simple; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.databind.JsonNode; + public class TestCustomResourceSpec { private String configMapName; @@ -8,6 +12,18 @@ public class TestCustomResourceSpec { private String value; + private JsonNode someValue; + + @JsonAnyGetter + public JsonNode getSomeValue() { + return someValue; + } + + @JsonAnySetter + public void setSomeValue(JsonNode value) { + this.someValue = value; + } + public String getConfigMapName() { return configMapName; } From 981d1c37e6c670d7c8635ef5ad11dc9d72191b41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Thu, 7 Aug 2025 10:07:00 +0200 Subject: [PATCH 2/3] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- operator-framework/pom.xml | 6 ++++++ .../baseapi/simple/ReconcilerExecutorIT.java | 5 +++-- .../baseapi/simple/TestCustomResourceSpec.java | 14 ++++++-------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml index 18cbda43cf..761bda80bd 100644 --- a/operator-framework/pom.xml +++ b/operator-framework/pom.xml @@ -63,6 +63,12 @@ openshift-client-api test + + io.fabric8 + crd-generator-api-v2 + test + + org.apache.logging.log4j log4j-slf4j2-impl diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java index 577abb909f..d050733279 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java @@ -1,6 +1,7 @@ package io.javaoperatorsdk.operator.baseapi.simple; import java.time.Duration; +import java.util.Map; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Test; @@ -24,8 +25,8 @@ void configMapGetsCreatedForTestCustomResource() { operator.getReconcilerOfType(TestReconciler.class).setUpdateStatus(true); TestCustomResource resource = TestUtils.testCustomResource(); - // resource.getSpec() - operator.create(resource); + resource.getSpec().setSomeValue(Map.of("key1", Map.of("key2", "value2"))); + var res = operator.create(resource); awaitResourcesCreatedOrUpdated(); awaitStatusUpdated(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java index 7f0454d52c..c2e400d68b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java @@ -1,8 +1,8 @@ package io.javaoperatorsdk.operator.baseapi.simple; -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.databind.JsonNode; +import java.util.Map; + +import io.fabric8.crd.generator.annotation.PreserveUnknownFields; public class TestCustomResourceSpec { @@ -12,15 +12,13 @@ public class TestCustomResourceSpec { private String value; - private JsonNode someValue; + @PreserveUnknownFields private Map someValue; - @JsonAnyGetter - public JsonNode getSomeValue() { + public Map getSomeValue() { return someValue; } - @JsonAnySetter - public void setSomeValue(JsonNode value) { + public void setSomeValue(Map value) { this.someValue = value; } From e22d456d61e864904eb5509e529cf30c6fff0092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Attila=20M=C3=A9sz=C3=A1ros?= Date: Fri, 8 Aug 2025 09:59:00 +0200 Subject: [PATCH 3/3] wip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Attila Mészáros --- .../operator/baseapi/simple/ReconcilerExecutorIT.java | 5 ++++- .../baseapi/simple/TestCustomResourceSpec.java | 10 ++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java index d050733279..d19a495184 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java @@ -11,6 +11,8 @@ import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension; import io.javaoperatorsdk.operator.support.TestUtils; +import com.fasterxml.jackson.databind.ObjectMapper; + import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; @@ -22,10 +24,11 @@ class ReconcilerExecutorIT { @Test void configMapGetsCreatedForTestCustomResource() { + var om = new ObjectMapper(); operator.getReconcilerOfType(TestReconciler.class).setUpdateStatus(true); TestCustomResource resource = TestUtils.testCustomResource(); - resource.getSpec().setSomeValue(Map.of("key1", Map.of("key2", "value2"))); + resource.getSpec().setSomeValue(om.valueToTree(Map.of("k", "v"))); var res = operator.create(resource); awaitResourcesCreatedOrUpdated(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java index c2e400d68b..54de517216 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResourceSpec.java @@ -1,8 +1,6 @@ package io.javaoperatorsdk.operator.baseapi.simple; -import java.util.Map; - -import io.fabric8.crd.generator.annotation.PreserveUnknownFields; +import com.fasterxml.jackson.databind.JsonNode; public class TestCustomResourceSpec { @@ -12,13 +10,13 @@ public class TestCustomResourceSpec { private String value; - @PreserveUnknownFields private Map someValue; + private JsonNode someValue; - public Map getSomeValue() { + public JsonNode getSomeValue() { return someValue; } - public void setSomeValue(Map value) { + public void setSomeValue(JsonNode value) { this.someValue = value; }