use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData in project devspaces-images by redhat-developer.
the class KubernetesComponentToWorkspaceApplierTest method shouldProvisionEnvIntoK8SList.
@Test
public void shouldProvisionEnvIntoK8SList() throws Exception {
// given
List<HasMetadata> k8sList = new ArrayList<>();
Pod pod1 = new PodBuilder().withNewMetadata().withName("pod1").endMetadata().withNewSpec().endSpec().build();
Pod pod2 = new PodBuilder().withNewMetadata().withName("pod2").endMetadata().withNewSpec().endSpec().build();
k8sList.add(pod1);
k8sList.add(pod2);
doReturn(k8sList).when(k8sRecipeParser).parse(anyString());
ComponentImpl component = new ComponentImpl();
component.setType(KUBERNETES_COMPONENT_TYPE);
component.setReference(REFERENCE_FILENAME);
component.setAlias(COMPONENT_NAME);
List<EnvImpl> envToApply = singletonList(new EnvImpl("TEST_ENV", "anyValue"));
component.setEnv(envToApply);
// when
applier.apply(workspaceConfig, component, s -> "content");
// then
envVars.apply(new PodData(pod1), envToApply);
envVars.apply(new PodData(pod2), envToApply);
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData in project devspaces-images by redhat-developer.
the class KubernetesEnvironmentFactoryTest method createPodData.
private static PodData createPodData(String machineName, long ramLimit, long ramRequest) {
final String containerName = "container_" + machineName;
final Container containerMock = mock(Container.class);
final ResourceRequirements resourcesMock = mock(ResourceRequirements.class);
final Quantity limitQuantityMock = mock(Quantity.class);
final Quantity requestQuantityMock = mock(Quantity.class);
final PodSpec specMock = mock(PodSpec.class);
final ObjectMeta metadataMock = mock(ObjectMeta.class);
when(limitQuantityMock.getAmount()).thenReturn(String.valueOf(ramLimit));
when(requestQuantityMock.getAmount()).thenReturn(String.valueOf(ramRequest));
when(resourcesMock.getLimits()).thenReturn(ImmutableMap.of("memory", limitQuantityMock));
when(resourcesMock.getRequests()).thenReturn(ImmutableMap.of("memory", requestQuantityMock));
when(containerMock.getName()).thenReturn(containerName);
when(containerMock.getResources()).thenReturn(resourcesMock);
when(metadataMock.getAnnotations()).thenReturn(Names.createMachineNameAnnotations(containerName, machineName));
when(specMock.getContainers()).thenReturn(ImmutableList.of(containerMock));
return new PodData(specMock, metadataMock);
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData in project devspaces-images by redhat-developer.
the class KubernetesEnvironmentFactoryTest method shouldReconfigureServiceToMatchMergedDeployment.
@Test
public void shouldReconfigureServiceToMatchMergedDeployment() throws Exception {
// given
Pod pod1 = new PodBuilder().withNewMetadata().withName("bare-pod1").withLabels(ImmutableMap.of("name", "pod1")).endMetadata().withNewSpec().endSpec().build();
Pod pod2 = new PodBuilder().withNewMetadata().withName("bare-pod2").withLabels(ImmutableMap.of("name", "pod2")).endMetadata().withNewSpec().endSpec().build();
Service service1 = new ServiceBuilder().withNewMetadata().withName("pod1-service").endMetadata().withNewSpec().withSelector(ImmutableMap.of("name", "pod1")).endSpec().build();
Service service2 = new ServiceBuilder().withNewMetadata().withName("pod2-service").endMetadata().withNewSpec().withSelector(ImmutableMap.of("name", "pod2")).endSpec().build();
when(k8sRecipeParser.parse(any(InternalRecipe.class))).thenReturn(asList(pod1, pod2, service1, service2));
Deployment merged = createEmptyDeployment("merged");
when(podMerger.merge(any())).thenReturn(merged);
// when
final KubernetesEnvironment k8sEnv = k8sEnvFactory.doCreate(internalRecipe, emptyMap(), emptyList());
// then
verify(podMerger).merge(asList(new PodData(pod1), new PodData(pod2)));
PodData mergedPodData = k8sEnv.getPodsData().get("merged");
assertEquals(mergedPodData.getMetadata().getLabels().get(DEPLOYMENT_NAME_LABEL), "merged");
assertTrue(k8sEnv.getServices().values().stream().allMatch(s -> ImmutableMap.of(DEPLOYMENT_NAME_LABEL, "merged").equals(s.getSpec().getSelector())));
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData in project devspaces-images by redhat-developer.
the class KubernetesInternalRuntimeTest method testMultipleMachinesRequiringSamePodInjectionResultInOnePodInjected.
@Test
public void testMultipleMachinesRequiringSamePodInjectionResultInOnePodInjected() throws Exception {
// given
Map<String, Pod> injectedPods = ImmutableMap.of("injected", mockPod(singletonList(mockContainer("injectedContainer"))));
Map<String, Pod> injectedPods2 = ImmutableMap.of("injected", mockPod(singletonList(mockContainer("injectedContainer"))));
doReturn(ImmutableMap.of(M1_NAME, injectedPods, M2_NAME, injectedPods2)).when(k8sEnv).getInjectablePodsCopy();
doReturn(concat(podsMap.entrySet().stream(), injectedPods.entrySet().stream()).collect(toMap(Map.Entry::getKey, e -> new PodData(e.getValue())))).when(k8sEnv).getPodsData();
doReturn(ImmutableMap.of(M1_NAME, mock(InternalMachineConfig.class), M2_NAME, mock(InternalMachineConfig.class), WORKSPACE_POD_NAME + "/injectedContainer", mock(InternalMachineConfig.class))).when(k8sEnv).getMachines();
// when
internalRuntime.start(emptyMap());
// then
ArgumentCaptor<Deployment> podCaptor = ArgumentCaptor.forClass(Deployment.class);
verify(deployments).deploy(podCaptor.capture());
List<Deployment> depls = podCaptor.getAllValues();
assertEquals(depls.size(), 1);
Deployment deployedPod = depls.get(0);
List<String> containerNames = deployedPod.getSpec().getTemplate().getSpec().getContainers().stream().map(Container::getName).collect(toList());
assertEquals(containerNames.size(), 3);
assertEquals(new HashSet<>(containerNames), new HashSet<>(asList(CONTAINER_NAME_1, CONTAINER_NAME_2, "injectedContainer")));
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.PodData in project devspaces-images by redhat-developer.
the class KubernetesEnvironmentFactoryTest method shouldMergeDeploymentAndPodIntoOneDeployment.
@Test
public void shouldMergeDeploymentAndPodIntoOneDeployment() throws Exception {
// given
PodTemplateSpec podTemplate = new PodTemplateSpecBuilder().withNewMetadata().withName("deployment-pod").endMetadata().withNewSpec().endSpec().build();
Deployment deployment = new DeploymentBuilder().withNewMetadata().withName("deployment-test").endMetadata().withNewSpec().withTemplate(podTemplate).endSpec().build();
Pod pod = new PodBuilder().withNewMetadata().withName("bare-pod").endMetadata().withNewSpec().endSpec().build();
when(k8sRecipeParser.parse(any(InternalRecipe.class))).thenReturn(asList(deployment, pod));
Deployment merged = createEmptyDeployment("merged");
when(podMerger.merge(any())).thenReturn(merged);
// when
final KubernetesEnvironment k8sEnv = k8sEnvFactory.doCreate(internalRecipe, emptyMap(), emptyList());
// then
verify(podMerger).merge(asList(new PodData(pod), new PodData(deployment)));
assertEquals(k8sEnv.getPodsData().size(), 1);
assertTrue(k8sEnv.getPodsCopy().isEmpty());
assertEquals(k8sEnv.getDeploymentsCopy().size(), 1);
assertEquals(k8sEnv.getDeploymentsCopy().get("merged"), merged);
}
Aggregations