diff --git a/docs/advanced/runners/kubernetes.md b/docs/advanced/runners/kubernetes.md index 50a6752..e5a1582 100644 --- a/docs/advanced/runners/kubernetes.md +++ b/docs/advanced/runners/kubernetes.md @@ -23,4 +23,8 @@ runners: memory: "512M" # Timeout for the client operations. timeoutMs: 300000 + # Annotations to attach to the pods. Optional: By default, empty + annotations: + key1: value1 + key2: value2 ``` diff --git a/docs/configuration/reference.md b/docs/configuration/reference.md index b70ed98..41279d7 100644 --- a/docs/configuration/reference.md +++ b/docs/configuration/reference.md @@ -66,6 +66,10 @@ runners: memory: "512M" # Timeout of the commands timeoutMs: 300000 + # Annotations to attach to the pods + annotations: + key1: value1 + key2: value2 # The lambda runner configuration lambda: diff --git a/zoe-cli/src/commands/main.kt b/zoe-cli/src/commands/main.kt index 4011865..b23ad12 100644 --- a/zoe-cli/src/commands/main.kt +++ b/zoe-cli/src/commands/main.kt @@ -235,7 +235,8 @@ fun mainModule(context: CliContext) = module { cpu = kubeConfig.cpu, memory = kubeConfig.memory, deletePodsAfterCompletion = kubeConfig.deletePodAfterCompletion, - timeoutMs = kubeConfig.timeoutMs + timeoutMs = kubeConfig.timeoutMs, + annotations = kubeConfig.annotations, ), executor = ioPool, namespace = kubeConfig.namespace, diff --git a/zoe-cli/src/config/config.kt b/zoe-cli/src/config/config.kt index c82003b..58885d3 100644 --- a/zoe-cli/src/config/config.kt +++ b/zoe-cli/src/config/config.kt @@ -119,7 +119,8 @@ data class KubernetesRunnerConfig( val cpu: String = "1", val memory: String = "512M", val timeoutMs: Long = 300000, - val image: DockerImageConfig = DockerImageConfig() + val image: DockerImageConfig = DockerImageConfig(), + val annotations: Map = emptyMap(), ) data class DockerImageConfig( diff --git a/zoe-core/build.gradle.kts b/zoe-core/build.gradle.kts index 6b26e97..0080187 100644 --- a/zoe-core/build.gradle.kts +++ b/zoe-core/build.gradle.kts @@ -28,6 +28,7 @@ jib { dependencies { implementation("com.amazonaws:aws-lambda-java-core:1.2.1") + implementation("software.amazon.msk:aws-msk-iam-auth:2.2.0") implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.0") implementation("org.jetbrains.kotlin:kotlin-reflect") diff --git a/zoe-service/build.gradle.kts b/zoe-service/build.gradle.kts index f9e176b..7b94bc7 100644 --- a/zoe-service/build.gradle.kts +++ b/zoe-service/build.gradle.kts @@ -16,7 +16,6 @@ dependencies { implementation("software.amazon.awssdk:lambda") implementation("software.amazon.awssdk:s3") implementation("software.amazon.awssdk:secretsmanager") - implementation("software.amazon.msk:aws-msk-iam-auth:2.2.0") implementation("org.slf4j:slf4j-log4j12:1.7.30") implementation("log4j:log4j:1.2.17") diff --git a/zoe-service/src/runners/kubernetes.kt b/zoe-service/src/runners/kubernetes.kt index 0c6fa29..81a656f 100644 --- a/zoe-service/src/runners/kubernetes.kt +++ b/zoe-service/src/runners/kubernetes.kt @@ -67,7 +67,8 @@ class KubernetesRunner( val zoeImage: String, val cpu: String, val memory: String, - val timeoutMs: Long? + val timeoutMs: Long?, + val annotations: Map ) private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) @@ -159,6 +160,7 @@ class KubernetesRunner( val pod = generatePodObject( image = configuration.zoeImage, + annotations = configuration.annotations, args = listOf( mapOf("function" to function, "payload" to payload.toJsonNode()).toJsonString(), responseFile @@ -203,11 +205,12 @@ class KubernetesRunner( } } - private fun generatePodObject(image: String, args: List): Pod { + private fun generatePodObject(image: String, annotations: Map, args: List): Pod { val pod = loadFileFromResources("pod.template.json")?.parseJson() ?: userError("pod template not found !") return pod.apply { metadata.name = "zoe-${UUID.randomUUID()}" metadata.labels = labels + metadata.annotations = annotations spec.containers.find { it.name == "zoe" }?.apply { resources.requests = mapOf(