Skip to content
Snippets Groups Projects
Commit 0d3da1b1 authored by Benedikt Wetzel's avatar Benedikt Wetzel Committed by Sören Henning
Browse files

Make ResourcePatcher applicable for Deployment and Statefulset

parent 057a3517
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
import io.fabric8.kubernetes.api.model.Container
import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.api.model.Quantity
import io.fabric8.kubernetes.api.model.ResourceRequirements
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(
private val k8sResource: KubernetesResource,
......@@ -13,25 +15,39 @@ class ResourceLimitPatcher(
) : AbstractPatcher(k8sResource, container, limitedResource) {
override fun <String> patch(value: String) {
if (k8sResource is Deployment) {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
when {
it.resources == null -> {
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
}
when (k8sResource) {
is Deployment -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setLimits(it, value as kotlin.String)
}
}
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
import io.fabric8.kubernetes.api.model.Container
import io.fabric8.kubernetes.api.model.KubernetesResource
import io.fabric8.kubernetes.api.model.Quantity
import io.fabric8.kubernetes.api.model.ResourceRequirements
import io.fabric8.kubernetes.api.model.apps.Deployment
import io.fabric8.kubernetes.api.model.apps.StatefulSet
import java.lang.IllegalArgumentException
class ResourceRequestPatcher(
private val k8sResource: KubernetesResource,
......@@ -12,25 +15,39 @@ class ResourceRequestPatcher(
) : AbstractPatcher(k8sResource, container, requestedResource) {
override fun <String> patch(value: String) {
if (k8sResource is Deployment) {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
when {
it.resources == null -> {
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
}
when (k8sResource) {
is Deployment -> {
k8sResource.spec.template.spec.containers.filter { it.name == container }.forEach {
setRequests(it, value as kotlin.String)
}
}
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