From 0d7a511a67af7396fb692cb46c1ca19c8da5cf85 Mon Sep 17 00:00:00 2001 From: cccs-tom <59839056+cccs-tom@users.noreply.github.com> Date: Thu, 24 Jun 2021 01:39:56 -0400 Subject: [PATCH] fix: Prevent duplicate toleration specs (#29) Add duplicate check in unit test Fix: Prevent duplicate toleration specs Fix formatting error --- .../infrastructure/kubernetes/environment/PodMerger.java | 8 +++++++- .../kubernetes/environment/PodMergerTest.java | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMerger.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMerger.java index 20faca5d7e..85d7370155 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMerger.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMerger.java @@ -23,6 +23,7 @@ import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.PodSecurityContext; import io.fabric8.kubernetes.api.model.PodSpec; import io.fabric8.kubernetes.api.model.PodTemplateSpec; +import io.fabric8.kubernetes.api.model.Toleration; import io.fabric8.kubernetes.api.model.Volume; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; @@ -154,8 +155,13 @@ public class PodMerger { // if there are entries with such keys then values will be overridden baseSpec.getAdditionalProperties().putAll(podData.getSpec().getAdditionalProperties()); + // add tolerations to baseSpec if any - baseSpec.getTolerations().addAll(podData.getSpec().getTolerations()); + for (Toleration toleration : podData.getSpec().getTolerations()) { + if (!baseSpec.getTolerations().contains(toleration)) { + baseSpec.getTolerations().add(toleration); + } + } } Map matchLabels = new HashMap<>(); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMergerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMergerTest.java index 16befa69b9..a0220e39cb 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMergerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/environment/PodMergerTest.java @@ -33,6 +33,7 @@ import io.fabric8.kubernetes.api.model.VolumeBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -131,7 +132,9 @@ public class PodMergerTest { .withVolumes(new VolumeBuilder().withName("v2").build()) .withNodeSelector(Map.of("foo2", "bar2")) .withImagePullSecrets(new LocalObjectReferenceBuilder().withName("secret2").build()) - .withTolerations(new Toleration("Effect", "key", "operator", 0L, "value2")) + .withTolerations( + new Toleration("Effect", "key", "operator", 0L, "value1"), + new Toleration("Effect", "key", "operator", 0L, "value2")) .build(); podSpec2.setAdditionalProperty("add2", 2L); PodData podData2 = new PodData(podSpec2, new ObjectMetaBuilder().build()); @@ -452,5 +455,6 @@ public class PodMergerTest { .entrySet() .containsAll(toCheck.getAdditionalProperties().entrySet())); assertTrue(source.getTolerations().containsAll(toCheck.getTolerations())); + assertEquals(toCheck.getTolerations().size(), new HashSet<>(toCheck.getTolerations()).size()); } }