From 6791ed488a7bce4044f7318eacfa584a1ecf8474 Mon Sep 17 00:00:00 2001 From: Max Shaposhnik Date: Fri, 25 Dec 2020 19:50:03 +0200 Subject: [PATCH] Fix NodeSelector propogation in PodMerger; (#18698) Signed-off-by: Max Shaposhnik --- .../kubernetes/environment/PodMerger.java | 15 +++++++++++++++ .../kubernetes/environment/PodMergerTest.java | 4 ++++ 2 files changed, 19 insertions(+) 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 b9bdb53d15..be7f4a0b51 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 @@ -149,6 +149,9 @@ public class PodMerger { mergeServiceAccountName( baseSpec.getServiceAccountName(), podData.getSpec().getServiceAccountName())); + baseSpec.setNodeSelector( + mergeNodeSelector(baseSpec.getNodeSelector(), podData.getSpec().getNodeSelector())); + // if there are entries with such keys then values will be overridden baseSpec.getAdditionalProperties().putAll(podData.getSpec().getAdditionalProperties()); } @@ -203,4 +206,16 @@ public class PodMerger { throw new ValidationException(String.format(errorMessageTemplate, a, b)); } } + + private Map mergeNodeSelector( + @Nullable Map base, @Nullable Map nodeSelector) { + Map mergedMap = base; + if (nodeSelector != null && !nodeSelector.isEmpty()) { + if (mergedMap == null) { + mergedMap = new HashMap<>(); + } + mergedMap.putAll(nodeSelector); + } + return mergedMap; + } } 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 9e8bce9b62..121a781e7f 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 @@ -116,6 +116,7 @@ public class PodMergerTest { .withContainers(new ContainerBuilder().withName("c1").build()) .withInitContainers(new ContainerBuilder().withName("initC1").build()) .withVolumes(new VolumeBuilder().withName("v1").build()) + .withNodeSelector(Map.of("foo1", "bar1")) .withImagePullSecrets(new LocalObjectReferenceBuilder().withName("secret1").build()) .build(); podSpec1.setAdditionalProperty("add1", 1L); @@ -126,6 +127,7 @@ public class PodMergerTest { .withContainers(new ContainerBuilder().withName("c2").build()) .withInitContainers(new ContainerBuilder().withName("initC2").build()) .withVolumes(new VolumeBuilder().withName("v2").build()) + .withNodeSelector(Map.of("foo2", "bar2")) .withImagePullSecrets(new LocalObjectReferenceBuilder().withName("secret2").build()) .build(); podSpec2.setAdditionalProperty("add2", 2L); @@ -439,6 +441,8 @@ public class PodMergerTest { assertTrue(source.getInitContainers().containsAll(toCheck.getInitContainers())); assertTrue(source.getVolumes().containsAll(toCheck.getVolumes())); assertTrue(source.getImagePullSecrets().containsAll(toCheck.getImagePullSecrets())); + assertTrue( + source.getNodeSelector().entrySet().containsAll(toCheck.getNodeSelector().entrySet())); assertTrue( source .getAdditionalProperties()