From f09caebba4eb73c3e877bb1a69384507f3076728 Mon Sep 17 00:00:00 2001 From: Michal Vala Date: Tue, 1 Sep 2020 15:30:38 +0200 Subject: [PATCH] fixes #17061 - enable gateway single-host on OpenShift (#17765) Signed-off-by: Michal Vala --- .../kubernetes/KubernetesInfraModule.java | 5 ++--- .../MultiHostExternalServiceExposureStrategy.java | 2 +- ...der.java => ServiceExposureStrategyProvider.java} | 5 ++--- .../server/secure/jwtproxy/CookiePathStrategy.java | 4 ++-- .../openshift/OpenShiftEnvironmentProvisioner.java | 7 ++++++- .../openshift/OpenShiftInfraModule.java | 12 +++++++++++- .../OpenShiftEnvironmentProvisionerTest.java | 9 +++++++-- 7 files changed, 31 insertions(+), 13 deletions(-) rename infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/{IngressServiceExposureStrategyProvider.java => ServiceExposureStrategyProvider.java} (88%) diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/KubernetesInfraModule.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/KubernetesInfraModule.java index 9e36d25643..6e6131093f 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/KubernetesInfraModule.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/KubernetesInfraModule.java @@ -72,8 +72,8 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.Exter import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ExternalServiceExposureStrategy; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.GatewayServerExposer; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.IngressServerExposer; -import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.IngressServiceExposureStrategyProvider; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.MultiHostExternalServiceExposureStrategy; +import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ServiceExposureStrategyProvider; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.SingleHostExternalServiceExposureStrategy; import org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.SecureServerExposer; import org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.SecureServerExposerFactory; @@ -158,8 +158,7 @@ public class KubernetesInfraModule extends AbstractModule { ingressStrategies .addBinding(DEFAULT_HOST_STRATEGY) .to(DefaultHostExternalServiceExposureStrategy.class); - bind(ExternalServiceExposureStrategy.class) - .toProvider(IngressServiceExposureStrategyProvider.class); + bind(ExternalServiceExposureStrategy.class).toProvider(ServiceExposureStrategyProvider.class); MapBinder> exposureStrategies = diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/MultiHostExternalServiceExposureStrategy.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/MultiHostExternalServiceExposureStrategy.java index 070df9f2a5..3b7225b398 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/MultiHostExternalServiceExposureStrategy.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/MultiHostExternalServiceExposureStrategy.java @@ -12,7 +12,7 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.server.external; import static java.lang.String.format; -import static org.eclipse.che.workspace.infrastructure.kubernetes.server.external.IngressServiceExposureStrategyProvider.STRATEGY_PROPERTY; +import static org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ServiceExposureStrategyProvider.STRATEGY_PROPERTY; import com.google.common.base.Strings; import javax.inject.Inject; diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/IngressServiceExposureStrategyProvider.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/ServiceExposureStrategyProvider.java similarity index 88% rename from infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/IngressServiceExposureStrategyProvider.java rename to infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/ServiceExposureStrategyProvider.java index cbe23bb0e5..c66ff510ad 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/IngressServiceExposureStrategyProvider.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/ServiceExposureStrategyProvider.java @@ -21,15 +21,14 @@ import javax.inject.Singleton; import org.eclipse.che.inject.ConfigurationException; @Singleton -public class IngressServiceExposureStrategyProvider - implements Provider { +public class ServiceExposureStrategyProvider implements Provider { public static final String STRATEGY_PROPERTY = "che.infra.kubernetes.server_strategy"; private final ExternalServiceExposureStrategy namingStrategy; @Inject - public IngressServiceExposureStrategyProvider( + public ServiceExposureStrategyProvider( @Named(STRATEGY_PROPERTY) String strategy, Map strategies) { diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/secure/jwtproxy/CookiePathStrategy.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/secure/jwtproxy/CookiePathStrategy.java index d4d59fe853..adb942254d 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/secure/jwtproxy/CookiePathStrategy.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/secure/jwtproxy/CookiePathStrategy.java @@ -21,7 +21,7 @@ import java.util.function.BiFunction; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; -import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.IngressServiceExposureStrategyProvider; +import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ServiceExposureStrategyProvider; /** * The cookie path for the access token cookie is server-strategy dependent. This class represents @@ -42,7 +42,7 @@ public class CookiePathStrategy { @Inject public CookiePathStrategy( - @Named(IngressServiceExposureStrategyProvider.STRATEGY_PROPERTY) String serverStrategy) { + @Named(ServiceExposureStrategyProvider.STRATEGY_PROPERTY) String serverStrategy) { switch (serverStrategy) { case MULTI_HOST_STRATEGY: getCookiePath = (__, ___) -> "/"; diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisioner.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisioner.java index 9d4a89798e..f62b059d5e 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisioner.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisioner.java @@ -23,6 +23,7 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.Workspa import org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStoragePodInterceptor; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStorageProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.CertificateProvisioner; +import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GatewayRouterProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GitConfigProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSecretProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.LogsVolumeMachineProvisioner; @@ -80,6 +81,7 @@ public class OpenShiftEnvironmentProvisioner private final GitConfigProvisioner gitConfigProvisioner; private final PreviewUrlExposer previewUrlExposer; private final VcsSslCertificateProvisioner vcsSslCertificateProvisioner; + private final GatewayRouterProvisioner gatewayRouterProvisioner; @Inject public OpenShiftEnvironmentProvisioner( @@ -103,7 +105,8 @@ public class OpenShiftEnvironmentProvisioner SshKeysProvisioner sshKeysProvisioner, GitConfigProvisioner gitConfigProvisioner, OpenShiftPreviewUrlExposer previewUrlEndpointsProvisioner, - VcsSslCertificateProvisioner vcsSslCertificateProvisioner) { + VcsSslCertificateProvisioner vcsSslCertificateProvisioner, + GatewayRouterProvisioner gatewayRouterProvisioner) { this.pvcEnabled = pvcEnabled; this.volumesStrategy = volumesStrategy; this.uniqueNamesProvisioner = uniqueNamesProvisioner; @@ -125,6 +128,7 @@ public class OpenShiftEnvironmentProvisioner this.gitConfigProvisioner = gitConfigProvisioner; this.previewUrlExposer = previewUrlEndpointsProvisioner; this.vcsSslCertificateProvisioner = vcsSslCertificateProvisioner; + this.gatewayRouterProvisioner = gatewayRouterProvisioner; } @Override @@ -164,6 +168,7 @@ public class OpenShiftEnvironmentProvisioner sshKeysProvisioner.provision(osEnv, identity); vcsSslCertificateProvisioner.provision(osEnv, identity); gitConfigProvisioner.provision(osEnv, identity); + gatewayRouterProvisioner.provision(osEnv, identity); LOG.debug( "Provisioning OpenShift environment done for workspace '{}'", identity.getWorkspaceId()); } diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftInfraModule.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftInfraModule.java index ec7110b4e0..37970c0f32 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftInfraModule.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftInfraModule.java @@ -17,6 +17,8 @@ import static org.eclipse.che.api.workspace.server.devfile.Constants.OPENSHIFT_C import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.CommonPVCStrategy.COMMON_STRATEGY; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.PerWorkspacePVCStrategy.PER_WORKSPACE_STRATEGY; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.UniqueWorkspacePVCStrategy.UNIQUE_STRATEGY; +import static org.eclipse.che.workspace.infrastructure.kubernetes.server.external.MultiHostExternalServiceExposureStrategy.MULTI_HOST_STRATEGY; +import static org.eclipse.che.workspace.infrastructure.kubernetes.server.external.SingleHostExternalServiceExposureStrategy.SINGLE_HOST_STRATEGY; import com.google.inject.AbstractModule; import com.google.inject.TypeLiteral; @@ -72,6 +74,8 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.server.WorkspaceExpos import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ExternalServerExposer; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ExternalServiceExposureStrategy; import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.GatewayServerExposer; +import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ServiceExposureStrategyProvider; +import org.eclipse.che.workspace.infrastructure.kubernetes.server.external.SingleHostExternalServiceExposureStrategy; import org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.SecureServerExposer; import org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.SecureServerExposerFactory; import org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.SecureServerExposerFactoryProvider; @@ -250,7 +254,13 @@ public class OpenShiftInfraModule extends AbstractModule { KubernetesDevfileBindings.addAllowedEnvironmentTypeUpgradeBindings( binder(), OpenShiftEnvironment.TYPE, KubernetesEnvironment.TYPE); - bind(ExternalServiceExposureStrategy.class).to(OpenShiftServerExposureStrategy.class); + MapBinder ingressStrategies = + MapBinder.newMapBinder(binder(), String.class, ExternalServiceExposureStrategy.class); + ingressStrategies.addBinding(MULTI_HOST_STRATEGY).to(OpenShiftServerExposureStrategy.class); + ingressStrategies + .addBinding(SINGLE_HOST_STRATEGY) + .to(SingleHostExternalServiceExposureStrategy.class); + bind(ExternalServiceExposureStrategy.class).toProvider(ServiceExposureStrategyProvider.class); bind(CookiePathStrategy.class).to(OpenShiftCookiePathStrategy.class); bind(NonTlsDistributedClusterModeNotifier.class); bind(AsyncStorageProvisioner.class); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisionerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisionerTest.java index 428907c9fc..089e3ac2d3 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisionerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/OpenShiftEnvironmentProvisionerTest.java @@ -20,6 +20,7 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.Workspa import org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStoragePodInterceptor; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStorageProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.CertificateProvisioner; +import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GatewayRouterProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GitConfigProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSecretProvisioner; import org.eclipse.che.workspace.infrastructure.kubernetes.provision.LogsVolumeMachineProvisioner; @@ -76,6 +77,7 @@ public class OpenShiftEnvironmentProvisionerTest { @Mock private OpenShiftPreviewUrlExposer previewUrlEndpointsProvisioner; @Mock private VcsSslCertificateProvisioner vcsSslCertificateProvisioner; @Mock private NodeSelectorProvisioner nodeSelectorProvisioner; + @Mock private GatewayRouterProvisioner gatewayRouterProvisioner; private OpenShiftEnvironmentProvisioner osInfraProvisioner; @@ -106,7 +108,8 @@ public class OpenShiftEnvironmentProvisionerTest { sshKeysProvisioner, gitConfigProvisioner, previewUrlEndpointsProvisioner, - vcsSslCertificateProvisioner); + vcsSslCertificateProvisioner, + gatewayRouterProvisioner); provisionOrder = inOrder( logsVolumeMachineProvisioner, @@ -126,7 +129,8 @@ public class OpenShiftEnvironmentProvisionerTest { sshKeysProvisioner, vcsSslCertificateProvisioner, gitConfigProvisioner, - previewUrlEndpointsProvisioner); + previewUrlEndpointsProvisioner, + gatewayRouterProvisioner); } @Test @@ -152,6 +156,7 @@ public class OpenShiftEnvironmentProvisionerTest { provisionOrder.verify(sshKeysProvisioner).provision(eq(osEnv), eq(runtimeIdentity)); provisionOrder.verify(vcsSslCertificateProvisioner).provision(eq(osEnv), eq(runtimeIdentity)); provisionOrder.verify(gitConfigProvisioner).provision(eq(osEnv), eq(runtimeIdentity)); + provisionOrder.verify(gatewayRouterProvisioner).provision(eq(osEnv), eq(runtimeIdentity)); provisionOrder.verifyNoMoreInteractions(); } }