Search in sources :

Example 16 with io.fabric8.kubernetes.api.model.networking.v1

use of io.fabric8.kubernetes.api.model.networking.v1 in project che-server by eclipse-che.

the class ChePluginsVolumeApplier method provisionPVCPodVolume.

private io.fabric8.kubernetes.api.model.Volume provisionPVCPodVolume(Volume volume, KubernetesEnvironment.PodData pod, KubernetesEnvironment k8sEnv) {
    String pvcName = volume.getName();
    if (!k8sEnv.getPersistentVolumeClaims().containsKey(pvcName)) {
        final PersistentVolumeClaim pvc = newPVC(pvcName, pvcAccessMode, pvcQuantity, pvcStorageClassName);
        k8sEnv.getPersistentVolumeClaims().put(pvcName, pvc);
    }
    PodSpec podSpec = pod.getSpec();
    Optional<io.fabric8.kubernetes.api.model.Volume> volumeOpt = podSpec.getVolumes().stream().filter(vm -> vm.getPersistentVolumeClaim() != null && pvcName.equals(vm.getPersistentVolumeClaim().getClaimName())).findAny();
    io.fabric8.kubernetes.api.model.Volume podVolume;
    if (volumeOpt.isPresent()) {
        podVolume = volumeOpt.get();
    } else {
        podVolume = newVolume(pvcName, pvcName);
        podSpec.getVolumes().add(podVolume);
    }
    return podVolume;
}
Also used : KubernetesObjectUtil.newPVC(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.newPVC) Container(io.fabric8.kubernetes.api.model.Container) Collection(java.util.Collection) KubernetesEnvironment(org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment) KubernetesObjectUtil.newVolume(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.newVolume) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) Singleton(javax.inject.Singleton) Volume(org.eclipse.che.api.workspace.server.wsplugins.model.Volume) Inject(javax.inject.Inject) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) Optional(java.util.Optional) Named(javax.inject.Named) KubernetesObjectUtil.newVolumeMount(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.newVolumeMount) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) KubernetesObjectUtil.newVolume(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.newVolume) Volume(org.eclipse.che.api.workspace.server.wsplugins.model.Volume) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim)

Example 17 with io.fabric8.kubernetes.api.model.networking.v1

use of io.fabric8.kubernetes.api.model.networking.v1 in project che-server by eclipse-che.

the class K8sContainerResolver method toK8sHandler.

private io.fabric8.kubernetes.api.model.Handler toK8sHandler(Handler handler) {
    if (handler == null || handler.getExec() == null) {
        return null;
    }
    ExecAction exec = toExecAction(handler.getExec());
    if (exec == null) {
        return null;
    }
    // TODO: add 'httpGetAction' and 'tcpSocketAction' support
    io.fabric8.kubernetes.api.model.Handler k8SHandler = new io.fabric8.kubernetes.api.model.Handler(exec, null, null);
    return k8SHandler;
}
Also used : ExecAction(io.fabric8.kubernetes.api.model.ExecAction) Handler(org.eclipse.che.api.workspace.server.wsplugins.model.Handler)

Example 18 with io.fabric8.kubernetes.api.model.networking.v1

use of io.fabric8.kubernetes.api.model.networking.v1 in project che-server by eclipse-che.

the class PVCProvisionerTest method testMatchingUserDefinedPVCWithCheVolume.

@Test
public void testMatchingUserDefinedPVCWithCheVolume() throws Exception {
    // given
    k8sEnv.getPersistentVolumeClaims().put("userDataPVC", newPVC("userDataPVC"));
    pod.getSpec().getVolumes().add(new VolumeBuilder().withName("userData").withPersistentVolumeClaim(new PersistentVolumeClaimVolumeSourceBuilder().withClaimName("userDataPVC").build()).build());
    pod.getSpec().getContainers().get(0).getVolumeMounts().add(new VolumeMountBuilder().withName("userData").withSubPath("/home/user/data").build());
    k8sEnv.getMachines().values().forEach(m -> m.getVolumes().clear());
    k8sEnv.getMachines().get(MACHINE_2_NAME).getVolumes().put("userDataPVC", new VolumeImpl().withPath("/"));
    // when
    provisioner.convertCheVolumes(k8sEnv, WORKSPACE_ID);
    // then
    assertEquals(k8sEnv.getPersistentVolumeClaims().size(), 1);
    PersistentVolumeClaim pvcForUserData = findPvc("userDataPVC", k8sEnv.getPersistentVolumeClaims());
    assertNotNull(pvcForUserData);
    assertEquals("userDataPVC", pvcForUserData.getMetadata().getName());
    PodSpec podSpec = k8sEnv.getPodsData().get(POD_1_NAME).getSpec();
    io.fabric8.kubernetes.api.model.Volume userPodVolume = podSpec.getVolumes().get(0);
    assertEquals(userPodVolume.getPersistentVolumeClaim().getClaimName(), pvcForUserData.getMetadata().getName());
    assertEquals(podSpec.getVolumes().get(0).getPersistentVolumeClaim().getClaimName(), pvcForUserData.getMetadata().getName());
    // check container bound to user-defined PVC
    Container container1 = podSpec.getContainers().get(0);
    assertEquals(container1.getVolumeMounts().size(), 1);
    VolumeMount volumeMount = container1.getVolumeMounts().get(0);
    assertEquals(volumeMount.getName(), userPodVolume.getName());
    // check container that is bound to Che Volume via Machine configuration
    Container container2 = podSpec.getContainers().get(1);
    VolumeMount cheVolumeMount2 = container2.getVolumeMounts().get(0);
    assertEquals(cheVolumeMount2.getName(), userPodVolume.getName());
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) TestObjects.newContainer(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.TestObjects.newContainer) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) VolumeImpl(org.eclipse.che.api.workspace.server.model.impl.VolumeImpl) VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) PersistentVolumeClaimVolumeSourceBuilder(io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSourceBuilder) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) VolumeMountBuilder(io.fabric8.kubernetes.api.model.VolumeMountBuilder) Test(org.testng.annotations.Test)

Example 19 with io.fabric8.kubernetes.api.model.networking.v1

use of io.fabric8.kubernetes.api.model.networking.v1 in project che-server by eclipse-che.

the class SubPathPrefixesTest method shouldPrefixVolumeMountsSubpathsAndUseVolumeNameStoredInLabels.

@Test
public void shouldPrefixVolumeMountsSubpathsAndUseVolumeNameStoredInLabels() {
    // given
    String volumeName = "userDataVolume";
    pvc.getMetadata().getLabels().put(CHE_VOLUME_NAME_LABEL, volumeName);
    // when
    subpathPrefixes.prefixVolumeMountsSubpaths(k8sEnv, WORKSPACE_ID);
    // then
    PodSpec podSpec = k8sEnv.getPodsData().get(POD_1_NAME).getSpec();
    io.fabric8.kubernetes.api.model.Volume userPodVolume = podSpec.getVolumes().get(0);
    assertEquals(userPodVolume.getPersistentVolumeClaim().getClaimName(), USER_DATA_PVC_NAME);
    assertEquals(podSpec.getVolumes().get(0).getPersistentVolumeClaim().getClaimName(), USER_DATA_PVC_NAME);
    Container initContainer = podSpec.getInitContainers().get(0);
    VolumeMount initVolumeMount = initContainer.getVolumeMounts().get(0);
    assertEquals(initVolumeMount.getSubPath(), WORKSPACE_ID + "/" + volumeName + "/tmp/init/userData");
    assertEquals(initVolumeMount.getName(), userPodVolume.getName());
    Container container = podSpec.getContainers().get(0);
    VolumeMount volumeMount = container.getVolumeMounts().get(0);
    assertEquals(volumeMount.getSubPath(), WORKSPACE_ID + "/" + volumeName + "/home/user/data");
    assertEquals(volumeMount.getName(), userPodVolume.getName());
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) TestObjects.newContainer(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.TestObjects.newContainer) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) Volume(io.fabric8.kubernetes.api.model.Volume) Test(org.testng.annotations.Test)

Example 20 with io.fabric8.kubernetes.api.model.networking.v1

use of io.fabric8.kubernetes.api.model.networking.v1 in project devspaces-images by redhat-developer.

the class PVCProvisionerTest method testMatchingUserDefinedPVCWithCheVolume.

@Test
public void testMatchingUserDefinedPVCWithCheVolume() throws Exception {
    // given
    k8sEnv.getPersistentVolumeClaims().put("userDataPVC", newPVC("userDataPVC"));
    pod.getSpec().getVolumes().add(new VolumeBuilder().withName("userData").withPersistentVolumeClaim(new PersistentVolumeClaimVolumeSourceBuilder().withClaimName("userDataPVC").build()).build());
    pod.getSpec().getContainers().get(0).getVolumeMounts().add(new VolumeMountBuilder().withName("userData").withSubPath("/home/user/data").build());
    k8sEnv.getMachines().values().forEach(m -> m.getVolumes().clear());
    k8sEnv.getMachines().get(MACHINE_2_NAME).getVolumes().put("userDataPVC", new VolumeImpl().withPath("/"));
    // when
    provisioner.convertCheVolumes(k8sEnv, WORKSPACE_ID);
    // then
    assertEquals(k8sEnv.getPersistentVolumeClaims().size(), 1);
    PersistentVolumeClaim pvcForUserData = findPvc("userDataPVC", k8sEnv.getPersistentVolumeClaims());
    assertNotNull(pvcForUserData);
    assertEquals("userDataPVC", pvcForUserData.getMetadata().getName());
    PodSpec podSpec = k8sEnv.getPodsData().get(POD_1_NAME).getSpec();
    io.fabric8.kubernetes.api.model.Volume userPodVolume = podSpec.getVolumes().get(0);
    assertEquals(userPodVolume.getPersistentVolumeClaim().getClaimName(), pvcForUserData.getMetadata().getName());
    assertEquals(podSpec.getVolumes().get(0).getPersistentVolumeClaim().getClaimName(), pvcForUserData.getMetadata().getName());
    // check container bound to user-defined PVC
    Container container1 = podSpec.getContainers().get(0);
    assertEquals(container1.getVolumeMounts().size(), 1);
    VolumeMount volumeMount = container1.getVolumeMounts().get(0);
    assertEquals(volumeMount.getName(), userPodVolume.getName());
    // check container that is bound to Che Volume via Machine configuration
    Container container2 = podSpec.getContainers().get(1);
    VolumeMount cheVolumeMount2 = container2.getVolumeMounts().get(0);
    assertEquals(cheVolumeMount2.getName(), userPodVolume.getName());
}
Also used : Container(io.fabric8.kubernetes.api.model.Container) TestObjects.newContainer(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.TestObjects.newContainer) PodSpec(io.fabric8.kubernetes.api.model.PodSpec) VolumeImpl(org.eclipse.che.api.workspace.server.model.impl.VolumeImpl) VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) PersistentVolumeClaimVolumeSourceBuilder(io.fabric8.kubernetes.api.model.PersistentVolumeClaimVolumeSourceBuilder) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) VolumeMountBuilder(io.fabric8.kubernetes.api.model.VolumeMountBuilder) Test(org.testng.annotations.Test)

Aggregations

Test (org.junit.Test)48 ParallelTest (io.strimzi.test.annotations.ParallelTest)42 IntOrString (io.fabric8.kubernetes.api.model.IntOrString)40 PodDisruptionBudget (io.fabric8.kubernetes.api.model.policy.v1.PodDisruptionBudget)38 File (java.io.File)32 Kafka (io.strimzi.api.kafka.model.Kafka)28 HashMap (java.util.HashMap)28 FabricService (io.fabric8.api.FabricService)26 KafkaBuilder (io.strimzi.api.kafka.model.KafkaBuilder)26 IOException (java.io.IOException)26 Container (io.fabric8.kubernetes.api.model.Container)20 Test (org.junit.jupiter.api.Test)20 Service (io.fabric8.kubernetes.api.model.Service)19 PersistentVolumeClaim (io.fabric8.kubernetes.api.model.PersistentVolumeClaim)18 KafkaVersionTestUtils (io.strimzi.operator.cluster.KafkaVersionTestUtils)18 ResourceUtils (io.strimzi.operator.cluster.ResourceUtils)18 Reconciliation (io.strimzi.operator.common.Reconciliation)18 Labels (io.strimzi.operator.common.model.Labels)18 CoreMatchers.is (org.hamcrest.CoreMatchers.is)18 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)18