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);
}
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);
}
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);
}
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);
}
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);
}
Aggregations