Skip to content
Snippets Groups Projects

Introduce new Benchmark class and Patcher

2 files
+ 68
35
Compare changes
  • Side-by-side
  • Inline
Files
2
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
}
}
}
}
Loading