diff --git a/theodolite/src/main/kotlin/theodolite/benchmark/ConfigMapResourceSet.kt b/theodolite/src/main/kotlin/theodolite/benchmark/ConfigMapResourceSet.kt index 3bfad3ccd928879d3d86458fd91194cd36daeef7..ac9e9898061cac2b232c5a4ff3fe9dc1973e9f8d 100644 --- a/theodolite/src/main/kotlin/theodolite/benchmark/ConfigMapResourceSet.kt +++ b/theodolite/src/main/kotlin/theodolite/benchmark/ConfigMapResourceSet.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.client.DefaultKubernetesClient import io.fabric8.kubernetes.client.NamespacedKubernetesClient +import io.quarkus.runtime.annotations.RegisterForReflection import mu.KotlinLogging import theodolite.k8s.resourceLoader.K8sResourceLoaderFromString import theodolite.util.YamlParserFromString @@ -11,17 +12,17 @@ import theodolite.util.YamlParserFromString private val logger = KotlinLogging.logger {} private const val DEFAULT_NAMESPACE = "default" +@RegisterForReflection @JsonDeserialize -class ConfigMapResourceSet: ResourceSet { +class ConfigMapResourceSet: ResourceSet, KubernetesResource { lateinit var configmap: String lateinit var files: List<String> // load all files, iff files is not set - private val namespace = System.getenv("NAMESPACE") ?: DEFAULT_NAMESPACE - private val client: NamespacedKubernetesClient = DefaultKubernetesClient().inNamespace(namespace) - private val loader = K8sResourceLoaderFromString(client) - @OptIn(ExperimentalStdlibApi::class) override fun getResourceSet(): List<Pair<String, KubernetesResource>> { + val namespace = System.getenv("NAMESPACE") ?: DEFAULT_NAMESPACE + val client: NamespacedKubernetesClient = DefaultKubernetesClient().inNamespace(namespace) + val loader = K8sResourceLoaderFromString(client) var resources = client .configMaps() @@ -42,7 +43,7 @@ class ConfigMapResourceSet: ResourceSet { it) } .map { Pair( - it.first, + it.second.key, loader.loadK8sResource(it.first, it.second.value)) } } diff --git a/theodolite/src/main/kotlin/theodolite/benchmark/FileSystemResourceSet.kt b/theodolite/src/main/kotlin/theodolite/benchmark/FileSystemResourceSet.kt index 6866fcf8a07668d28ca7b0a59848817012d1dd00..dbedee6c85111b6ed72a640f66611fab4bdde823 100644 --- a/theodolite/src/main/kotlin/theodolite/benchmark/FileSystemResourceSet.kt +++ b/theodolite/src/main/kotlin/theodolite/benchmark/FileSystemResourceSet.kt @@ -3,6 +3,7 @@ package theodolite.benchmark import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.client.DefaultKubernetesClient +import io.quarkus.runtime.annotations.RegisterForReflection import mu.KotlinLogging import theodolite.k8s.resourceLoader.K8sResourceLoaderFromFile import theodolite.util.DeploymentFailedException @@ -12,13 +13,11 @@ import java.io.File private val logger = KotlinLogging.logger {} private const val DEFAULT_NAMESPACE = "default" +@RegisterForReflection @JsonDeserialize -class FileSystemResourceSet: ResourceSet { +class FileSystemResourceSet: ResourceSet, KubernetesResource { lateinit var path: String lateinit var files: List<String> - private val parser = YamlParserFromFile() - private val namespace = System.getenv("NAMESPACE") ?: DEFAULT_NAMESPACE - private val loader = K8sResourceLoaderFromFile(DefaultKubernetesClient().inNamespace(namespace)) override fun getResourceSet(): List<Pair<String, KubernetesResource>> { @@ -42,6 +41,10 @@ class FileSystemResourceSet: ResourceSet { } private fun loadSingleResource(resourceURL: String): Pair<String, KubernetesResource> { + val parser = YamlParserFromFile() + val namespace = System.getenv("NAMESPACE") ?: DEFAULT_NAMESPACE + val loader = K8sResourceLoaderFromFile(DefaultKubernetesClient().inNamespace(namespace)) + val resourcePath = "$path/$resourceURL" val kind = parser.parse(resourcePath, HashMap<String, String>()::class.java)?.get("kind")!! val k8sResource = loader.loadK8sResource(kind, resourcePath) diff --git a/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSet.kt b/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSet.kt index 2a0ce3966a1a45c3351a943b5e8178cf9e44378f..974e06858e0f761f5e7b370cb14cdb2dc5c345af 100644 --- a/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSet.kt +++ b/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSet.kt @@ -1,8 +1,12 @@ package theodolite.benchmark +import com.fasterxml.jackson.databind.annotation.JsonDeserialize import io.fabric8.kubernetes.api.model.KubernetesResource +import io.quarkus.runtime.annotations.RegisterForReflection -interface ResourceSet { +@RegisterForReflection +@JsonDeserialize +interface ResourceSet: KubernetesResource { fun getResourceSet(): List<Pair<String, KubernetesResource>> } \ No newline at end of file diff --git a/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSets.kt b/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSets.kt index 1d5a2dc0e90a0bd14b7c0cc426f90aaed2a6cada..f7b3dac8025b3d5e93a2ae52a13fdd8743037a46 100644 --- a/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSets.kt +++ b/theodolite/src/main/kotlin/theodolite/benchmark/ResourceSets.kt @@ -13,16 +13,16 @@ import theodolite.util.DeploymentFailedException @JsonInclude(JsonInclude.Include.NON_NULL) class ResourceSets: KubernetesResource { @JsonProperty("ConfigMapResourceSet") - val ConfigMapResourceSet: ConfigMapResourceSet? = null + lateinit var ConfigMapResourceSet: ConfigMapResourceSet @JsonProperty("FileSystemResourceSet") - val FileSystemResourceSet: FileSystemResourceSet? = null + lateinit var FileSystemResourceSet: FileSystemResourceSet fun loadResourceSet(): List<Pair<String, KubernetesResource>> { return try { - if (ConfigMapResourceSet != null) { + if (::ConfigMapResourceSet.isInitialized) { ConfigMapResourceSet.getResourceSet() - } else if (FileSystemResourceSet != null) { + } else if (::FileSystemResourceSet.isInitialized) { FileSystemResourceSet.getResourceSet() } else { throw DeploymentFailedException("could not load resourceSet.") @@ -30,6 +30,5 @@ class ResourceSets: KubernetesResource { } catch (e: Exception) { throw e } - } } \ No newline at end of file