From fe859ab5c46aba671940d8f7a29340127aea8d00 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 13 Jun 2023 22:40:27 +0200
Subject: [PATCH] spring native hints

---
 pom.xml                                       |  7 ++++
 .../operator/SpringNativeConfiguration.java   | 37 +++++++++++++++++--
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1cbbdfa..3d39a82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,6 +38,13 @@
 <!--			<groupId>org.apache.logging.log4j</groupId>-->
 <!--			<artifactId>log4j-core</artifactId>-->
 <!--		</dependency>-->
+<!-- https://mvnrepository.com/artifact/org.reflections/reflections -->
+<dependency>
+    <groupId>org.reflections</groupId>
+    <artifactId>reflections</artifactId>
+    <version>0.10.2</version>
+</dependency>
+
 
 
 
diff --git a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java
index a2e3fa3..16987e8 100644
--- a/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java
+++ b/src/main/java/de/ozgcloud/operator/SpringNativeConfiguration.java
@@ -1,22 +1,53 @@
 package de.ozgcloud.operator;
 
+import java.util.HashSet;
+import java.util.Objects;
+
+import org.reflections.Reflections;
+import org.springframework.aot.hint.MemberCategory;
 import org.springframework.aot.hint.RuntimeHints;
 import org.springframework.aot.hint.RuntimeHintsRegistrar;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.ImportRuntimeHints;
 
-import io.fabric8.kubernetes.client.impl.KubernetesClientImpl;
+import io.fabric8.kubernetes.api.model.KubernetesResource;
+import io.fabric8.kubernetes.api.model.NamedCluster;
+import lombok.extern.slf4j.Slf4j;
 
 @Configuration
 @ImportRuntimeHints(SpringNativeConfiguration.KuberenetesCLientImplHints.class)
+@Slf4j
 public class SpringNativeConfiguration {
 
 	static class KuberenetesCLientImplHints implements RuntimeHintsRegistrar {
 
+		private final Class<?> clazz = NamedCluster.class;
+		private final Reflections reflections = new Reflections(clazz.getPackageName(), clazz);
+
 		@Override
 		public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
-			hints.reflection()
-					.registerType(KubernetesClientImpl.class);
+			// https://github.com/kubernetes-native-java/fabric8-spring-native/
+			var subtypesOfKubernetesResource = reflections.getSubTypesOf(KubernetesResource.class);
+
+			var combined = new HashSet<Class<?>>();
+			combined.addAll(subtypesOfKubernetesResource);
+			combined.add(io.fabric8.kubernetes.internal.KubernetesDeserializer.class);
+			combined.add(io.fabric8.kubernetes.client.impl.KubernetesClientImpl.class);
+
+			combined
+					.stream()
+					.filter(Objects::nonNull)
+					.forEach(c -> {
+						if (log.isDebugEnabled()) {
+							log.debug("trying to register " + c.getName() + " for reflection");
+						}
+						hints.reflection().registerType(c, MemberCategory.values());
+
+//						registry.reflection().forType(c).withAccess(TypeAccess.values()).build();
+					});
+//			hints.reflection().registerType(clazz, null)
+//					.registerType(KubernetesClientImpl.class, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS);
+
 		}
 	}
 }
-- 
GitLab