parent
8eccf8d6a2
commit
77f8d05a26
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue