chore: Use networking.k8s.io/v1 version of Ingresses for workspaces (#73)

Signed-off-by: Max Shaposhnik <mshaposh@redhat.com>
pull/82/head
Max Shaposhnik 2021-08-06 10:16:48 +03:00 committed by GitHub
parent 159194c1be
commit b0a50e91b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 199 additions and 132 deletions

View File

@ -93,10 +93,6 @@
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-model-core</artifactId>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-model-extensions</artifactId>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-model-rbac</artifactId>

View File

@ -31,7 +31,7 @@ import io.fabric8.kubernetes.api.model.PodTemplateSpec;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.opentracing.Scope;
import io.opentracing.Span;
import io.opentracing.Tracer;

View File

@ -22,7 +22,7 @@ import io.fabric8.kubernetes.api.model.PodTemplateSpec;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

View File

@ -23,7 +23,7 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

View File

@ -15,7 +15,7 @@ import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND;
import static org.eclipse.che.workspace.infrastructure.kubernetes.Constants.CHE_WORKSPACE_ID_LABEL;
import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.putLabel;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.Watch;
import io.fabric8.kubernetes.client.Watcher;
@ -55,7 +55,8 @@ public class KubernetesIngresses {
try {
return clientFactory
.create(workspaceId)
.extensions()
.network()
.v1()
.ingresses()
.inNamespace(namespace)
.withName(ingress.getMetadata().getName())
@ -69,7 +70,8 @@ public class KubernetesIngresses {
try {
return clientFactory
.create(workspaceId)
.extensions()
.network()
.v1()
.ingresses()
.inNamespace(namespace)
.withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId)
@ -88,7 +90,8 @@ public class KubernetesIngresses {
Resource<Ingress> ingressResource =
clientFactory
.create(workspaceId)
.extensions()
.network()
.v1()
.ingresses()
.inNamespace(namespace)
.withName(name);
@ -141,7 +144,8 @@ public class KubernetesIngresses {
try {
clientFactory
.create(workspaceId)
.extensions()
.network()
.v1()
.ingresses()
.inNamespace(namespace)
.withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId)

View File

@ -23,7 +23,7 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.Watch;

View File

@ -16,9 +16,9 @@ import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.TlsP
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.SecretBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressTLS;
import io.fabric8.kubernetes.api.model.extensions.IngressTLSBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressTLS;
import io.fabric8.kubernetes.api.model.networking.v1.IngressTLSBuilder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

View File

@ -12,8 +12,8 @@
package org.eclipse.che.workspace.infrastructure.kubernetes.provision;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import java.util.List;
import java.util.Optional;
import javax.inject.Singleton;

View File

@ -17,7 +17,7 @@ import static org.eclipse.che.workspace.infrastructure.kubernetes.Warnings.NOT_A
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

View File

@ -21,7 +21,7 @@ import io.fabric8.kubernetes.api.model.Container;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.Volume;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;

View File

@ -24,7 +24,7 @@ import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

View File

@ -19,7 +19,7 @@ import com.google.common.annotations.VisibleForTesting;
import io.fabric8.kubernetes.api.model.IntOrString;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

View File

@ -13,19 +13,23 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.server.external;
import static com.google.common.base.Strings.isNullOrEmpty;
import io.fabric8.kubernetes.api.model.IntOrString;
import com.google.common.annotations.VisibleForTesting;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPathBuilder;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValueBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressBackendBuilder;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.extensions.IngressRuleBuilder;
import io.fabric8.kubernetes.api.model.extensions.IngressSpec;
import io.fabric8.kubernetes.api.model.extensions.IngressSpecBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPathBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValueBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackendBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRuleBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackendBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpecBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPortBuilder;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
@ -43,12 +47,15 @@ public class ExternalServerIngressBuilder {
private String path;
private String name;
private String serviceName;
private IntOrString servicePort;
private String servicePortName;
private Integer servicePort;
private Map<String, ? extends ServerConfig> serversConfigs;
private String machineName;
private Map<String, String> annotations;
private Map<String, String> labels;
@VisibleForTesting static final String INGRESS_PATH_TYPE = "Prefix";
public ExternalServerIngressBuilder withHost(String host) {
this.host = host;
return this;
@ -74,8 +81,13 @@ public class ExternalServerIngressBuilder {
return this;
}
public ExternalServerIngressBuilder withServicePort(String targetPortName) {
this.servicePort = new IntOrString(targetPortName);
public ExternalServerIngressBuilder withServicePort(Integer targetPort) {
this.servicePort = targetPort;
return this;
}
public ExternalServerIngressBuilder withServicePortName(String targetPortName) {
this.servicePortName = targetPortName;
return this;
}
@ -97,14 +109,26 @@ public class ExternalServerIngressBuilder {
public Ingress build() {
IngressBackend ingressBackend =
new IngressBackendBuilder()
.withServiceName(serviceName)
.withNewServicePort(servicePort.getStrVal())
ServiceBackendPortBuilder serviceBackendPortBuilder = new ServiceBackendPortBuilder();
// cannot set both port and name
if (!isNullOrEmpty(servicePortName)) {
serviceBackendPortBuilder.withName(servicePortName);
} else if (servicePort != null) {
serviceBackendPortBuilder.withNumber(servicePort);
}
IngressServiceBackend ingressServiceBackend =
new IngressServiceBackendBuilder()
.withPort(serviceBackendPortBuilder.build())
.withName(serviceName)
.build();
IngressBackend ingressBackend =
new IngressBackendBuilder().withService(ingressServiceBackend).build();
HTTPIngressPathBuilder httpIngressPathBuilder =
new HTTPIngressPathBuilder().withBackend(ingressBackend);
new HTTPIngressPathBuilder().withBackend(ingressBackend).withPathType(INGRESS_PATH_TYPE);
if (!isNullOrEmpty(path)) {
httpIngressPathBuilder.withPath(path);
@ -128,7 +152,7 @@ public class ExternalServerIngressBuilder {
ingressAnnotations.putAll(
Annotations.newSerializer().servers(serversConfigs).machineName(machineName).annotations());
return new io.fabric8.kubernetes.api.model.extensions.IngressBuilder()
return new IngressBuilder()
.withSpec(ingressSpec)
.withMetadata(
new ObjectMetaBuilder()

View File

@ -15,7 +15,7 @@ import static java.util.Collections.emptyMap;
import com.google.common.base.Splitter;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
@ -124,7 +124,8 @@ public class IngressServerExposer<T extends KubernetesEnvironment>
.withServiceName(serviceName)
.withAnnotations(annotations)
.withLabels(labels)
.withServicePort(servicePort.getName())
.withServicePortName(servicePort.getName())
.withServicePort(servicePort.getPort())
.withServers(servers)
.build();
}

View File

@ -11,7 +11,7 @@
*/
package org.eclipse.che.workspace.infrastructure.kubernetes.server.external;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;

View File

@ -14,8 +14,8 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.server.resolver;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

View File

@ -15,7 +15,7 @@ import static org.eclipse.che.workspace.infrastructure.kubernetes.server.Workspa
import static org.eclipse.che.workspace.infrastructure.kubernetes.server.WorkspaceExposureType.NATIVE;
import com.google.common.collect.ImmutableMap;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;

View File

@ -11,13 +11,13 @@
*/
package org.eclipse.che.workspace.infrastructure.kubernetes.util;
import io.fabric8.kubernetes.api.model.IntOrString;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import java.util.Collection;
import java.util.Optional;
@ -41,8 +41,8 @@ public class Ingresses {
for (IngressRule rule : ingress.getSpec().getRules()) {
for (HTTPIngressPath path : rule.getHttp().getPaths()) {
IngressBackend backend = path.getBackend();
if (backend.getServiceName().equals(service.getMetadata().getName())
&& matchesServicePort(backend.getServicePort(), foundPort.get())) {
if (backend.getService().getName().equals(service.getMetadata().getName())
&& matchesServicePort(backend.getService().getPort(), foundPort.get())) {
return Optional.of(rule);
}
}
@ -51,11 +51,12 @@ public class Ingresses {
return Optional.empty();
}
private static boolean matchesServicePort(IntOrString backendPort, ServicePort servicePort) {
if (backendPort.getStrVal() != null && backendPort.getStrVal().equals(servicePort.getName())) {
private static boolean matchesServicePort(
ServiceBackendPort backendPort, ServicePort servicePort) {
if (backendPort.getName() != null && backendPort.getName().equals(servicePort.getName())) {
return true;
}
if (backendPort.getIntVal() != null && backendPort.getIntVal().equals(servicePort.getPort())) {
if (backendPort.getNumber() != null && backendPort.getNumber().equals(servicePort.getPort())) {
return true;
}
return false;

View File

@ -72,10 +72,12 @@ import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.extensions.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import io.opentracing.Tracer;
import java.text.ParseException;
import java.util.ArrayList;
@ -1319,11 +1321,14 @@ public class KubernetesInternalRuntimeTest {
final Ingress ingress = mock(Ingress.class);
mockName(INGRESS_NAME, ingress);
final IngressSpec spec = mock(IngressSpec.class);
final IngressBackend backend = mock(IngressBackend.class);
when(backend.getServiceName()).thenReturn(SERVICE_NAME);
when(backend.getServicePort()).thenReturn(new IntOrString(EXPOSED_PORT_1));
when(spec.getBackend()).thenReturn(backend);
final IngressServiceBackend ingressServiceBackend = mock(IngressServiceBackend.class);
final ServiceBackendPort serviceBackendPort = mock(ServiceBackendPort.class);
when(spec.getDefaultBackend()).thenReturn(backend);
when(backend.getService()).thenReturn(ingressServiceBackend);
when(ingressServiceBackend.getPort()).thenReturn(serviceBackendPort);
when(ingressServiceBackend.getName()).thenReturn(SERVICE_NAME);
when(serviceBackendPort.getNumber()).thenReturn(EXPOSED_PORT_1);
final IngressRule rule = mock(IngressRule.class);
when(rule.getHost()).thenReturn(INGRESS_HOST);

View File

@ -50,7 +50,7 @@ import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.api.model.extensions.IngressBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder;
import org.eclipse.che.api.core.ValidationException;
import org.eclipse.che.api.workspace.server.model.impl.WarningImpl;
import org.eclipse.che.api.workspace.server.spi.environment.InternalEnvironment;

View File

@ -24,7 +24,7 @@ import static org.testng.Assert.assertNull;
import com.google.common.collect.ImmutableMap;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
@ -65,7 +65,8 @@ public class IngressTlsProvisionerTest {
private final String machine = "machine";
private final String name = "IngressName";
private final String serviceName = "ServiceName";
private final String servicePort = "server-port";
private final String servicePortName = "server-port";
private final Integer servicePort = 7777;
private final String host = "server-host";
private final ExternalServerIngressBuilder externalServerIngressBuilder =
@ -78,6 +79,7 @@ public class IngressTlsProvisionerTest {
.withName(name)
.withServers(servers)
.withServiceName(serviceName)
.withServicePortName(servicePortName)
.withServicePort(servicePort)
.build();

View File

@ -19,12 +19,14 @@ import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.extensions.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@ -170,7 +172,10 @@ public class KubernetesPreviewUrlCommandProvisionerTest {
new HTTPIngressRuleValue(
Collections.singletonList(
new HTTPIngressPath(
new IngressBackend(null, "servicename", new IntOrString(SERVICE_PORT_NAME)),
new IngressBackend(
null,
new IngressServiceBackend(
"servicename", new ServiceBackendPort(SERVICE_PORT_NAME, PORT))),
null,
null))));
ingressSpec.setRules(Collections.singletonList(rule));

View File

@ -35,8 +35,8 @@ import io.fabric8.kubernetes.api.model.Volume;
import io.fabric8.kubernetes.api.model.VolumeBuilder;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder;
import java.util.HashMap;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
import org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment;

View File

@ -17,17 +17,18 @@ import static java.util.Collections.singletonMap;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import io.fabric8.kubernetes.api.model.IntOrString;
import io.fabric8.kubernetes.api.model.LoadBalancerStatusBuilder;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceBuilder;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressBuilder;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
@ -300,7 +301,10 @@ public class IngressServerResolverTest {
new HTTPIngressRuleValue(
singletonList(
new HTTPIngressPath(
new IngressBackend(null, name, new IntOrString("8080")),
new IngressBackend(
null,
new IngressServiceBackend(
name, new ServiceBackendPort("8080", 8080))),
INGRESS_PATH_PREFIX,
null)))))
.endSpec()

View File

@ -20,12 +20,14 @@ import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.extensions.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@ -45,7 +47,7 @@ import org.testng.annotations.Test;
@Listeners(MockitoTestNGListener.class)
public class PreviewUrlExposerTest {
private PreviewUrlExposer<KubernetesEnvironment> previewUrlExposer;
private PreviewUrlExposer previewUrlExposer;
@Mock private ExternalServiceExposureStrategy externalServiceExposureStrategy;
@ -111,7 +113,10 @@ public class PreviewUrlExposerTest {
IngressRule ingressRule = new IngressRule();
ingressRule.setHost("ingresshost");
IngressBackend ingressBackend =
new IngressBackend(null, "servicename", new IntOrString(SERVER_PORT_NAME));
new IngressBackend(
null,
new IngressServiceBackend(
"servicename", new ServiceBackendPort(SERVER_PORT_NAME, PORT)));
ingressRule.setHttp(
new HTTPIngressRuleValue(singletonList(new HTTPIngressPath(ingressBackend, null, null))));
ingressSpec.setRules(singletonList(ingressRule));
@ -172,8 +177,8 @@ public class PreviewUrlExposerTest {
Ingress provisionedIngress = env.getIngresses().values().iterator().next();
IngressBackend provisionedIngressBackend =
provisionedIngress.getSpec().getRules().get(0).getHttp().getPaths().get(0).getBackend();
assertEquals(provisionedIngressBackend.getServicePort().getStrVal(), SERVER_PORT_NAME);
assertEquals(provisionedIngressBackend.getServiceName(), SERVICE_NAME);
assertEquals(provisionedIngressBackend.getService().getPort().getName(), SERVER_PORT_NAME);
assertEquals(provisionedIngressBackend.getService().getName(), SERVICE_NAME);
}
@Test
@ -209,8 +214,9 @@ public class PreviewUrlExposerTest {
Ingress provisionedIngress = env.getIngresses().values().iterator().next();
IngressBackend provisionedIngressBackend =
provisionedIngress.getSpec().getRules().get(0).getHttp().getPaths().get(0).getBackend();
assertEquals(provisionedIngressBackend.getServicePort().getStrVal(), SERVER_PORT_NAME);
assertEquals(provisionedIngressBackend.getService().getPort().getName(), SERVER_PORT_NAME);
assertEquals(
provisionedIngressBackend.getServiceName(), provisionedService.getMetadata().getName());
provisionedIngressBackend.getService().getName(),
provisionedService.getMetadata().getName());
}
}

View File

@ -25,9 +25,9 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
import org.eclipse.che.api.workspace.server.model.impl.ServerConfigImpl;
@ -148,8 +148,8 @@ public class DefaultHostExternalServiceExposureStrategyTest {
for (Ingress ingress : kubernetesEnvironment.getIngresses().values()) {
IngressRule ingressRule = ingress.getSpec().getRules().get(0);
IngressBackend backend = ingressRule.getHttp().getPaths().get(0).getBackend();
if (serviceName.equals(backend.getServiceName())) {
assertEquals(backend.getServicePort().getStrVal(), servicePort.getName());
if (serviceName.equals(backend.getService().getName())) {
assertEquals(backend.getService().getPort().getName(), servicePort.getName());
Annotations.Deserializer ingressAnnotations =
Annotations.newDeserializer(ingress.getMetadata().getAnnotations());

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2018 Red Hat, Inc.
* 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/
@ -12,12 +12,13 @@
package org.eclipse.che.workspace.infrastructure.kubernetes.server.external;
import static java.util.Collections.singletonMap;
import static org.eclipse.che.workspace.infrastructure.kubernetes.server.external.ExternalServerIngressBuilder.INGRESS_PATH_TYPE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import com.google.common.collect.ImmutableMap;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
import org.eclipse.che.api.workspace.server.model.impl.ServerConfigImpl;
@ -37,7 +38,8 @@ public class ExternalServerIngressBuilderTest {
private static final String MACHINE_NAME = "machine";
private static final String NAME = "IngressName";
private static final String SERVICE_NAME = "ServiceName";
private static final String SERVICE_PORT = "server-port";
private static final String SERVICE_PORT_NAME = "server-port";
private static final Integer SERVICE_PORT = 7777;
private ExternalServerIngressBuilder externalServerIngressBuilder;
@ -62,6 +64,7 @@ public class ExternalServerIngressBuilderTest {
.withName(NAME)
.withServers(SERVERS)
.withServiceName(SERVICE_NAME)
.withServicePortName(SERVICE_PORT_NAME)
.withServicePort(SERVICE_PORT)
.build();
@ -83,6 +86,7 @@ public class ExternalServerIngressBuilderTest {
.withName(NAME)
.withServers(SERVERS)
.withServiceName(SERVICE_NAME)
.withServicePortName(SERVICE_PORT_NAME)
.withServicePort(SERVICE_PORT)
.build();
@ -104,6 +108,7 @@ public class ExternalServerIngressBuilderTest {
.withName(NAME)
.withServers(SERVERS)
.withServiceName(SERVICE_NAME)
.withServicePortName(SERVICE_PORT_NAME)
.withServicePort(SERVICE_PORT)
.build();
@ -116,8 +121,9 @@ public class ExternalServerIngressBuilderTest {
HTTPIngressPath httpIngressPath =
ingress.getSpec().getRules().get(0).getHttp().getPaths().get(0);
assertEquals(httpIngressPath.getPath(), path);
assertEquals(httpIngressPath.getBackend().getServiceName(), SERVICE_NAME);
assertEquals(httpIngressPath.getBackend().getServicePort().getStrVal(), SERVICE_PORT);
assertEquals(httpIngressPath.getPathType(), INGRESS_PATH_TYPE);
assertEquals(httpIngressPath.getBackend().getService().getName(), SERVICE_NAME);
assertEquals(httpIngressPath.getBackend().getService().getPort().getName(), SERVICE_PORT_NAME);
assertEquals(ingress.getMetadata().getName(), NAME);
assertTrue(ingress.getMetadata().getAnnotations().containsKey("annotation-key"));

View File

@ -18,7 +18,7 @@ import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

View File

@ -25,9 +25,9 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServicePortBuilder;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import java.util.Map;
import org.eclipse.che.api.core.model.workspace.config.ServerConfig;
import org.eclipse.che.api.workspace.server.model.impl.ServerConfigImpl;
@ -120,8 +120,8 @@ public class MultiHostExternalServiceExposureStrategyTest {
assertEquals(ingressRule.getHost(), ingressName + "." + DOMAIN);
assertEquals(ingressRule.getHttp().getPaths().get(0).getPath(), "/");
IngressBackend backend = ingressRule.getHttp().getPaths().get(0).getBackend();
assertEquals(backend.getServiceName(), serviceName);
assertEquals(backend.getServicePort().getStrVal(), servicePort.getName());
assertEquals(backend.getService().getName(), serviceName);
assertEquals(backend.getService().getPort().getName(), servicePort.getName());
Annotations.Deserializer ingressAnnotations =
Annotations.newDeserializer(ingress.getMetadata().getAnnotations());

View File

@ -21,12 +21,14 @@ import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.extensions.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.extensions.IngressBackend;
import io.fabric8.kubernetes.api.model.extensions.IngressRule;
import io.fabric8.kubernetes.api.model.extensions.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressPath;
import io.fabric8.kubernetes.api.model.networking.v1.HTTPIngressRuleValue;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.IngressBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressRule;
import io.fabric8.kubernetes.api.model.networking.v1.IngressServiceBackend;
import io.fabric8.kubernetes.api.model.networking.v1.IngressSpec;
import io.fabric8.kubernetes.api.model.networking.v1.ServiceBackendPort;
import java.util.Optional;
import org.testng.annotations.Test;
@ -38,7 +40,12 @@ public class IngressesTest {
final int PORT = 8080;
Service service = createService(SERVER_PORT_NAME, PORT);
Ingress ingress = createIngress(new IngressBackend(null, "servicename", new IntOrString(PORT)));
Ingress ingress =
createIngress(
new IngressBackend(
null,
new IngressServiceBackend(
"servicename", new ServiceBackendPort(SERVER_PORT_NAME, PORT))));
Optional<IngressRule> foundRule =
Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT);
@ -53,7 +60,11 @@ public class IngressesTest {
Service service = createService(SERVER_PORT_NAME, PORT);
Ingress ingress =
createIngress(new IngressBackend(null, "servicename", new IntOrString(SERVER_PORT_NAME)));
createIngress(
new IngressBackend(
null,
new IngressServiceBackend(
"servicename", new ServiceBackendPort(SERVER_PORT_NAME, PORT))));
Optional<IngressRule> foundRule =
Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT);
@ -68,7 +79,11 @@ public class IngressesTest {
Service service = createService(SERVER_PORT_NAME, PORT);
Ingress ingress =
createIngress(new IngressBackend(null, "servicename", new IntOrString("does not exist")));
createIngress(
new IngressBackend(
null,
new IngressServiceBackend(
"servicename", new ServiceBackendPort("does not exist", null))));
Optional<IngressRule> foundRule =
Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT);
@ -81,7 +96,10 @@ public class IngressesTest {
final int PORT = 8080;
Service service = createService(SERVER_PORT_NAME, PORT);
Ingress ingress = createIngress(new IngressBackend(null, "servicename", new IntOrString(666)));
Ingress ingress =
createIngress(
new IngressBackend(
null, new IngressServiceBackend("servicename", new ServiceBackendPort(null, 666))));
Optional<IngressRule> foundRule =
Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT);

View File

@ -50,10 +50,6 @@
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-model-core</artifactId>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-model-extensions</artifactId>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>openshift-client</artifactId>

View File

@ -17,7 +17,7 @@ import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.extensions.Ingress;
import io.fabric8.kubernetes.api.model.networking.v1.Ingress;
import io.fabric8.openshift.api.model.Route;
import java.util.ArrayList;
import java.util.HashMap;
@ -29,7 +29,6 @@ import org.eclipse.che.api.workspace.server.spi.environment.InternalEnvironment;
import org.eclipse.che.api.workspace.server.spi.environment.InternalMachineConfig;
import org.eclipse.che.api.workspace.server.spi.environment.InternalRecipe;
import org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment;
import org.eclipse.che.workspace.infrastructure.kubernetes.environment.KubernetesEnvironment.Builder;
/**
* Holds objects of OpenShift environment.