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()); } }