chore: remove che.workspace.http_proxy, che.workspace.https_proxy, che.workspace.no_proxy properties

Signed-off-by: Andrew Obuchowicz <aobuchow@redhat.com>
pull/378/head
Andrew Obuchowicz 2022-09-26 14:20:40 -04:00 committed by Ilya Buziuk
parent 0c3afb1f22
commit ee3f2b9911
7 changed files with 0 additions and 267 deletions

View File

@ -29,15 +29,6 @@ che.websocket.endpoint=ws://${CHE_HOST}:${CHE_PORT}/api/websocket
# for major WebSocket interactions and messaging.
che.websocket.internal.endpoint=NULL
# Configures environment variable HTTP_PROXY to a specified value in containers powering workspaces.
che.workspace.http_proxy=
# Configures environment variable HTTPS_PROXY to a specified value in containers powering workspaces.
che.workspace.https_proxy=
# Configures environment variable NO_PROXY to a specified value in containers powering workspaces.
che.workspace.no_proxy=
# By default, when users access a workspace with its URL, the workspace
# automatically starts (if currently stopped). Set this to `false` to disable this behavior.
che.workspace.auto_start=true

View File

@ -25,7 +25,6 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSe
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.KubernetesTrustedCAProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.PodTerminationGracePeriodProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SecurityContextProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ServiceAccountProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SshKeysProvisioner;
@ -69,7 +68,6 @@ public interface KubernetesEnvironmentProvisioner<T extends KubernetesEnvironmen
private final PodTerminationGracePeriodProvisioner podTerminationGracePeriodProvisioner;
private final TlsProvisioner<KubernetesEnvironment> externalServerTlsProvisioner;
private final ImagePullSecretProvisioner imagePullSecretProvisioner;
private final ProxySettingsProvisioner proxySettingsProvisioner;
private final NodeSelectorProvisioner nodeSelectorProvisioner;
private final TolerationsProvisioner tolerationsProvisioner;
private final ServiceAccountProvisioner serviceAccountProvisioner;
@ -92,7 +90,6 @@ public interface KubernetesEnvironmentProvisioner<T extends KubernetesEnvironmen
PodTerminationGracePeriodProvisioner podTerminationGracePeriodProvisioner,
TlsProvisionerProvider<KubernetesEnvironment> externalServerTlsProvisionerProvider,
ImagePullSecretProvisioner imagePullSecretProvisioner,
ProxySettingsProvisioner proxySettingsProvisioner,
NodeSelectorProvisioner nodeSelectorProvisioner,
TolerationsProvisioner tolerationsProvisioner,
ServiceAccountProvisioner serviceAccountProvisioner,
@ -112,7 +109,6 @@ public interface KubernetesEnvironmentProvisioner<T extends KubernetesEnvironmen
this.podTerminationGracePeriodProvisioner = podTerminationGracePeriodProvisioner;
this.externalServerTlsProvisioner = externalServerTlsProvisionerProvider.get();
this.imagePullSecretProvisioner = imagePullSecretProvisioner;
this.proxySettingsProvisioner = proxySettingsProvisioner;
this.nodeSelectorProvisioner = nodeSelectorProvisioner;
this.tolerationsProvisioner = tolerationsProvisioner;
this.serviceAccountProvisioner = serviceAccountProvisioner;
@ -149,7 +145,6 @@ public interface KubernetesEnvironmentProvisioner<T extends KubernetesEnvironmen
securityContextProvisioner.provision(k8sEnv, identity);
podTerminationGracePeriodProvisioner.provision(k8sEnv, identity);
imagePullSecretProvisioner.provision(k8sEnv, identity);
proxySettingsProvisioner.provision(k8sEnv, identity);
serviceAccountProvisioner.provision(k8sEnv, identity);
certificateProvisioner.provision(k8sEnv, identity);
sshKeysProvisioner.provision(k8sEnv, identity);

View File

@ -1,79 +0,0 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.workspace.infrastructure.kubernetes.provision;
import static org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.jwtproxy.JwtProxyProvisioner.JWT_PROXY_POD_NAME;
import io.fabric8.kubernetes.api.model.EnvVar;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.commons.annotation.Traced;
import org.eclipse.che.commons.tracing.TracingTags;
import org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment;
/**
* Add proxy configuration to pod containers
*
* @author Mykhailo Kuznietsov
*/
public class ProxySettingsProvisioner implements ConfigurationProvisioner {
static final String HTTPS_PROXY = "https_proxy";
static final String HTTP_PROXY = "http_proxy";
static final String NO_PROXY = "no_proxy";
private final Map<String, String> proxyEnvVars;
@Inject
public ProxySettingsProvisioner(
@Named("che.workspace.https_proxy") String httpsProxy,
@Named("che.workspace.http_proxy") String httpProxy,
@Named("che.workspace.no_proxy") String noProxy) {
proxyEnvVars = new HashMap<>();
if (!httpsProxy.isEmpty()) {
proxyEnvVars.put(HTTPS_PROXY, httpsProxy);
}
if (!httpProxy.isEmpty()) {
proxyEnvVars.put(HTTP_PROXY, httpProxy);
}
if (!noProxy.isEmpty()) {
proxyEnvVars.put(NO_PROXY, noProxy);
}
}
@Override
@Traced
public void provision(KubernetesEnvironment k8sEnv, RuntimeIdentity identity)
throws InfrastructureException {
TracingTags.WORKSPACE_ID.set(identity::getWorkspaceId);
if (!proxyEnvVars.isEmpty()) {
k8sEnv.getPodsData().entrySet().stream()
// JWTProxy container doesn't need proxy settings since it never does any outbound
// requests, and setting of it may fail accessing internal addresses.
.filter(entry -> !entry.getKey().equals(JWT_PROXY_POD_NAME))
.flatMap(
entry ->
Stream.concat(
entry.getValue().getSpec().getContainers().stream(),
entry.getValue().getSpec().getInitContainers().stream()))
.forEach(
container ->
proxyEnvVars.forEach((k, v) -> container.getEnv().add(new EnvVar(k, v, null))));
}
}
}

View File

@ -25,7 +25,6 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSe
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.KubernetesTrustedCAProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.PodTerminationGracePeriodProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SecurityContextProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ServiceAccountProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SshKeysProvisioner;
@ -69,7 +68,6 @@ public class KubernetesEnvironmentProvisionerTest {
@Mock private TlsProvisioner<KubernetesEnvironment> externalServerIngressTlsProvisioner;
@Mock private ImagePullSecretProvisioner imagePullSecretProvisioner;
@Mock private ProxySettingsProvisioner proxySettingsProvisioner;
@Mock private ServiceAccountProvisioner serviceAccountProvisioner;
@Mock private CertificateProvisioner certificateProvisioner;
@Mock private SshKeysProvisioner sshKeysProvisioner;
@ -100,7 +98,6 @@ public class KubernetesEnvironmentProvisionerTest {
podTerminationGracePeriodProvisioner,
externalServerIngressTlsProvisionerProvider,
imagePullSecretProvisioner,
proxySettingsProvisioner,
nodeSelectorProvisioner,
tolerationsProvisioner,
serviceAccountProvisioner,
@ -124,7 +121,6 @@ public class KubernetesEnvironmentProvisionerTest {
podTerminationGracePeriodProvisioner,
externalServerIngressTlsProvisioner,
imagePullSecretProvisioner,
proxySettingsProvisioner,
serviceAccountProvisioner,
certificateProvisioner,
gitConfigProvisioner,
@ -152,7 +148,6 @@ public class KubernetesEnvironmentProvisionerTest {
.verify(podTerminationGracePeriodProvisioner)
.provision(eq(k8sEnv), eq(runtimeIdentity));
provisionOrder.verify(imagePullSecretProvisioner).provision(eq(k8sEnv), eq(runtimeIdentity));
provisionOrder.verify(proxySettingsProvisioner).provision(eq(k8sEnv), eq(runtimeIdentity));
provisionOrder.verify(serviceAccountProvisioner).provision(eq(k8sEnv), eq(runtimeIdentity));
provisionOrder.verify(certificateProvisioner).provision(eq(k8sEnv), eq(runtimeIdentity));
provisionOrder.verify(gitConfigProvisioner).provision(eq(k8sEnv), eq(runtimeIdentity));

View File

@ -1,159 +0,0 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.workspace.infrastructure.kubernetes.provision;
import static org.eclipse.che.commons.lang.NameGenerator.generate;
import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner.HTTPS_PROXY;
import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner.HTTP_PROXY;
import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner.NO_PROXY;
import static org.eclipse.che.workspace.infrastructure.kubernetes.server.secure.jwtproxy.JwtProxyProvisioner.JWT_PROXY_POD_NAME;
import static org.mockito.Mockito.lenient;
import static org.testng.Assert.assertTrue;
import io.fabric8.kubernetes.api.model.Container;
import io.fabric8.kubernetes.api.model.ContainerBuilder;
import io.fabric8.kubernetes.api.model.EnvVar;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
import org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(MockitoTestNGListener.class)
public class ProxySettingsProvisionerTest {
private static final String WORKSPACE_ID = "workspace123";
private static final String HTTP_PROXY_VALUE = "http.proxy1.somewhere.com:3128";
private static final String HTTPS_PROXY_VALUE = "https.proxy2.somewhere.com:8080";
private static final String NO_PROXY_VALUE = "localhost,127.0.0.1";
@Mock private RuntimeIdentity runtimeId;
private ProxySettingsProvisioner provisioner;
@BeforeMethod
public void setUp() {
lenient().when(runtimeId.getWorkspaceId()).thenReturn(WORKSPACE_ID);
provisioner = new ProxySettingsProvisioner(HTTPS_PROXY_VALUE, HTTP_PROXY_VALUE, NO_PROXY_VALUE);
}
@Test
public void shouldApplyProxySettingsToAllContainers() throws Exception {
Map<String, Pod> pods = new HashMap<>();
Pod pod1 = pods.put("pod1", buildPod("pod1", buildContainers(2)));
pods.put("pod2", buildPod("pod2", buildContainers(3)));
KubernetesEnvironment k8sEnv = KubernetesEnvironment.builder().setPods(pods).build();
provisioner.provision(k8sEnv, runtimeId);
assertTrue(
k8sEnv.getPodsData().values().stream()
.flatMap(pod -> pod.getSpec().getContainers().stream())
.allMatch(
container ->
container.getEnv().contains(new EnvVar(HTTP_PROXY, HTTP_PROXY_VALUE, null))
&& container
.getEnv()
.contains(new EnvVar(HTTPS_PROXY, HTTPS_PROXY_VALUE, null))
&& container
.getEnv()
.contains(new EnvVar(NO_PROXY, NO_PROXY_VALUE, null))));
}
@Test
public void shouldNotApplyProxySettingsToJWTProxyContainer() throws Exception {
Map<String, Pod> pods = new HashMap<>();
pods.put(JWT_PROXY_POD_NAME, buildPod(JWT_PROXY_POD_NAME, buildContainers(2)));
KubernetesEnvironment k8sEnv = KubernetesEnvironment.builder().setPods(pods).build();
provisioner.provision(k8sEnv, runtimeId);
assertTrue(
k8sEnv.getPodsData().values().stream()
.filter(pod -> pod.getMetadata().getName().equals(JWT_PROXY_POD_NAME))
.flatMap(pod -> pod.getSpec().getContainers().stream())
.noneMatch(
container ->
container.getEnv().contains(new EnvVar(HTTP_PROXY, HTTP_PROXY_VALUE, null))
|| container
.getEnv()
.contains(new EnvVar(HTTPS_PROXY, HTTPS_PROXY_VALUE, null))
|| container
.getEnv()
.contains(new EnvVar(NO_PROXY, NO_PROXY_VALUE, null))));
}
@Test
public void shouldApplyProxySettingsToInitContainers() throws Exception {
Map<String, Pod> pods = new HashMap<>();
Pod pod1 = buildPod("pod1", buildContainers(3));
pod1.getSpec().setInitContainers(Arrays.asList(buildContainers(2)));
pods.put("pod1", pod1);
KubernetesEnvironment k8sEnv = KubernetesEnvironment.builder().setPods(pods).build();
provisioner.provision(k8sEnv, runtimeId);
assertTrue(
k8sEnv.getPodsData().values().stream()
.flatMap(
pod ->
Stream.concat(
pod.getSpec().getContainers().stream(),
pod.getSpec().getInitContainers().stream()))
.allMatch(
container ->
container.getEnv().contains(new EnvVar(HTTP_PROXY, HTTP_PROXY_VALUE, null))
&& container
.getEnv()
.contains(new EnvVar(HTTPS_PROXY, HTTPS_PROXY_VALUE, null))
&& container
.getEnv()
.contains(new EnvVar(NO_PROXY, NO_PROXY_VALUE, null))));
}
private Pod buildPod(String podName, Container... containers) {
return new PodBuilder()
.withNewMetadata()
.withName(podName)
.endMetadata()
.withNewSpec()
.withContainers(containers)
.endSpec()
.build();
}
private Container[] buildContainers(int size) {
List<Container> result = new ArrayList<>();
for (int i = 0; i < size; i++) {
result.add(
new ContainerBuilder()
.withName(generate("container-", 4))
.withNewResources()
.endResources()
.build());
}
return result.toArray(new Container[size]);
}
}

View File

@ -25,7 +25,6 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GitConfigPr
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSecretProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.PodTerminationGracePeriodProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ServiceAccountProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SshKeysProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.TlsProvisioner;
@ -66,7 +65,6 @@ public class OpenShiftEnvironmentProvisioner
private final ContainerResourceProvisioner resourceLimitRequestProvisioner;
private final PodTerminationGracePeriodProvisioner podTerminationGracePeriodProvisioner;
private final ImagePullSecretProvisioner imagePullSecretProvisioner;
private final ProxySettingsProvisioner proxySettingsProvisioner;
private final NodeSelectorProvisioner nodeSelectorProvisioner;
private final TolerationsProvisioner tolerationsProvisioner;
private final ServiceAccountProvisioner serviceAccountProvisioner;
@ -89,7 +87,6 @@ public class OpenShiftEnvironmentProvisioner
ContainerResourceProvisioner resourceLimitRequestProvisioner,
PodTerminationGracePeriodProvisioner podTerminationGracePeriodProvisioner,
ImagePullSecretProvisioner imagePullSecretProvisioner,
ProxySettingsProvisioner proxySettingsProvisioner,
NodeSelectorProvisioner nodeSelectorProvisioner,
TolerationsProvisioner tolerationsProvisioner,
ServiceAccountProvisioner serviceAccountProvisioner,
@ -109,7 +106,6 @@ public class OpenShiftEnvironmentProvisioner
this.resourceLimitRequestProvisioner = resourceLimitRequestProvisioner;
this.podTerminationGracePeriodProvisioner = podTerminationGracePeriodProvisioner;
this.imagePullSecretProvisioner = imagePullSecretProvisioner;
this.proxySettingsProvisioner = proxySettingsProvisioner;
this.nodeSelectorProvisioner = nodeSelectorProvisioner;
this.tolerationsProvisioner = tolerationsProvisioner;
this.serviceAccountProvisioner = serviceAccountProvisioner;
@ -145,7 +141,6 @@ public class OpenShiftEnvironmentProvisioner
tolerationsProvisioner.provision(osEnv, identity);
podTerminationGracePeriodProvisioner.provision(osEnv, identity);
imagePullSecretProvisioner.provision(osEnv, identity);
proxySettingsProvisioner.provision(osEnv, identity);
serviceAccountProvisioner.provision(osEnv, identity);
certificateProvisioner.provision(osEnv, identity);
sshKeysProvisioner.provision(osEnv, identity);

View File

@ -23,7 +23,6 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.provision.GitConfigPr
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ImagePullSecretProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.NodeSelectorProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.PodTerminationGracePeriodProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ProxySettingsProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.ServiceAccountProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.SshKeysProvisioner;
import org.eclipse.che.workspace.infrastructure.kubernetes.provision.TlsProvisionerProvider;
@ -64,7 +63,6 @@ public class OpenShiftEnvironmentProvisionerTest {
@Mock private ContainerResourceProvisioner ramLimitProvisioner;
@Mock private PodTerminationGracePeriodProvisioner podTerminationGracePeriodProvisioner;
@Mock private ImagePullSecretProvisioner imagePullSecretProvisioner;
@Mock private ProxySettingsProvisioner proxySettingsProvisioner;
@Mock private ServiceAccountProvisioner serviceAccountProvisioner;
@Mock private CertificateProvisioner certificateProvisioner;
@Mock private SshKeysProvisioner sshKeysProvisioner;
@ -94,7 +92,6 @@ public class OpenShiftEnvironmentProvisionerTest {
ramLimitProvisioner,
podTerminationGracePeriodProvisioner,
imagePullSecretProvisioner,
proxySettingsProvisioner,
nodeSelectorProvisioner,
tolerationsProvisioner,
serviceAccountProvisioner,
@ -118,7 +115,6 @@ public class OpenShiftEnvironmentProvisionerTest {
tolerationsProvisioner,
podTerminationGracePeriodProvisioner,
imagePullSecretProvisioner,
proxySettingsProvisioner,
serviceAccountProvisioner,
certificateProvisioner,
sshKeysProvisioner,
@ -145,7 +141,6 @@ public class OpenShiftEnvironmentProvisionerTest {
.verify(podTerminationGracePeriodProvisioner)
.provision(eq(osEnv), eq(runtimeIdentity));
provisionOrder.verify(imagePullSecretProvisioner).provision(eq(osEnv), eq(runtimeIdentity));
provisionOrder.verify(proxySettingsProvisioner).provision(eq(osEnv), eq(runtimeIdentity));
provisionOrder.verify(serviceAccountProvisioner).provision(eq(osEnv), eq(runtimeIdentity));
provisionOrder.verify(certificateProvisioner).provision(eq(osEnv), eq(runtimeIdentity));
provisionOrder.verify(sshKeysProvisioner).provision(eq(osEnv), eq(runtimeIdentity));