fixes #17061 - enable gateway single-host on OpenShift (#17765)

Signed-off-by: Michal Vala <mvala@redhat.com>
7.20.x
Michal Vala 2020-09-01 15:30:38 +02:00 committed by GitHub
parent e5475206db
commit f09caebba4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 31 additions and 13 deletions

View File

@ -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<WorkspaceExposureType, ExternalServerExposer<KubernetesEnvironment>>
exposureStrategies =

View File

@ -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;

View File

@ -21,15 +21,14 @@ import javax.inject.Singleton;
import org.eclipse.che.inject.ConfigurationException;
@Singleton
public class IngressServiceExposureStrategyProvider
implements Provider<ExternalServiceExposureStrategy> {
public class ServiceExposureStrategyProvider implements Provider<ExternalServiceExposureStrategy> {
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<String, ExternalServiceExposureStrategy> strategies) {

View File

@ -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 = (__, ___) -> "/";

View File

@ -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<OpenShiftEnvironment> 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());
}

View File

@ -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<String, ExternalServiceExposureStrategy> 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);

View File

@ -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();
}
}