Search in sources :

Example 6 with KubernetesPersistentVolumeClaims

use of org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims in project devspaces-images by redhat-developer.

the class UniqueWorkspacePVCStrategy method prepare.

@Traced
@Override
public void prepare(KubernetesEnvironment k8sEnv, RuntimeIdentity identity, long timeoutMillis, Map<String, String> startOptions) throws InfrastructureException {
    String workspaceId = identity.getWorkspaceId();
    TracingTags.WORKSPACE_ID.set(workspaceId);
    if (EphemeralWorkspaceUtility.isEphemeral(k8sEnv.getAttributes())) {
        return;
    }
    if (k8sEnv.getPersistentVolumeClaims().isEmpty()) {
        // no PVCs to prepare
        return;
    }
    final KubernetesPersistentVolumeClaims k8sClaims = factory.getOrCreate(identity).persistentVolumeClaims();
    LOG.debug("Creating PVCs for workspace '{}'", workspaceId);
    k8sClaims.createIfNotExist(k8sEnv.getPersistentVolumeClaims().values());
    if (waitBound) {
        LOG.debug("Waiting for PVC(s) of workspace '{}' to be bound", workspaceId);
        for (PersistentVolumeClaim pvc : k8sEnv.getPersistentVolumeClaims().values()) {
            k8sClaims.waitBound(pvc.getMetadata().getName(), timeoutMillis);
        }
    }
    LOG.debug("Preparing PVCs done for workspace '{}'", workspaceId);
}
Also used : PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) Traced(org.eclipse.che.commons.annotation.Traced)

Example 7 with KubernetesPersistentVolumeClaims

use of org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims in project che-server by eclipse-che.

the class CommonPVCStrategyTest method shouldDoNothingIfPersistAttributeIsSetToFalseInWorkspaceConfigAndWorkspacesNotEmptyWhenCleanupCalled.

@Test
public void shouldDoNothingIfPersistAttributeIsSetToFalseInWorkspaceConfigAndWorkspacesNotEmptyWhenCleanupCalled() throws Exception {
    // given
    WorkspaceImpl workspace = mock(WorkspaceImpl.class);
    Page workspaces = mock(Page.class);
    KubernetesPersistentVolumeClaims persistentVolumeClaims = mock(KubernetesPersistentVolumeClaims.class);
    when(workspaceManager.getWorkspaces(anyString(), eq(false), anyInt(), anyLong())).thenReturn((workspaces));
    when(workspaces.isEmpty()).thenReturn(false);
    AccountImpl account = mock(AccountImpl.class);
    when(account.getType()).thenReturn(PERSONAL_ACCOUNT);
    when(account.getId()).thenReturn("id123");
    when(workspace.getAccount()).thenReturn(account);
    WorkspaceConfigImpl workspaceConfig = mock(WorkspaceConfigImpl.class);
    when(workspace.getConfig()).thenReturn(workspaceConfig);
    Map<String, String> workspaceConfigAttributes = new HashMap<>();
    when(workspaceConfig.getAttributes()).thenReturn(workspaceConfigAttributes);
    workspaceConfigAttributes.put(PERSIST_VOLUMES_ATTRIBUTE, "false");
    // when
    commonPVCStrategy.cleanup(workspace);
    // then
    verify(persistentVolumeClaims, never()).delete(PVC_NAME);
    verify(pvcSubPathHelper, never()).removeDirsAsync(WORKSPACE_ID, "ns", PVC_NAME, WORKSPACE_ID);
}
Also used : WorkspaceImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl) HashMap(java.util.HashMap) AccountImpl(org.eclipse.che.account.spi.AccountImpl) Page(org.eclipse.che.api.core.Page) WorkspaceConfigImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) Test(org.testng.annotations.Test)

Example 8 with KubernetesPersistentVolumeClaims

use of org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims in project che-server by eclipse-che.

the class UniqueWorkspacePVCStrategy method prepare.

@Traced
@Override
public void prepare(KubernetesEnvironment k8sEnv, RuntimeIdentity identity, long timeoutMillis, Map<String, String> startOptions) throws InfrastructureException {
    String workspaceId = identity.getWorkspaceId();
    TracingTags.WORKSPACE_ID.set(workspaceId);
    if (EphemeralWorkspaceUtility.isEphemeral(k8sEnv.getAttributes())) {
        return;
    }
    if (k8sEnv.getPersistentVolumeClaims().isEmpty()) {
        // no PVCs to prepare
        return;
    }
    final KubernetesPersistentVolumeClaims k8sClaims = factory.getOrCreate(identity).persistentVolumeClaims();
    LOG.debug("Creating PVCs for workspace '{}'", workspaceId);
    k8sClaims.createIfNotExist(k8sEnv.getPersistentVolumeClaims().values());
    if (waitBound) {
        LOG.debug("Waiting for PVC(s) of workspace '{}' to be bound", workspaceId);
        for (PersistentVolumeClaim pvc : k8sEnv.getPersistentVolumeClaims().values()) {
            k8sClaims.waitBound(pvc.getMetadata().getName(), timeoutMillis);
        }
    }
    LOG.debug("Preparing PVCs done for workspace '{}'", workspaceId);
}
Also used : PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) Traced(org.eclipse.che.commons.annotation.Traced)

Example 9 with KubernetesPersistentVolumeClaims

use of org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims in project che-server by eclipse-che.

the class CommonPVCStrategy method prepare.

@Override
@Traced
public void prepare(KubernetesEnvironment k8sEnv, RuntimeIdentity identity, long timeoutMillis, Map<String, String> startOptions) throws InfrastructureException {
    String workspaceId = identity.getWorkspaceId();
    TracingTags.WORKSPACE_ID.set(workspaceId);
    if (EphemeralWorkspaceUtility.isEphemeral(k8sEnv.getAttributes())) {
        return;
    }
    log.debug("Preparing PVC started for workspace '{}'", workspaceId);
    Map<String, PersistentVolumeClaim> claims = k8sEnv.getPersistentVolumeClaims();
    if (claims.isEmpty()) {
        return;
    }
    if (claims.size() > 1) {
        throw new InfrastructureException(format("The only one PVC MUST be present in common strategy while it contains: %s.", claims.keySet().stream().collect(joining(", "))));
    }
    PersistentVolumeClaim commonPVC = claims.values().iterator().next();
    final KubernetesNamespace namespace = factory.getOrCreate(identity);
    final KubernetesPersistentVolumeClaims pvcs = namespace.persistentVolumeClaims();
    final Set<String> existing = pvcs.get().stream().map(p -> p.getMetadata().getName()).collect(toSet());
    if (!existing.contains(commonPVC.getMetadata().getName())) {
        log.debug("Creating PVC for workspace '{}'", workspaceId);
        pvcs.create(commonPVC);
        if (waitBound) {
            log.debug("Waiting for PVC for workspace '{}' to be bound", workspaceId);
            pvcs.waitBound(commonPVC.getMetadata().getName(), timeoutMillis);
        }
    }
    final String[] subpaths = (String[]) commonPVC.getAdditionalProperties().remove(format(SUBPATHS_PROPERTY_FMT, workspaceId));
    if (preCreateDirs && subpaths != null) {
        pvcSubPathHelper.createDirs(identity, workspaceId, commonPVC.getMetadata().getName(), startOptions, subpaths);
    }
    log.debug("Preparing PVC done for workspace '{}'", workspaceId);
}
Also used : VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) Workspace(org.eclipse.che.api.core.model.workspace.Workspace) PERSONAL_ACCOUNT(org.eclipse.che.api.user.server.UserManager.PERSONAL_ACCOUNT) Inject(com.google.inject.Inject) Page(org.eclipse.che.api.core.Page) LoggerFactory(org.slf4j.LoggerFactory) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) KubernetesEnvironment(org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment) AccountImpl(org.eclipse.che.account.spi.AccountImpl) Traced(org.eclipse.che.commons.annotation.Traced) KubernetesNamespace(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace) Map(java.util.Map) Named(javax.inject.Named) Collectors.toSet(java.util.stream.Collectors.toSet) KubernetesObjectUtil.newPVC(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.newPVC) WorkspaceManager(org.eclipse.che.api.workspace.server.WorkspaceManager) Logger(org.slf4j.Logger) Set(java.util.Set) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) Collectors(java.util.stream.Collectors) String.format(java.lang.String.format) Collectors.joining(java.util.stream.Collectors.joining) KubernetesNamespaceFactory(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory) InfrastructureException(org.eclipse.che.api.workspace.server.spi.InfrastructureException) ServerException(org.eclipse.che.api.core.ServerException) TracingTags(org.eclipse.che.commons.tracing.TracingTags) RuntimeIdentity(org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) WorkspaceImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl) PersistentVolumeClaim(io.fabric8.kubernetes.api.model.PersistentVolumeClaim) InfrastructureException(org.eclipse.che.api.workspace.server.spi.InfrastructureException) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) KubernetesNamespace(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace) Traced(org.eclipse.che.commons.annotation.Traced)

Example 10 with KubernetesPersistentVolumeClaims

use of org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims in project devspaces-images by redhat-developer.

the class CommonPVCStrategyTest method shouldDoNothingIfPersistAttributeIsSetToFalseInWorkspaceConfigAndWorkspacesNotEmptyWhenCleanupCalled.

@Test
public void shouldDoNothingIfPersistAttributeIsSetToFalseInWorkspaceConfigAndWorkspacesNotEmptyWhenCleanupCalled() throws Exception {
    // given
    WorkspaceImpl workspace = mock(WorkspaceImpl.class);
    Page workspaces = mock(Page.class);
    KubernetesPersistentVolumeClaims persistentVolumeClaims = mock(KubernetesPersistentVolumeClaims.class);
    when(workspaceManager.getWorkspaces(anyString(), eq(false), anyInt(), anyLong())).thenReturn((workspaces));
    when(workspaces.isEmpty()).thenReturn(false);
    AccountImpl account = mock(AccountImpl.class);
    when(account.getType()).thenReturn(PERSONAL_ACCOUNT);
    when(account.getId()).thenReturn("id123");
    when(workspace.getAccount()).thenReturn(account);
    WorkspaceConfigImpl workspaceConfig = mock(WorkspaceConfigImpl.class);
    when(workspace.getConfig()).thenReturn(workspaceConfig);
    Map<String, String> workspaceConfigAttributes = new HashMap<>();
    when(workspaceConfig.getAttributes()).thenReturn(workspaceConfigAttributes);
    workspaceConfigAttributes.put(PERSIST_VOLUMES_ATTRIBUTE, "false");
    // when
    commonPVCStrategy.cleanup(workspace);
    // then
    verify(persistentVolumeClaims, never()).delete(PVC_NAME);
    verify(pvcSubPathHelper, never()).removeDirsAsync(WORKSPACE_ID, "ns", PVC_NAME, WORKSPACE_ID);
}
Also used : WorkspaceImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl) HashMap(java.util.HashMap) AccountImpl(org.eclipse.che.account.spi.AccountImpl) Page(org.eclipse.che.api.core.Page) WorkspaceConfigImpl(org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) KubernetesPersistentVolumeClaims(org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims) Test(org.testng.annotations.Test)

Aggregations

KubernetesPersistentVolumeClaims (org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesPersistentVolumeClaims)10 AccountImpl (org.eclipse.che.account.spi.AccountImpl)8 Page (org.eclipse.che.api.core.Page)8 WorkspaceImpl (org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl)8 KubernetesNamespace (org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace)6 Test (org.testng.annotations.Test)6 PersistentVolumeClaim (io.fabric8.kubernetes.api.model.PersistentVolumeClaim)4 HashMap (java.util.HashMap)4 WorkspaceConfigImpl (org.eclipse.che.api.workspace.server.model.impl.WorkspaceConfigImpl)4 Traced (org.eclipse.che.commons.annotation.Traced)4 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)4 Strings.isNullOrEmpty (com.google.common.base.Strings.isNullOrEmpty)2 Inject (com.google.inject.Inject)2 VolumeMount (io.fabric8.kubernetes.api.model.VolumeMount)2 String.format (java.lang.String.format)2 Map (java.util.Map)2 Set (java.util.Set)2 Collectors (java.util.stream.Collectors)2 Collectors.joining (java.util.stream.Collectors.joining)2 Collectors.toSet (java.util.stream.Collectors.toSet)2