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
This commit is part of merge request !85. Comments created here will be created in the context of that merge request.
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,24 +15,38 @@ class ResourceLimitPatcher( ...@@ -13,24 +15,38 @@ 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) {
is Deployment -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach { k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
when { setLimits(it, value as kotlin.String)
it.resources == null -> { }
val resource = ResourceRequirements() }
resource.limits = mapOf(limitedResource to Quantity(value as kotlin.String)) is StatefulSet -> {
it.resources = resource k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setLimits(it, value as kotlin.String)
} }
it.resources.limits.isEmpty() -> {
it.resources.limits = mapOf(limitedResource to Quantity(value as kotlin.String))
} }
else -> { else -> {
val values = mutableMapOf<kotlin.String, Quantity>() throw IllegalArgumentException("ResourceLimitPatcher not applicable for $k8sResource")
it.resources.limits.forEach { entry -> values[entry.key] = entry.value } }
values[limitedResource] = Quantity(value as kotlin.String)
it.resources.limits = values
} }
} }
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,24 +15,38 @@ class ResourceRequestPatcher( ...@@ -12,24 +15,38 @@ 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) {
is Deployment -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach { k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
when { setRequests(it, value as kotlin.String)
it.resources == null -> { }
val resource = ResourceRequirements() }
resource.requests = mapOf(requestedResource to Quantity(value as kotlin.String)) is StatefulSet -> {
it.resources = resource k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setRequests(it, value as kotlin.String)
} }
it.resources.requests.isEmpty() -> {
it.resources.requests = mapOf(requestedResource to Quantity(value as kotlin.String))
} }
else -> { else -> {
val values = mutableMapOf<kotlin.String, Quantity>() throw IllegalArgumentException("ResourceRequestPatcher not applicable for $k8sResource")
it.resources.requests.forEach { entry -> values[entry.key] = entry.value } }
values[requestedResource] = Quantity(value as kotlin.String)
it.resources.requests = values
} }
} }
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.
Please register or to comment