fix: Add nodeSelectors and tolerations to utils container (#35)

Add unit tests
pull/50/head
cccs-tom 2021-07-13 04:23:43 -04:00 committed by GitHub
parent 8eccf8d6a2
commit 77f8d05a26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 0 deletions

View File

@ -45,7 +45,9 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesN
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.LogWatchTimeouts;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.LogWatcher;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.log.PodLogToEventPublisher;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SecurityContextProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.TolerationsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.util.Containers;
import org.eclipse.che.workspace.infrastructure.kubernetes.util.RuntimeEventsPublisher;
import org.slf4j.Logger;
@ -88,6 +90,8 @@ public class PVCSubPathHelper {
private final RuntimeEventsPublisher eventsPublisher;
private final SecurityContextProvisioner securityContextProvisioner;
private final NodeSelectorProvisioner nodeSelectorProvisioner;
private final TolerationsProvisioner tolerationsProvisioner;
@Inject
PVCSubPathHelper(
@ -96,6 +100,8 @@ public class PVCSubPathHelper {
@Named("che.infra.kubernetes.pvc.jobs.image.pull_policy") String imagePullPolicy,
KubernetesNamespaceFactory factory,
SecurityContextProvisioner securityContextProvisioner,
NodeSelectorProvisioner nodeSelectorProvisioner,
TolerationsProvisioner tolerationsProvisioner,
ExecutorServiceWrapper executorServiceWrapper,
RuntimeEventsPublisher eventPublisher) {
this.jobMemoryLimit = jobMemoryLimit;
@ -103,6 +109,8 @@ public class PVCSubPathHelper {
this.imagePullPolicy = imagePullPolicy;
this.factory = factory;
this.securityContextProvisioner = securityContextProvisioner;
this.nodeSelectorProvisioner = nodeSelectorProvisioner;
this.tolerationsProvisioner = tolerationsProvisioner;
this.eventsPublisher = eventPublisher;
this.executor =
executorServiceWrapper.wrap(
@ -204,6 +212,8 @@ public class PVCSubPathHelper {
final String[] command = buildCommand(commandBase, arguments);
final Pod pod = newPod(podName, pvcName, command);
securityContextProvisioner.provision(pod.getSpec());
nodeSelectorProvisioner.provision(pod.getSpec());
tolerationsProvisioner.provision(pod.getSpec());
KubernetesDeployments deployments = null;
try {

View File

@ -14,6 +14,7 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.provision;
import static java.util.Collections.emptyMap;
import com.google.common.base.Splitter;
import io.fabric8.kubernetes.api.model.PodSpec;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
@ -46,4 +47,10 @@ public class NodeSelectorProvisioner implements ConfigurationProvisioner {
.forEach(d -> d.getSpec().setNodeSelector(nodeSelectorAttributes));
}
}
public void provision(PodSpec podSpec) {
if (!nodeSelectorAttributes.isEmpty()) {
podSpec.setNodeSelector(nodeSelectorAttributes);
}
}
}

View File

@ -16,6 +16,7 @@ import static java.util.Collections.emptyList;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.fabric8.kubernetes.api.model.PodSpec;
import io.fabric8.kubernetes.api.model.Toleration;
import java.util.List;
import javax.inject.Inject;
@ -54,4 +55,10 @@ public class TolerationsProvisioner implements ConfigurationProvisioner {
k8sEnv.getPodsData().values().forEach(d -> d.getSpec().setTolerations(tolerations));
}
}
public void provision(PodSpec podSpec) {
if (!tolerations.isEmpty()) {
podSpec.setTolerations(tolerations);
}
}
}

View File

@ -49,7 +49,9 @@ import org.eclipse.che.commons.observability.NoopExecutorServiceWrapper;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesDeployments;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SecurityContextProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.TolerationsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.util.RuntimeEventsPublisher;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
@ -76,6 +78,8 @@ public class PVCSubPathHelperTest {
private static final String M2_PATH = "/.m2";
@Mock private SecurityContextProvisioner securityContextProvisioner;
@Mock private NodeSelectorProvisioner nodeSelectorProvisioner;
@Mock private TolerationsProvisioner tolerationsProvisioner;
@Mock private KubernetesNamespaceFactory k8sNamespaceFactory;
@Mock private KubernetesNamespace k8sNamespace;
@Mock private KubernetesDeployments osDeployments;
@ -97,6 +101,8 @@ public class PVCSubPathHelperTest {
"IfNotPresent",
k8sNamespaceFactory,
securityContextProvisioner,
nodeSelectorProvisioner,
tolerationsProvisioner,
new NoopExecutorServiceWrapper(),
eventsPublisher);
lenient().when(identity.getInfrastructureNamespace()).thenReturn(NAMESPACE);
@ -144,6 +150,8 @@ public class PVCSubPathHelperTest {
verify(podStatus).getPhase();
verify(osDeployments).delete(anyString());
verify(securityContextProvisioner).provision(any());
verify(nodeSelectorProvisioner).provision(any());
verify(tolerationsProvisioner).provision(any());
}
@Test
@ -181,6 +189,8 @@ public class PVCSubPathHelperTest {
verify(podStatus).getPhase();
verify(osDeployments).delete(anyString());
verify(securityContextProvisioner).provision(any());
verify(nodeSelectorProvisioner).provision(any());
verify(tolerationsProvisioner).provision(any());
}
@Test
@ -248,6 +258,8 @@ public class PVCSubPathHelperTest {
"ToBeOrNotIfPresent",
k8sNamespaceFactory,
securityContextProvisioner,
nodeSelectorProvisioner,
tolerationsProvisioner,
new NoopExecutorServiceWrapper(),
eventsPublisher);
// when