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

Make ResourcePatcher applicable for Deployment and Statefulset

parent d48c9dd5
No related branches found
No related tags found
4 merge requests!159Re-implementation of Theodolite with Kotlin/Quarkus,!157Update Graal Image in CI pipeline,!85Introduce new Benchmark class and Patcher,!83WIP: Re-implementation of Theodolite with Kotlin/Quarkus
package theodolite.patcher package theodolite.patcher
import io.fabric8.kubernetes.api.model.Container
import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.api.model.Quantity import io.fabric8.kubernetes.api.model.Quantity
import io.fabric8.kubernetes.api.model.ResourceRequirements import io.fabric8.kubernetes.api.model.ResourceRequirements
import io.fabric8.kubernetes.api.model.apps.Deployment import io.fabric8.kubernetes.api.model.apps.Deployment
import javax.validation.constraints.Null import io.fabric8.kubernetes.api.model.apps.StatefulSet
import java.lang.IllegalArgumentException
class ResourceLimitPatcher( class ResourceLimitPatcher(
private val k8sResource: KubernetesResource, private val k8sResource: KubernetesResource,
...@@ -13,25 +15,39 @@ class ResourceLimitPatcher( ...@@ -13,25 +15,39 @@ class ResourceLimitPatcher(
) : AbstractPatcher(k8sResource, container, limitedResource) { ) : AbstractPatcher(k8sResource, container, limitedResource) {
override fun <String> patch(value: String) { override fun <String> patch(value: String) {
if (k8sResource is Deployment) { when (k8sResource) {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach { is Deployment -> {
when { k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
it.resources == null -> { setLimits(it, value as kotlin.String)
val resource = ResourceRequirements()
resource.limits = mapOf(limitedResource to Quantity(value as kotlin.String))
it.resources = resource
}
it.resources.limits.isEmpty() -> {
it.resources.limits = mapOf(limitedResource to Quantity(value as kotlin.String))
}
else -> {
val values = mutableMapOf<kotlin.String, Quantity>()
it.resources.limits.forEach { entry -> values[entry.key] = entry.value }
values[limitedResource] = Quantity(value as kotlin.String)
it.resources.limits = values
}
} }
} }
is StatefulSet -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setLimits(it, value as kotlin.String)
}
}
else -> {
throw IllegalArgumentException("ResourceLimitPatcher not applicable for $k8sResource")
}
}
}
private fun setLimits(container: Container, value: String) {
when {
container.resources == null -> {
val resource = ResourceRequirements()
resource.limits = mapOf(limitedResource to Quantity(value))
container.resources = resource
}
container.resources.limits.isEmpty() -> {
container.resources.limits = mapOf(limitedResource to Quantity(value))
}
else -> {
val values = mutableMapOf<String, Quantity>()
container.resources.limits.forEach { entry -> values[entry.key] = entry.value }
values[limitedResource] = Quantity(value)
container.resources.limits = values
}
} }
} }
} }
package theodolite.patcher package theodolite.patcher
import io.fabric8.kubernetes.api.model.Container
import io.fabric8.kubernetes.api.model.KubernetesResource import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.api.model.Quantity import io.fabric8.kubernetes.api.model.Quantity
import io.fabric8.kubernetes.api.model.ResourceRequirements import io.fabric8.kubernetes.api.model.ResourceRequirements
import io.fabric8.kubernetes.api.model.apps.Deployment import io.fabric8.kubernetes.api.model.apps.Deployment
import io.fabric8.kubernetes.api.model.apps.StatefulSet
import java.lang.IllegalArgumentException
class ResourceRequestPatcher( class ResourceRequestPatcher(
private val k8sResource: KubernetesResource, private val k8sResource: KubernetesResource,
...@@ -12,25 +15,39 @@ class ResourceRequestPatcher( ...@@ -12,25 +15,39 @@ class ResourceRequestPatcher(
) : AbstractPatcher(k8sResource, container, requestedResource) { ) : AbstractPatcher(k8sResource, container, requestedResource) {
override fun <String> patch(value: String) { override fun <String> patch(value: String) {
if (k8sResource is Deployment) { when (k8sResource) {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach { is Deployment -> {
when { k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
it.resources == null -> { setRequests(it, value as kotlin.String)
val resource = ResourceRequirements()
resource.requests = mapOf(requestedResource to Quantity(value as kotlin.String))
it.resources = resource
}
it.resources.requests.isEmpty() -> {
it.resources.requests = mapOf(requestedResource to Quantity(value as kotlin.String))
}
else -> {
val values = mutableMapOf<kotlin.String, Quantity>()
it.resources.requests.forEach { entry -> values[entry.key] = entry.value }
values[requestedResource] = Quantity(value as kotlin.String)
it.resources.requests = values
}
} }
} }
is StatefulSet -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setRequests(it, value as kotlin.String)
}
}
else -> {
throw IllegalArgumentException("ResourceRequestPatcher not applicable for $k8sResource")
}
}
}
private fun setRequests(container: Container, value: String) {
when {
container.resources == null -> {
val resource = ResourceRequirements()
resource.requests = mapOf(requestedResource to Quantity(value))
container.resources = resource
}
container.resources.requests.isEmpty() -> {
container.resources.requests = mapOf(requestedResource to Quantity(value))
}
else -> {
val values = mutableMapOf<String, Quantity>()
container.resources.requests.forEach { entry -> values[entry.key] = entry.value }
values[requestedResource] = Quantity(value)
container.resources.requests = values
}
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment