use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment in project che-server by eclipse-che.
the class GatewayTlsProvisionerTest method throwExceptionWhenMultipleServersInGatewayRouteConfigAnnotations.
@Test(expectedExceptions = InfrastructureException.class)
public void throwExceptionWhenMultipleServersInGatewayRouteConfigAnnotations() throws InfrastructureException {
// given
Map<String, String> composedAnnotations = new HashMap<>(annotations);
composedAnnotations.putAll(Annotations.newSerializer().server("server1", httpServer).server("server2", wsServer).machineName(machine).annotations());
ConfigMap routeConfigMap = new ConfigMapBuilder().withNewMetadata().withName("route").withAnnotations(composedAnnotations).endMetadata().build();
when(k8sEnv.getConfigMaps()).thenReturn(singletonMap("route", routeConfigMap));
GatewayTlsProvisioner<KubernetesEnvironment> gatewayTlsProvisioner = new GatewayTlsProvisioner<>(true, gatewayConfigmapLabels, tlsProvisionerProvider);
// when
gatewayTlsProvisioner.provision(k8sEnv, runtimeIdentity);
// then exception
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment in project che-server by eclipse-che.
the class KubernetesInternalRuntime method startMachines.
/**
* Create all machine related objects and start machines.
*
* @throws InfrastructureException when any error occurs while creating Kubernetes objects
*/
@Traced
protected void startMachines() throws InfrastructureException {
KubernetesEnvironment k8sEnv = getContext().getEnvironment();
String workspaceId = getContext().getIdentity().getWorkspaceId();
createSecrets(k8sEnv, workspaceId);
List<ConfigMap> createdConfigMaps = createConfigMaps(k8sEnv, getContext().getIdentity());
List<Service> createdServices = createServices(k8sEnv, workspaceId);
// needed for resolution later on, even though n routes are actually created by ingress
// /workspace{wsid}/server-{port} => service({wsid}):server-port => pod({wsid}):{port}
List<Ingress> readyIngresses = createIngresses(k8sEnv, workspaceId);
listenEvents();
doStartMachine(serverResolverFactory.create(createdServices, readyIngresses, createdConfigMaps));
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment in project che-server by eclipse-che.
the class PerWorkspacePVCStrategyTest method shouldPreparePerWorkspacePVCWithSubPathsWhenWaitBoundIsDisabled.
@Test
public void shouldPreparePerWorkspacePVCWithSubPathsWhenWaitBoundIsDisabled() throws Exception {
// given
strategy = new PerWorkspacePVCStrategy(PVC_NAME_PREFIX, PVC_QUANTITY, PVC_ACCESS_MODE, true, PVC_STORAGE_CLASS_NAME, false, pvcSubPathHelper, factory, ephemeralWorkspaceAdapter, volumeConverter, podsVolumes, subpathPrefixes, workspaceManager);
final PersistentVolumeClaim pvc = newPVC(PVC_NAME_PREFIX + "-" + WORKSPACE_ID);
String perWorkspacePVCName = pvc.getMetadata().getName();
KubernetesEnvironment k8sEnv = KubernetesEnvironment.builder().build();
k8sEnv.getPersistentVolumeClaims().put(perWorkspacePVCName, pvc);
String[] subPaths = { "/projects", "/plugins" };
pvc.getAdditionalProperties().put(format(SUBPATHS_PROPERTY_FMT, WORKSPACE_ID), subPaths);
// when
strategy.prepare(k8sEnv, IDENTITY, 100, emptyMap());
// then
verify(pvcs).get();
verify(pvcs).create(pvc);
verify(pvcs, never()).waitBound(anyString(), anyLong());
verify(pvcSubPathHelper).createDirs(IDENTITY, WORKSPACE_ID, perWorkspacePVCName, emptyMap(), subPaths);
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment in project che-server by eclipse-che.
the class PerWorkspacePVCStrategyTest method shouldPreparePerWorkspacePVCWithSubPaths.
@Test
public void shouldPreparePerWorkspacePVCWithSubPaths() throws Exception {
// given
final PersistentVolumeClaim pvc = newPVC(PVC_NAME_PREFIX + "-" + WORKSPACE_ID);
String perWorkspacePVCName = pvc.getMetadata().getName();
KubernetesEnvironment k8sEnv = KubernetesEnvironment.builder().build();
k8sEnv.getPersistentVolumeClaims().put(perWorkspacePVCName, pvc);
String[] subPaths = { "/projects", "/plugins" };
pvc.getAdditionalProperties().put(format(SUBPATHS_PROPERTY_FMT, WORKSPACE_ID), subPaths);
// when
strategy.prepare(k8sEnv, IDENTITY, 100, emptyMap());
// then
verify(pvcs).get();
verify(pvcs).create(pvc);
verify(pvcs).waitBound(perWorkspacePVCName, 100);
verify(pvcSubPathHelper).createDirs(IDENTITY, WORKSPACE_ID, perWorkspacePVCName, emptyMap(), subPaths);
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment in project che-server by eclipse-che.
the class KubernetesPluginsToolingApplier method addSidecar.
/**
* Adds k8s and Che specific configuration of a sidecar into the environment. For example:
* <li>k8s container configuration {@link Container}
* <li>k8s service configuration {@link Service}
* <li>Che machine config {@link InternalMachineConfig}
* <li>Fill in machine name attribute in related commands
*
* @throws InfrastructureException when any error occurs
*/
private void addSidecar(PodData pod, CheContainer container, ChePlugin chePlugin, KubernetesEnvironment k8sEnv, Collection<CommandImpl> sidecarRelatedCommands, Component pluginRelatedComponent, RuntimeIdentity runtimeIdentity) throws InfrastructureException {
K8sContainerResolver k8sContainerResolver = toK8sContainerResolver(container, chePlugin.getEndpoints());
List<ChePluginEndpoint> containerEndpoints = k8sContainerResolver.getEndpoints();
Container k8sContainer = k8sContainerResolver.resolve();
envVars.apply(k8sContainer, pluginRelatedComponent.getEnv());
chePluginsVolumeApplier.applyVolumes(pod, k8sContainer, container.getVolumes(), k8sEnv);
String machineName = k8sContainer.getName();
Names.putMachineName(pod.getMetadata(), k8sContainer.getName(), machineName);
pod.getSpec().getContainers().add(k8sContainer);
MachineResolver machineResolver = new MachineResolverBuilder().setCheContainer(container).setContainer(k8sContainer).setContainerEndpoints(containerEndpoints).setDefaultSidecarMemoryLimitAttribute(defaultSidecarMemoryLimitBytes).setDefaultSidecarMemoryRequestAttribute(defaultSidecarMemoryRequestBytes).setDefaultSidecarCpuLimitAttribute(defaultSidecarCpuLimitCores).setDefaultSidecarCpuRequestAttribute(defaultSidecarCpuRequestCores).setProjectsRootPathEnvVar(projectsRootEnvVariableProvider.get(runtimeIdentity)).setComponent(pluginRelatedComponent).build();
InternalMachineConfig machineConfig = machineResolver.resolve();
machineConfig.getAttributes().put(CONTAINER_SOURCE_ATTRIBUTE, TOOL_CONTAINER_SOURCE);
machineConfig.getAttributes().put(PLUGIN_MACHINE_ATTRIBUTE, chePlugin.getId());
k8sEnv.getMachines().put(machineName, machineConfig);
sidecarRelatedCommands.forEach(c -> c.getAttributes().put(org.eclipse.che.api.core.model.workspace.config.Command.MACHINE_NAME_ATTRIBUTE, machineName));
container.getCommands().stream().map(c -> asCommand(machineName, c)).forEach(c -> k8sEnv.getCommands().add(c));
SidecarServicesProvisioner sidecarServicesProvisioner = new SidecarServicesProvisioner(containerEndpoints, pod.getMetadata().getName());
sidecarServicesProvisioner.provision(k8sEnv);
}
Aggregations