diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParser.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParser.java index b36b68fa1d..04d6591684 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParser.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParser.java @@ -57,6 +57,10 @@ public class OpenShiftEnvironmentParser { "Routes specified in OpenShift recipe are ignored. " + "To expose ports please define servers in machine configuration."; + static final int PVC_IGNORED_WARNING_CODE = 4101; + static final String PVC_IGNORED_WARNING_MESSAGE = + "Persistent volume claims specified in OpenShift recipe are ignored."; + static final String DEFAULT_RESTART_POLICY = "Never"; private final OpenShiftClientFactory clientFactory; @@ -101,6 +105,7 @@ public class OpenShiftEnvironmentParser { Map services = new HashMap<>(); Map pvcs = new HashMap<>(); boolean isAnyRoutePresent = false; + boolean isAnyPVCPresent = false; for (HasMetadata object : list.getItems()) { if (object instanceof DeploymentConfig) { throw new ValidationException("Supporting of deployment configs is not implemented yet."); @@ -113,8 +118,7 @@ public class OpenShiftEnvironmentParser { } else if (object instanceof Route) { isAnyRoutePresent = true; } else if (object instanceof PersistentVolumeClaim) { - PersistentVolumeClaim pvc = (PersistentVolumeClaim) object; - pvcs.put(pvc.getMetadata().getName(), pvc); + isAnyPVCPresent = true; } else { throw new ValidationException( format("Found unknown object type '%s'", object.getMetadata())); @@ -132,6 +136,11 @@ public class OpenShiftEnvironmentParser { new WarningImpl(ROUTE_IGNORED_WARNING_CODE, ROUTES_IGNORED_WARNING_MESSAGE)); } + if (isAnyPVCPresent) { + environment.addWarning( + new WarningImpl(PVC_IGNORED_WARNING_CODE, PVC_IGNORED_WARNING_MESSAGE)); + } + OpenShiftEnvironment openShiftEnv = openShiftEnvBuilder.build(); normalizeEnvironment(openShiftEnv, environment); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParserTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParserTest.java index e12aaf346c..499c99251c 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParserTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/environment/OpenShiftEnvironmentParserTest.java @@ -11,9 +11,13 @@ package org.eclipse.che.workspace.infrastructure.openshift.environment; import static java.lang.String.format; -import static java.util.Arrays.*; +import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.eclipse.che.workspace.infrastructure.openshift.environment.OpenShiftEnvironmentParser.DEFAULT_RESTART_POLICY; +import static org.eclipse.che.workspace.infrastructure.openshift.environment.OpenShiftEnvironmentParser.PVC_IGNORED_WARNING_CODE; +import static org.eclipse.che.workspace.infrastructure.openshift.environment.OpenShiftEnvironmentParser.PVC_IGNORED_WARNING_MESSAGE; +import static org.eclipse.che.workspace.infrastructure.openshift.environment.OpenShiftEnvironmentParser.ROUTES_IGNORED_WARNING_MESSAGE; +import static org.eclipse.che.workspace.infrastructure.openshift.environment.OpenShiftEnvironmentParser.ROUTE_IGNORED_WARNING_CODE; import static org.mockito.Matchers.any; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.verify; @@ -28,6 +32,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesList; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; +import io.fabric8.kubernetes.api.model.PersistentVolumeClaim; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.PodBuilder; import io.fabric8.kubernetes.api.model.PodSpec; @@ -115,10 +120,18 @@ public class OpenShiftEnvironmentParserTest { final OpenShiftEnvironment parsed = osEnvironmentParser.parse(internalEnvironment); assertTrue(parsed.getRoutes().isEmpty()); - verifyWarnings( - new WarningImpl( - OpenShiftEnvironmentParser.ROUTE_IGNORED_WARNING_CODE, - OpenShiftEnvironmentParser.ROUTES_IGNORED_WARNING_MESSAGE)); + verifyWarnings(new WarningImpl(ROUTE_IGNORED_WARNING_CODE, ROUTES_IGNORED_WARNING_MESSAGE)); + } + + @Test + public void ignorePVCsWhenRecipeContainsThem() throws Exception { + final List pvc = singletonList(new PersistentVolumeClaim()); + when(validatedObjects.getItems()).thenReturn(pvc); + + final OpenShiftEnvironment parsed = osEnvironmentParser.parse(internalEnvironment); + + assertTrue(parsed.getRoutes().isEmpty()); + verifyWarnings(new WarningImpl(PVC_IGNORED_WARNING_CODE, PVC_IGNORED_WARNING_MESSAGE)); } private void verifyWarnings(Warning... expectedWarnings) {