Skip to content
Snippets Groups Projects
Commit db04988b authored by Benedikt Wetzel's avatar Benedikt Wetzel
Browse files

small fixes, minor code changes

parent c1ce4104
Branches
Tags
1 merge request!171Introduce ResourceSets to make loading of resource files more flexible
...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize ...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.client.DefaultKubernetesClient import io.fabric8.kubernetes.client.DefaultKubernetesClient
import io.fabric8.kubernetes.client.NamespacedKubernetesClient import io.fabric8.kubernetes.client.NamespacedKubernetesClient
import io.quarkus.runtime.annotations.RegisterForReflection
import mu.KotlinLogging import mu.KotlinLogging
import theodolite.k8s.resourceLoader.K8sResourceLoaderFromString import theodolite.k8s.resourceLoader.K8sResourceLoaderFromString
import theodolite.util.YamlParserFromString import theodolite.util.YamlParserFromString
...@@ -11,17 +12,17 @@ import theodolite.util.YamlParserFromString ...@@ -11,17 +12,17 @@ import theodolite.util.YamlParserFromString
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
private const val DEFAULT_NAMESPACE = "default" private const val DEFAULT_NAMESPACE = "default"
@RegisterForReflection
@JsonDeserialize @JsonDeserialize
class ConfigMapResourceSet: ResourceSet { class ConfigMapResourceSet: ResourceSet, KubernetesResource {
lateinit var configmap: String lateinit var configmap: String
lateinit var files: List<String> // load all files, iff files is not set 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) @OptIn(ExperimentalStdlibApi::class)
override fun getResourceSet(): List<Pair<String, KubernetesResource>> { 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 var resources = client
.configMaps() .configMaps()
...@@ -42,7 +43,7 @@ class ConfigMapResourceSet: ResourceSet { ...@@ -42,7 +43,7 @@ class ConfigMapResourceSet: ResourceSet {
it) } it) }
.map { .map {
Pair( Pair(
it.first, it.second.key,
loader.loadK8sResource(it.first, it.second.value)) } loader.loadK8sResource(it.first, it.second.value)) }
} }
......
...@@ -3,6 +3,7 @@ package theodolite.benchmark ...@@ -3,6 +3,7 @@ package theodolite.benchmark
import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.client.DefaultKubernetesClient import io.fabric8.kubernetes.client.DefaultKubernetesClient
import io.quarkus.runtime.annotations.RegisterForReflection
import mu.KotlinLogging import mu.KotlinLogging
import theodolite.k8s.resourceLoader.K8sResourceLoaderFromFile import theodolite.k8s.resourceLoader.K8sResourceLoaderFromFile
import theodolite.util.DeploymentFailedException import theodolite.util.DeploymentFailedException
...@@ -12,13 +13,11 @@ import java.io.File ...@@ -12,13 +13,11 @@ import java.io.File
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
private const val DEFAULT_NAMESPACE = "default" private const val DEFAULT_NAMESPACE = "default"
@RegisterForReflection
@JsonDeserialize @JsonDeserialize
class FileSystemResourceSet: ResourceSet { class FileSystemResourceSet: ResourceSet, KubernetesResource {
lateinit var path: String lateinit var path: String
lateinit var files: List<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>> { override fun getResourceSet(): List<Pair<String, KubernetesResource>> {
...@@ -42,6 +41,10 @@ class FileSystemResourceSet: ResourceSet { ...@@ -42,6 +41,10 @@ class FileSystemResourceSet: ResourceSet {
} }
private fun loadSingleResource(resourceURL: String): Pair<String, KubernetesResource> { 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 resourcePath = "$path/$resourceURL"
val kind = parser.parse(resourcePath, HashMap<String, String>()::class.java)?.get("kind")!! val kind = parser.parse(resourcePath, HashMap<String, String>()::class.java)?.get("kind")!!
val k8sResource = loader.loadK8sResource(kind, resourcePath) val k8sResource = loader.loadK8sResource(kind, resourcePath)
......
package theodolite.benchmark package theodolite.benchmark
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import io.fabric8.kubernetes.api.model.KubernetesResource 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>> fun getResourceSet(): List<Pair<String, KubernetesResource>>
} }
\ No newline at end of file
...@@ -13,16 +13,16 @@ import theodolite.util.DeploymentFailedException ...@@ -13,16 +13,16 @@ import theodolite.util.DeploymentFailedException
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
class ResourceSets: KubernetesResource { class ResourceSets: KubernetesResource {
@JsonProperty("ConfigMapResourceSet") @JsonProperty("ConfigMapResourceSet")
val ConfigMapResourceSet: ConfigMapResourceSet? = null lateinit var ConfigMapResourceSet: ConfigMapResourceSet
@JsonProperty("FileSystemResourceSet") @JsonProperty("FileSystemResourceSet")
val FileSystemResourceSet: FileSystemResourceSet? = null lateinit var FileSystemResourceSet: FileSystemResourceSet
fun loadResourceSet(): List<Pair<String, KubernetesResource>> { fun loadResourceSet(): List<Pair<String, KubernetesResource>> {
return try { return try {
if (ConfigMapResourceSet != null) { if (::ConfigMapResourceSet.isInitialized) {
ConfigMapResourceSet.getResourceSet() ConfigMapResourceSet.getResourceSet()
} else if (FileSystemResourceSet != null) { } else if (::FileSystemResourceSet.isInitialized) {
FileSystemResourceSet.getResourceSet() FileSystemResourceSet.getResourceSet()
} else { } else {
throw DeploymentFailedException("could not load resourceSet.") throw DeploymentFailedException("could not load resourceSet.")
...@@ -30,6 +30,5 @@ class ResourceSets: KubernetesResource { ...@@ -30,6 +30,5 @@ class ResourceSets: KubernetesResource {
} catch (e: Exception) { } catch (e: Exception) {
throw e throw e
} }
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment