diff --git a/infrastructures/infrastructure-factory/pom.xml b/infrastructures/infrastructure-factory/pom.xml index ba1e0f9cec..908912b893 100644 --- a/infrastructures/infrastructure-factory/pom.xml +++ b/infrastructures/infrastructure-factory/pom.xml @@ -37,7 +37,7 @@ io.fabric8 - kubernetes-model + kubernetes-model-core javax.inject diff --git a/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesGitCredentialManagerTest.java b/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesGitCredentialManagerTest.java index 902300cd1f..df7c00e683 100644 --- a/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesGitCredentialManagerTest.java +++ b/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesGitCredentialManagerTest.java @@ -27,15 +27,12 @@ import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import io.fabric8.kubernetes.api.model.DoneableSecret; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.api.model.SecretBuilder; import io.fabric8.kubernetes.api.model.SecretList; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; @@ -64,17 +61,11 @@ public class KubernetesGitCredentialManagerTest { @Mock private KubernetesClientFactory clientFactory; @Mock private KubernetesClient kubeClient; - @Mock - private MixedOperation> - secretsMixedOperation; + @Mock private MixedOperation> secretsMixedOperation; - @Mock - NonNamespaceOperation> - nonNamespaceOperation; + @Mock NonNamespaceOperation> nonNamespaceOperation; - @Mock - private FilterWatchListDeletable> - filterWatchDeletable; + @Mock private FilterWatchListDeletable filterWatchDeletable; @Mock private SecretList secretList; diff --git a/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesPersonalAccessTokenManagerTest.java b/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesPersonalAccessTokenManagerTest.java index f92b1b50db..3a2e3d54fc 100644 --- a/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesPersonalAccessTokenManagerTest.java +++ b/infrastructures/infrastructure-factory/src/test/java/org/eclipse/che/api/factory/server/scm/kubernetes/KubernetesPersonalAccessTokenManagerTest.java @@ -25,7 +25,6 @@ import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import io.fabric8.kubernetes.api.model.DoneableSecret; import io.fabric8.kubernetes.api.model.LabelSelector; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; @@ -68,13 +67,9 @@ public class KubernetesPersonalAccessTokenManagerTest { @Mock private KubernetesClient kubeClient; - @Mock - private MixedOperation> - secretsMixedOperation; + @Mock private MixedOperation> secretsMixedOperation; - @Mock - NonNamespaceOperation> - nonNamespaceOperation; + @Mock NonNamespaceOperation> nonNamespaceOperation; KubernetesPersonalAccessTokenManager personalAccessTokenManager; diff --git a/infrastructures/kubernetes/pom.xml b/infrastructures/kubernetes/pom.xml index 6ca7c725ed..94b7631430 100644 --- a/infrastructures/kubernetes/pom.xml +++ b/infrastructures/kubernetes/pom.xml @@ -83,7 +83,27 @@ io.fabric8 - kubernetes-model + kubernetes-model-apps + + + io.fabric8 + kubernetes-model-batch + + + io.fabric8 + kubernetes-model-core + + + io.fabric8 + kubernetes-model-extensions + + + io.fabric8 + kubernetes-model-rbac + + + io.fabric8 + openshift-model io.opentracing diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/AbstractWorkspaceServiceAccount.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/AbstractWorkspaceServiceAccount.java index 9f8dc793e5..d2130243ed 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/AbstractWorkspaceServiceAccount.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/AbstractWorkspaceServiceAccount.java @@ -13,9 +13,9 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; import static java.util.Collections.singletonList; -import io.fabric8.kubernetes.api.model.Doneable; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesResourceList; +import io.fabric8.kubernetes.api.model.ServiceAccountBuilder; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; @@ -23,8 +23,10 @@ import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.function.Function; +import org.eclipse.che.api.user.server.PreferenceManager; import org.eclipse.che.api.user.server.UserManager; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; +import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory; import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory; import org.eclipse.che.workspace.infrastructure.kubernetes.util.KubernetesSharedPool; import org.slf4j.Logger; @@ -52,20 +54,10 @@ public abstract class AbstractWorkspaceServiceAccount< private final String workspaceId; private final Set clusterRoleNames; private final Function< - Client, - MixedOperation< - R, - ? extends KubernetesResourceList, - ? extends Doneable, - ? extends Resource>>> + Client, MixedOperation, ? extends Resource>> roles; private final Function< - Client, - MixedOperation< - B, - ? extends KubernetesResourceList, - ? extends Doneable, - ? extends Resource>>> + Client, MixedOperation, ? extends Resource>> roleBindings; protected AbstractWorkspaceServiceAccount( @@ -75,20 +67,10 @@ public abstract class AbstractWorkspaceServiceAccount< Set clusterRoleNames, ClientFactory clientFactory, Function< - Client, - MixedOperation< - R, - ? extends KubernetesResourceList, - ? extends Doneable, - ? extends Resource>>> + Client, MixedOperation, ? extends Resource>> roles, Function< - Client, - MixedOperation< - B, - ? extends KubernetesResourceList, - ? extends Doneable, - ? extends Resource>>> + Client, MixedOperation, ? extends Resource>> roleBindings) { this.workspaceId = workspaceId; this.namespace = namespace; @@ -173,7 +155,8 @@ public abstract class AbstractWorkspaceServiceAccount< * 'che.infra.kubernetes.workspace_sa_cluster_roles' property. * * @see KubernetesNamespaceFactory#KubernetesNamespaceFactory(String, String, String, String, - * boolean, KubernetesClientFactory, UserManager, KubernetesSharedPool) + * boolean, boolean, boolean, String, String, KubernetesClientFactory, + * CheServerKubernetesClientFactory, UserManager, PreferenceManager, KubernetesSharedPool) */ private void createExplicitClusterRoleBindings(Client k8sClient) { // If the user specified an additional cluster roles for the workspace, @@ -220,12 +203,13 @@ public abstract class AbstractWorkspaceServiceAccount< k8sClient .serviceAccounts() .inNamespace(namespace) - .createOrReplaceWithNew() - .withAutomountServiceAccountToken(true) - .withNewMetadata() - .withName(serviceAccountName) - .endMetadata() - .done(); + .createOrReplace( + new ServiceAccountBuilder() + .withAutomountServiceAccountToken(true) + .withNewMetadata() + .withName(serviceAccountName) + .endMetadata() + .build()); } private void createRole( diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespace.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespace.java index ac889f8948..4540dcffb0 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespace.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespace.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static org.eclipse.che.workspace.infrastructure.kubernetes.Annotations.CREATE_IN_CHE_INSTALLATION_NAMESPACE; import static org.eclipse.che.workspace.infrastructure.kubernetes.Constants.CHE_WORKSPACE_ID_LABEL; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.putLabel; @@ -157,7 +158,7 @@ public class CheNamespace { .configMaps() .inNamespace(cheNamespaceName) .withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersion.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersion.java index 8af909e463..3155bf1a7b 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersion.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersion.java @@ -117,7 +117,7 @@ public class K8sVersion { synchronized (this) { if (versionInfo == null) { versionInfo = clientFactory.create().getVersion(); - LOG.debug("Obtained k8s version {}", versionInfo.getData()); + LOG.debug("Obtained k8s version {} {}", versionInfo.getMajor(), versionInfo.getMinor()); parseVersions(); } } diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesConfigsMaps.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesConfigsMaps.java index eb14faec30..df12730f9c 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesConfigsMaps.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesConfigsMaps.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +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; @@ -88,7 +89,7 @@ public class KubernetesConfigsMaps { .configMaps() .inNamespace(namespace) .withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeployments.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeployments.java index 58eefa2bbf..44d82c8cf4 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeployments.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeployments.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.lang.String.format; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.concurrent.CompletableFuture.allOf; @@ -26,7 +27,6 @@ import com.google.common.base.Strings; import io.fabric8.kubernetes.api.model.ContainerStateTerminated; import io.fabric8.kubernetes.api.model.ContainerStateWaiting; import io.fabric8.kubernetes.api.model.ContainerStatus; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.Event; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectReference; @@ -36,10 +36,10 @@ import io.fabric8.kubernetes.api.model.PodSpec; import io.fabric8.kubernetes.api.model.PodStatus; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.ExecListener; import io.fabric8.kubernetes.client.dsl.ExecWatch; import io.fabric8.kubernetes.client.dsl.PodResource; @@ -296,12 +296,12 @@ public class KubernetesDeployments { Watch watch = null; try { - PodResource podResource = + PodResource podResource = clientFactory.create(workspaceId).pods().inNamespace(namespace).withName(podName); watch = podResource.watch( - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, Pod pod) { if (predicate.test(pod)) { @@ -310,7 +310,7 @@ public class KubernetesDeployments { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { future.completeExceptionally( new InfrastructureException( "Waiting for pod '" + podName + "' was interrupted")); @@ -371,18 +371,18 @@ public class KubernetesDeployments { final CompletableFuture podRunningFuture = new CompletableFuture<>(); try { final String podName = getPodName(name); - final PodResource podResource = + final PodResource podResource = clientFactory.create(workspaceId).pods().inNamespace(namespace).withName(podName); final Watch watch = podResource.watch( - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, Pod pod) { handleStartingPodStatus(podRunningFuture, pod); } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { podRunningFuture.completeExceptionally( new InfrastructureException( "Waiting for pod '" + podName + "' was interrupted")); @@ -515,14 +515,14 @@ public class KubernetesDeployments { public void watch(PodActionHandler handler) throws InfrastructureException { if (podWatch == null) { final Watcher watcher = - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, Pod pod) { podActionHandlers.forEach(h -> h.handle(action, pod)); } @Override - public void onClose(KubernetesClientException ignored) {} + public void onClose(WatcherException cause) {} }; try { podWatch = @@ -550,7 +550,7 @@ public class KubernetesDeployments { public void watchEvents(PodEventHandler handler) throws InfrastructureException { if (containerWatch == null) { final Watcher watcher = - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, Event event) { ObjectReference involvedObject = event.getInvolvedObject(); @@ -598,7 +598,7 @@ public class KubernetesDeployments { } @Override - public void onClose(KubernetesClientException ignored) {} + public void onClose(WatcherException ignored) {} /** * Returns the container name if the event is related to container. When the event is @@ -631,7 +631,7 @@ public class KubernetesDeployments { try { watcherInitializationDate = new Date(); containerWatch = - clientFactory.create(workspaceId).events().inNamespace(namespace).watch(watcher); + clientFactory.create(workspaceId).v1().events().inNamespace(namespace).watch(watcher); } catch (KubernetesClientException ex) { throw new KubernetesInfrastructureException(ex); } @@ -931,7 +931,7 @@ public class KubernetesDeployments { Watch toCloseOnException = null; try { - ScalableResource deploymentResource = + ScalableResource deploymentResource = clientFactory .create(workspaceId) .apps() @@ -948,16 +948,16 @@ public class KubernetesDeployments { // If we have a Pod, we have to watch to make sure it is deleted, otherwise, we watch the // Deployment we are deleting. if (!Strings.isNullOrEmpty(podName)) { - PodResource podResource = + PodResource podResource = clientFactory.create(workspaceId).pods().inNamespace(namespace).withName(podName); - watch = podResource.watch(new DeleteWatcher(deleteFuture)); + watch = podResource.watch(new DeleteWatcher<>(deleteFuture)); toCloseOnException = watch; } else { watch = deploymentResource.watch(new DeleteWatcher(deleteFuture)); toCloseOnException = watch; } - Boolean deleteSucceeded = deploymentResource.withPropagationPolicy("Background").delete(); + Boolean deleteSucceeded = deploymentResource.withPropagationPolicy(BACKGROUND).delete(); if (deleteSucceeded == null || !deleteSucceeded) { deleteFuture.complete(null); @@ -985,17 +985,17 @@ public class KubernetesDeployments { protected CompletableFuture doDeletePod(String podName) throws InfrastructureException { Watch toCloseOnException = null; try { - PodResource podResource = + PodResource podResource = clientFactory.create(workspaceId).pods().inNamespace(namespace).withName(podName); if (podResource.get() == null) { throw new InfrastructureException(format("No pod found to delete for name %s", podName)); } final CompletableFuture deleteFuture = new CompletableFuture<>(); - final Watch watch = podResource.watch(new DeleteWatcher(deleteFuture)); + final Watch watch = podResource.watch(new DeleteWatcher<>(deleteFuture)); toCloseOnException = watch; - Boolean deleteSucceeded = podResource.withPropagationPolicy("Background").delete(); + Boolean deleteSucceeded = podResource.withPropagationPolicy(BACKGROUND).delete(); if (deleteSucceeded == null || !deleteSucceeded) { deleteFuture.complete(null); } @@ -1105,7 +1105,7 @@ public class KubernetesDeployments { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { future.completeExceptionally( new RuntimeException("Websocket connection closed before Pod creation event received")); } @@ -1127,7 +1127,7 @@ public class KubernetesDeployments { } @Override - public void onClose(KubernetesClientException e) { + public void onClose(WatcherException e) { // if event about removing is received then this completion has no effect future.completeExceptionally( new RuntimeException( diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesIngresses.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesIngresses.java index b781efac71..1218661034 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesIngresses.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesIngresses.java @@ -11,14 +11,15 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +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.DoneableIngress; import io.fabric8.kubernetes.api.model.extensions.Ingress; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.Resource; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -84,7 +85,7 @@ public class KubernetesIngresses { CompletableFuture future = new CompletableFuture<>(); Watch watch = null; try { - Resource ingressResource = + Resource ingressResource = clientFactory .create(workspaceId) .extensions() @@ -94,7 +95,7 @@ public class KubernetesIngresses { watch = ingressResource.watch( - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, Ingress ingress) { if (predicate.test(ingress)) { @@ -103,7 +104,7 @@ public class KubernetesIngresses { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { future.completeExceptionally( new InfrastructureException( "Waiting for ingress '" + name + "' was interrupted")); @@ -144,7 +145,7 @@ public class KubernetesIngresses { .ingresses() .inNamespace(namespace) .withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespace.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespace.java index 9e56d18a3d..bccdeec700 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespace.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespace.java @@ -11,11 +11,11 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.lang.String.format; import com.google.common.annotations.VisibleForTesting; import io.fabric8.kubernetes.api.model.ConfigMap; -import io.fabric8.kubernetes.api.model.DoneableServiceAccount; import io.fabric8.kubernetes.api.model.Namespace; import io.fabric8.kubernetes.api.model.NamespaceBuilder; import io.fabric8.kubernetes.api.model.PersistentVolumeClaim; @@ -28,6 +28,7 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.Resource; import java.util.HashMap; import java.util.Map; @@ -309,11 +310,12 @@ public class KubernetesNamespace { Namespace namespace = client .namespaces() - .createNew() - .withNewMetadata() - .withName(namespaceName) - .endMetadata() - .done(); + .create( + new NamespaceBuilder() + .withNewMetadata() + .withName(namespaceName) + .endMetadata() + .build()); waitDefaultServiceAccount(namespaceName, client); return namespace; } catch (KubernetesClientException e) { @@ -329,7 +331,7 @@ public class KubernetesNamespace { private void delete(String namespaceName, KubernetesClient client) throws InfrastructureException { try { - client.namespaces().withName(namespaceName).withPropagationPolicy("Background").delete(); + client.namespaces().withName(namespaceName).withPropagationPolicy(BACKGROUND).delete(); } catch (KubernetesClientException e) { if (e.getCode() == 404) { LOG.warn( @@ -355,14 +357,14 @@ public class KubernetesNamespace { final CompletableFuture future = new CompletableFuture<>(); Watch watch = null; try { - final Resource saResource = + final Resource saResource = client .serviceAccounts() .inNamespace(namespaceName) .withName(DEFAULT_SERVICE_ACCOUNT_NAME); watch = saResource.watch( - new Watcher() { + new Watcher<>() { @Override public void eventReceived(Action action, ServiceAccount serviceAccount) { if (predicate.test(serviceAccount)) { @@ -371,7 +373,7 @@ public class KubernetesNamespace { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { future.completeExceptionally( new InfrastructureException( "Waiting for service account '" diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesPersistentVolumeClaims.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesPersistentVolumeClaims.java index ffd524176d..78b2970d0c 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesPersistentVolumeClaims.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesPersistentVolumeClaims.java @@ -11,14 +11,15 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.util.stream.Collectors.toSet; -import io.fabric8.kubernetes.api.model.DoneablePersistentVolumeClaim; import io.fabric8.kubernetes.api.model.Event; import io.fabric8.kubernetes.api.model.PersistentVolumeClaim; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.Resource; import java.util.Collection; import java.util.List; @@ -151,7 +152,7 @@ public class KubernetesPersistentVolumeClaims { .persistentVolumeClaims() .inNamespace(namespace) .withLabels(labels) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); @@ -172,7 +173,7 @@ public class KubernetesPersistentVolumeClaims { public PersistentVolumeClaim waitBound(String name, long timeoutMillis) throws InfrastructureException { try { - Resource pvcResource = + Resource pvcResource = clientFactory .create(workspaceId) .persistentVolumeClaims() @@ -212,7 +213,7 @@ public class KubernetesPersistentVolumeClaims { private Watch pvcIsBoundWatcher( CompletableFuture future, - Resource pvcResource) { + Resource pvcResource) { return pvcResource.watch( new Watcher() { @Override @@ -224,7 +225,7 @@ public class KubernetesPersistentVolumeClaims { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { safelyFinishFutureOnClose(cause, future, pvcResource.get().getMetadata().getName()); } }); @@ -238,6 +239,7 @@ public class KubernetesPersistentVolumeClaims { throws InfrastructureException { return clientFactory .create(workspaceId) + .v1() .events() .inNamespace(namespace) .withField(PVC_EVENT_REASON_FIELD_KEY, PVC_EVENT_WAIT_CONSUMER_REASON) @@ -254,16 +256,14 @@ public class KubernetesPersistentVolumeClaims { } @Override - public void onClose(KubernetesClientException cause) { + public void onClose(WatcherException cause) { safelyFinishFutureOnClose(cause, future, actualPvc.getMetadata().getName()); } }); } private void safelyFinishFutureOnClose( - KubernetesClientException cause, - CompletableFuture future, - String pvcName) { + WatcherException cause, CompletableFuture future, String pvcName) { if (cause != null) { future.completeExceptionally( new InfrastructureException( diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecrets.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecrets.java index 7285f4eb0a..7a444556db 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecrets.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecrets.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +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; @@ -87,7 +88,7 @@ public class KubernetesSecrets { .secrets() .inNamespace(namespace) .withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesServices.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesServices.java index e43745a14d..22edcd398b 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesServices.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesServices.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +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 static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesObjectUtil.putSelector; @@ -87,7 +88,7 @@ public class KubernetesServices { .services() .inNamespace(namespace) .withLabel(CHE_WORKSPACE_ID_LABEL, workspaceId) - .withPropagationPolicy("Background") + .withPropagationPolicy(BACKGROUND) .delete(); } catch (KubernetesClientException e) { throw new KubernetesInfrastructureException(e); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptor.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptor.java index 497642ed9c..3d59c986ba 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptor.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptor.java @@ -11,18 +11,18 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.provision; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.lang.String.format; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.CommonPVCStrategy.COMMON_STRATEGY; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.EphemeralWorkspaceUtility.isEphemeral; import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStorageProvisioner.ASYNC_STORAGE; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.apps.Deployment; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.PodResource; import io.fabric8.kubernetes.client.dsl.RollableScalableResource; import java.util.concurrent.CompletableFuture; @@ -74,7 +74,7 @@ public class AsyncStoragePodInterceptor { String namespace = identity.getInfrastructureNamespace(); String workspaceId = identity.getWorkspaceId(); - RollableScalableResource asyncStorageDeploymentResource = + RollableScalableResource asyncStorageDeploymentResource = getAsyncStorageDeploymentResource(namespace, workspaceId); if (asyncStorageDeploymentResource.get() == null) { // deployment doesn't exist @@ -103,9 +103,8 @@ public class AsyncStoragePodInterceptor { } } - private RollableScalableResource - getAsyncStorageDeploymentResource(String namespace, String workspaceId) - throws InfrastructureException { + private RollableScalableResource getAsyncStorageDeploymentResource( + String namespace, String workspaceId) throws InfrastructureException { return kubernetesClientFactory .create(workspaceId) .apps() @@ -115,15 +114,14 @@ public class AsyncStoragePodInterceptor { } private CompletableFuture deleteAsyncStorageDeployment( - RollableScalableResource resource) - throws InfrastructureException { + RollableScalableResource resource) throws InfrastructureException { Watch toCloseOnException = null; try { final CompletableFuture deleteFuture = new CompletableFuture<>(); final Watch watch = resource.watch(new DeleteWatcher<>(deleteFuture)); toCloseOnException = watch; - Boolean deleteSucceeded = resource.withPropagationPolicy("Background").delete(); + Boolean deleteSucceeded = resource.withPropagationPolicy(BACKGROUND).delete(); if (deleteSucceeded == null || !deleteSucceeded) { deleteFuture.complete(null); } @@ -156,7 +154,7 @@ public class AsyncStoragePodInterceptor { String namespace = identity.getInfrastructureNamespace(); String workspaceId = identity.getWorkspaceId(); - PodResource asyncStoragePodResource = + PodResource asyncStoragePodResource = kubernetesClientFactory .create(workspaceId) .pods() @@ -169,7 +167,7 @@ public class AsyncStoragePodInterceptor { } } - private CompletableFuture deleteAsyncStoragePod(PodResource podResource) + private CompletableFuture deleteAsyncStoragePod(PodResource podResource) throws InfrastructureException { Watch toCloseOnException = null; try { @@ -177,7 +175,7 @@ public class AsyncStoragePodInterceptor { final Watch watch = podResource.watch(new DeleteWatcher<>(deleteFuture)); toCloseOnException = watch; - Boolean deleteSucceeded = podResource.withPropagationPolicy("Background").delete(); + Boolean deleteSucceeded = podResource.withPropagationPolicy(BACKGROUND).delete(); if (deleteSucceeded == null || !deleteSucceeded) { deleteFuture.complete(null); } @@ -217,7 +215,7 @@ public class AsyncStoragePodInterceptor { } @Override - public void onClose(KubernetesClientException e) { + public void onClose(WatcherException e) { // if event about removing is received then this completion has no effect future.completeExceptionally( new RuntimeException( diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcher.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcher.java index c081de90c9..c7e37475c1 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcher.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcher.java @@ -23,10 +23,8 @@ import static org.eclipse.che.api.workspace.shared.Constants.LAST_ACTIVITY_TIME; import static org.eclipse.che.workspace.infrastructure.kubernetes.namespace.pvc.CommonPVCStrategy.COMMON_STRATEGY; import static org.eclipse.che.workspace.infrastructure.kubernetes.provision.AsyncStorageProvisioner.ASYNC_STORAGE; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.apps.Deployment; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.dsl.PodResource; import io.fabric8.kubernetes.client.dsl.RollableScalableResource; import java.time.Instant; @@ -141,7 +139,7 @@ public class AsyncStoragePodWatcher { ofEpochSecond(lastTimeAccessSec).plusSeconds(shutdownTimeoutSec); if (now().isAfter(expectedShutdownAfter)) { removeAsyncStoragePodWithoutDeployment(namespace); - RollableScalableResource doneableResource = + RollableScalableResource doneableResource = kubernetesClientFactory .create() .apps() @@ -168,7 +166,7 @@ public class AsyncStoragePodWatcher { */ private void removeAsyncStoragePodWithoutDeployment(String namespace) throws InfrastructureException { - PodResource doneablePodResource = + PodResource doneablePodResource = kubernetesClientFactory.create().pods().inNamespace(namespace).withName(ASYNC_STORAGE); if (doneablePodResource.get() != null) { doneablePodResource.delete(); diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisioner.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisioner.java index 02ea0cd555..c3985ed544 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisioner.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisioner.java @@ -31,9 +31,6 @@ import io.fabric8.kubernetes.api.model.ConfigMapVolumeSourceBuilder; import io.fabric8.kubernetes.api.model.Container; import io.fabric8.kubernetes.api.model.ContainerBuilder; import io.fabric8.kubernetes.api.model.ContainerPortBuilder; -import io.fabric8.kubernetes.api.model.DoneableConfigMap; -import io.fabric8.kubernetes.api.model.DoneablePersistentVolumeClaim; -import io.fabric8.kubernetes.api.model.DoneableService; import io.fabric8.kubernetes.api.model.IntOrString; import io.fabric8.kubernetes.api.model.IntOrStringBuilder; import io.fabric8.kubernetes.api.model.ObjectMeta; @@ -53,7 +50,6 @@ import io.fabric8.kubernetes.api.model.VolumeMount; import io.fabric8.kubernetes.api.model.VolumeMountBuilder; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.RollableScalableResource; @@ -188,7 +184,7 @@ public class AsyncStorageProvisioner { } private void createPvcIfNotExist(KubernetesClient k8sClient, String namespace, String userId) { - Resource claimResource = + Resource claimResource = k8sClient.persistentVolumeClaims().inNamespace(namespace).withName(pvcName); if (claimResource.get() != null) { @@ -242,7 +238,7 @@ public class AsyncStorageProvisioner { String userId, KubernetesEnvironment k8sEnv) throws InfrastructureException { - Resource mapResource = + Resource mapResource = k8sClient.configMaps().inNamespace(namespace).withName(configMapName); if (mapResource.get() != null) { // map already exist return; @@ -273,7 +269,7 @@ public class AsyncStorageProvisioner { private void createAsyncStoragePodIfNotExist( KubernetesClient k8sClient, String namespace, String configMap, String userId) { - RollableScalableResource resource = + RollableScalableResource resource = k8sClient.apps().deployments().inNamespace(namespace).withName(ASYNC_STORAGE); if (resource.get() != null) { return; // deployment already exist @@ -373,7 +369,7 @@ public class AsyncStorageProvisioner { /** Create service for serving rsync connection */ private void createStorageServiceIfNotExist( KubernetesClient k8sClient, String namespace, String userId) { - ServiceResource serviceResource = + ServiceResource serviceResource = k8sClient.services().inNamespace(namespace).withName(ASYNC_STORAGE); if (serviceResource.get() != null) { return; // service already exist diff --git a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposer.java b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposer.java index 7f888c4dc3..5e66255471 100644 --- a/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposer.java +++ b/infrastructures/kubernetes/src/main/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposer.java @@ -107,7 +107,7 @@ public class PreviewUrlExposer { } private ServicePort createServicePort(int port) { - return new ServicePort("server-" + port, null, port, "TCP", new IntOrString(port)); + return new ServicePort(null, "server-" + port, null, port, "TCP", new IntOrString(port)); } protected boolean hasMatchingEndpoint(T env, Service service, int port) { diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/devfile/ContainerSearchTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/devfile/ContainerSearchTest.java index c5bfebc90b..64085409f2 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/devfile/ContainerSearchTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/devfile/ContainerSearchTest.java @@ -228,24 +228,24 @@ public class ContainerSearchTest { .endTemplate() .endSpec() .build(); - Template template = new TemplateBuilder() - .addNewDeploymentObject() - .withNewMetadata() - .withName("deploymentWithName") - .endMetadata() - .withNewSpec() - .withNewTemplate() - .withNewMetadata() - .withName("podWithName") - .endMetadata() - .withNewSpec() - .withContainers(container12) - .endSpec() - .endTemplate() - .endSpec() - .endDeploymentObject() + .addToObjects( + new DeploymentBuilder() + .withNewMetadata() + .withName("deploymentWithName") + .endMetadata() + .withNewSpec() + .withNewTemplate() + .withNewMetadata() + .withName("podWithName") + .endMetadata() + .withNewSpec() + .withContainers(container12) + .endSpec() + .endTemplate() + .endSpec() + .build()) .build(); // Pod, PodTemplate, DaemonSet, Deployment, Job, ReplicaSet, ReplicationController, StatefulSet, diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespaceTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespaceTest.java index 7622ad4c6f..385e783be4 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespaceTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/CheNamespaceTest.java @@ -11,19 +11,20 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static org.eclipse.che.workspace.infrastructure.kubernetes.Annotations.CREATE_IN_CHE_INSTALLATION_NAMESPACE; import static org.eclipse.che.workspace.infrastructure.kubernetes.Constants.CHE_WORKSPACE_ID_LABEL; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.testng.Assert.*; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; import com.google.common.collect.ImmutableMap; import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.api.model.ConfigMapList; -import io.fabric8.kubernetes.api.model.DoneableConfigMap; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; @@ -60,24 +61,16 @@ public class CheNamespaceTest { @Mock private RuntimeIdentity identity; @Mock private KubernetesClient kubeClient; - @Mock - private MixedOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> - kubeConfigMaps; + @Mock private MixedOperation> kubeConfigMaps; @Mock - private MixedOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> - kubeConfigMapsInNamespace; + private MixedOperation> kubeConfigMapsInNamespace; @Mock - private MixedOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> - kubeConfigMapsWithLabel; + private MixedOperation> kubeConfigMapsWithLabel; @Mock - private MixedOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> + private MixedOperation> kubeConfigMapsWithPropagationPolicy; @Mock private InternalRuntime internalRuntime; @@ -244,7 +237,7 @@ public class CheNamespaceTest { when(kubeConfigMaps.inNamespace(CHE_NAMESPACE)).thenReturn(kubeConfigMapsInNamespace); when(kubeConfigMapsInNamespace.withLabel(CHE_WORKSPACE_ID_LABEL, WORKSPACE_ID)) .thenReturn(kubeConfigMapsWithLabel); - when(kubeConfigMapsWithLabel.withPropagationPolicy("Background")) + when(kubeConfigMapsWithLabel.withPropagationPolicy(BACKGROUND)) .thenReturn(kubeConfigMapsWithPropagationPolicy); // when diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersionTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersionTest.java index e2b43994c0..025215d375 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersionTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/K8sVersionTest.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.client.VersionInfo.VersionKeys.BUILD_DATE_FORMAT; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; @@ -21,8 +22,6 @@ import io.fabric8.kubernetes.client.VersionInfo; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.HashMap; -import java.util.Map; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory; import org.mockito.Mock; @@ -143,33 +142,16 @@ public class K8sVersionTest { } private VersionInfo createDummyVersionInfo(String major, String minor) throws ParseException { - Map versionData = new HashMap<>(); - versionData.put( - VERSION_KEYS.BUILD_DATE, - new SimpleDateFormat(VERSION_KEYS.BUILD_DATE_FORMAT).format(new Date())); - versionData.put(VERSION_KEYS.GIT_COMMIT, "3f6f40d"); - versionData.put(VERSION_KEYS.GIT_VERSION, "v1.17.1+3f6f40d"); - versionData.put(VERSION_KEYS.GIT_TREE_STATE, "clean"); - versionData.put(VERSION_KEYS.GO_VERSION, "go1.13.4"); - versionData.put(VERSION_KEYS.PLATFORM, "linux/amd64"); - versionData.put(VERSION_KEYS.COMPILER, "gc"); - - versionData.put(VERSION_KEYS.MAJOR, major); - versionData.put(VERSION_KEYS.MINOR, minor); - return new VersionInfo(versionData); - } - - private final class VERSION_KEYS { - - public static final String BUILD_DATE = "buildDate"; - public static final String GIT_COMMIT = "gitCommit"; - public static final String GIT_VERSION = "gitVersion"; - public static final String MAJOR = "major"; - public static final String MINOR = "minor"; - public static final String GIT_TREE_STATE = "gitTreeState"; - public static final String PLATFORM = "platform"; - public static final String GO_VERSION = "goVersion"; - public static final String COMPILER = "compiler"; - public static final String BUILD_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; + return new VersionInfo.Builder() + .withBuildDate(new SimpleDateFormat(BUILD_DATE_FORMAT).format(new Date())) + .withGitCommit("3f6f40d") + .withGitVersion("1.17.1+3f6f40d") + .withGitTreeState("clean") + .withGoVersion("go1.13.4") + .withPlatform("linux/amd64") + .withCompiler("gc") + .withMajor(major) + .withMinor(minor) + .build(); } } diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java index 10dd1512ea..cf814b80ae 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesDeploymentsTest.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.eclipse.che.workspace.infrastructure.kubernetes.Constants.POD_STATUS_PHASE_FAILED; @@ -36,8 +37,6 @@ import static org.testng.Assert.fail; import com.google.common.collect.ImmutableMap; import io.fabric8.kubernetes.api.model.ContainerStateBuilder; import io.fabric8.kubernetes.api.model.ContainerStatus; -import io.fabric8.kubernetes.api.model.DoneableEvent; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.Event; import io.fabric8.kubernetes.api.model.EventList; import io.fabric8.kubernetes.api.model.LabelSelector; @@ -49,7 +48,6 @@ import io.fabric8.kubernetes.api.model.PodStatus; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentList; import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; @@ -61,6 +59,7 @@ import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.PodResource; import io.fabric8.kubernetes.client.dsl.Resource; import io.fabric8.kubernetes.client.dsl.RollableScalableResource; +import io.fabric8.kubernetes.client.dsl.V1APIGroupDSL; import java.lang.reflect.Field; import java.util.Calendar; import java.util.Date; @@ -98,22 +97,14 @@ public class KubernetesDeploymentsTest { @Mock private AppsAPIGroupDSL apps; @Mock - private MixedOperation< - Deployment, - DeploymentList, - DoneableDeployment, - RollableScalableResource> + private MixedOperation> deploymentsMixedOperation; @Mock - private NonNamespaceOperation< - Deployment, - DeploymentList, - DoneableDeployment, - RollableScalableResource> + private NonNamespaceOperation> deploymentsNamespaceOperation; - @Mock private RollableScalableResource deploymentResource; + @Mock private RollableScalableResource deploymentResource; @Mock private Deployment deployment; @Mock private ObjectMeta deploymentMetadata; @Mock private DeploymentSpec deploymentSpec; @@ -121,7 +112,7 @@ public class KubernetesDeploymentsTest { // Pod Mocks @Mock private Pod pod; @Mock private PodStatus status; - @Mock private PodResource podResource; + @Mock private PodResource podResource; @Mock private ObjectMeta metadata; @Mock private MixedOperation podsMixedOperation; @Mock private NonNamespaceOperation podsNamespaceOperation; @@ -133,15 +124,13 @@ public class KubernetesDeploymentsTest { @Mock private ObjectReference objectReference; @Mock private PodEventHandler podEventHandler; - @Mock - private MixedOperation> - eventMixedOperation; + @Mock private MixedOperation> eventMixedOperation; @Mock - private NonNamespaceOperation> - eventNamespaceMixedOperation; + private NonNamespaceOperation> eventNamespaceMixedOperation; @Captor private ArgumentCaptor> eventWatcherCaptor; + @Mock private V1APIGroupDSL v1APIGroupDSL; private KubernetesDeployments kubernetesDeployments; @@ -177,7 +166,8 @@ public class KubernetesDeploymentsTest { // Model DSL: client.events().inNamespace(...).watch(...) // event.getInvolvedObject().getKind() - when(kubernetesClient.events()).thenReturn(eventMixedOperation); + when(kubernetesClient.v1()).thenReturn(v1APIGroupDSL); + when(v1APIGroupDSL.events()).thenReturn(eventMixedOperation); when(eventMixedOperation.inNamespace(any())).thenReturn(eventNamespaceMixedOperation); lenient().when(event.getInvolvedObject()).thenReturn(objectReference); lenient().when(event.getMetadata()).thenReturn(new ObjectMeta()); @@ -488,7 +478,7 @@ public class KubernetesDeploymentsTest { doReturn(POD_NAME).when(metadata).getName(); doReturn(Boolean.FALSE).when(podResource).delete(); - doReturn(podResource).when(podResource).withPropagationPolicy(eq("Background")); + doReturn(podResource).when(podResource).withPropagationPolicy(eq(BACKGROUND)); Watch watch = mock(Watch.class); doReturn(watch).when(podResource).watch(any()); @@ -503,7 +493,7 @@ public class KubernetesDeploymentsTest { public void testDeletePodThrowingKubernetesClientExceptionShouldCloseWatch() throws Exception { final String POD_NAME = "nonExistingPod"; doReturn(POD_NAME).when(metadata).getName(); - doReturn(podResource).when(podResource).withPropagationPolicy(eq("Background")); + doReturn(podResource).when(podResource).withPropagationPolicy(eq(BACKGROUND)); doThrow(KubernetesClientException.class).when(podResource).delete(); Watch watch = mock(Watch.class); doReturn(watch).when(podResource).watch(any()); @@ -524,8 +514,8 @@ public class KubernetesDeploymentsTest { public void testDeleteNonExistingDeploymentBeforeWatch() throws Exception { final String DEPLOYMENT_NAME = "nonExistingPod"; doReturn(DEPLOYMENT_NAME).when(deploymentMetadata).getName(); - doReturn(podResource).when(podResource).withPropagationPolicy(eq("Background")); - doReturn(deploymentResource).when(deploymentResource).withPropagationPolicy(eq("Background")); + doReturn(podResource).when(podResource).withPropagationPolicy(eq(BACKGROUND)); + doReturn(deploymentResource).when(deploymentResource).withPropagationPolicy(eq(BACKGROUND)); doReturn(Boolean.FALSE).when(deploymentResource).delete(); Watch watch = mock(Watch.class); doReturn(watch).when(podResource).watch(any()); @@ -544,7 +534,7 @@ public class KubernetesDeploymentsTest { doReturn(DEPLOYMENT_NAME).when(deploymentMetadata).getName(); doThrow(KubernetesClientException.class).when(deploymentResource).delete(); - doReturn(deploymentResource).when(deploymentResource).withPropagationPolicy(eq("Background")); + doReturn(deploymentResource).when(deploymentResource).withPropagationPolicy(eq(BACKGROUND)); Watch watch = mock(Watch.class); doReturn(watch).when(podResource).watch(any()); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java index 970f432ba0..2b680afaf0 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceFactoryTest.java @@ -37,19 +37,17 @@ import static org.testng.Assert.assertTrue; import ch.qos.logback.classic.spi.LoggingEvent; import ch.qos.logback.core.Appender; import com.google.common.collect.ImmutableMap; -import io.fabric8.kubernetes.api.model.DoneableNamespace; import io.fabric8.kubernetes.api.model.Namespace; import io.fabric8.kubernetes.api.model.NamespaceBuilder; import io.fabric8.kubernetes.api.model.NamespaceList; import io.fabric8.kubernetes.api.model.ServiceAccountList; import io.fabric8.kubernetes.api.model.Status; +import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBuilder; import io.fabric8.kubernetes.api.model.rbac.Role; import io.fabric8.kubernetes.api.model.rbac.RoleBindingList; import io.fabric8.kubernetes.api.model.rbac.RoleList; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; -import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; @@ -118,19 +116,15 @@ public class KubernetesNamespaceFactoryTest { @Mock Appender mockedAppender; @Mock - private NonNamespaceOperation< - Namespace, NamespaceList, DoneableNamespace, Resource> - namespaceOperation; + private NonNamespaceOperation> namespaceOperation; - @Mock private Resource namespaceResource; + @Mock private Resource namespaceResource; private KubernetesServer serverMock; private KubernetesNamespaceFactory namespaceFactory; - @Mock - private FilterWatchListDeletable> - namespaceListResource; + @Mock private FilterWatchListDeletable namespaceListResource; @Mock private NamespaceList namespaceList; @@ -771,11 +765,12 @@ public class KubernetesNamespaceFactoryTest { k8sClient .rbac() .clusterRoles() - .createOrReplaceWithNew() - .withNewMetadata() - .withName(cr) - .endMetadata() - .done()); + .createOrReplace( + new ClusterRoleBuilder() + .withNewMetadata() + .withName(cr) + .endMetadata() + .build())); // when RuntimeIdentity identity = @@ -1417,7 +1412,7 @@ public class KubernetesNamespaceFactoryTest { private void prepareNamespaceToBeFoundByName(String name, Namespace namespace) throws Exception { @SuppressWarnings("unchecked") - Resource getNamespaceByNameOperation = mock(Resource.class); + Resource getNamespaceByNameOperation = mock(Resource.class); when(namespaceOperation.withName(name)).thenReturn(getNamespaceByNameOperation); when(getNamespaceByNameOperation.get()).thenReturn(namespace); @@ -1425,7 +1420,7 @@ public class KubernetesNamespaceFactoryTest { private void throwOnTryToGetNamespaceByName(String namespaceName, Throwable e) throws Exception { @SuppressWarnings("unchecked") - Resource getNamespaceByNameOperation = mock(Resource.class); + Resource getNamespaceByNameOperation = mock(Resource.class); when(namespaceOperation.withName(namespaceName)).thenReturn(getNamespaceByNameOperation); when(getNamespaceByNameOperation.get()).thenThrow(e); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceTest.java index e08b388ee4..730f9364d7 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesNamespaceTest.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -26,11 +27,8 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import io.fabric8.kubernetes.api.model.DoneableNamespace; -import io.fabric8.kubernetes.api.model.DoneableServiceAccount; import io.fabric8.kubernetes.api.model.Namespace; import io.fabric8.kubernetes.api.model.NamespaceBuilder; -import io.fabric8.kubernetes.api.model.NamespaceFluent.MetadataNested; import io.fabric8.kubernetes.api.model.ServiceAccount; import io.fabric8.kubernetes.api.model.Status; import io.fabric8.kubernetes.client.KubernetesClient; @@ -38,6 +36,7 @@ import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.Watch; import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.Watcher.Action; +import io.fabric8.kubernetes.client.WatcherException; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; @@ -51,6 +50,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.stubbing.Answer; import org.mockito.testng.MockitoTestNGListener; +import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -77,7 +77,7 @@ public class KubernetesNamespaceTest { @Mock private Executor executor; @Mock private KubernetesClient kubernetesClient; @Mock private NonNamespaceOperation namespaceOperation; - @Mock private Resource serviceAccountResource; + @Mock private Resource serviceAccountResource; private KubernetesNamespace k8sNamespace; @@ -111,10 +111,6 @@ public class KubernetesNamespaceTest { @Test public void testKubernetesNamespacePreparingWhenNamespaceExists() throws Exception { // given - MetadataNested namespaceMeta = - prepareCreateNamespaceRequest( - new NamespaceBuilder().withNewMetadata().withName(NAMESPACE).endMetadata().build()); - prepareNamespace(NAMESPACE); KubernetesNamespace namespace = new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID); @@ -123,15 +119,12 @@ public class KubernetesNamespaceTest { namespace.prepare(true, Map.of()); // then - verify(namespaceMeta, never()).withName(NAMESPACE); + verify(namespaceOperation, never()).create(any(Namespace.class)); } @Test public void testKubernetesNamespacePreparingCreationWhenNamespaceDoesNotExist() throws Exception { // given - MetadataNested namespaceMeta = - prepareCreateNamespaceRequest( - new NamespaceBuilder().withNewMetadata().withName(NAMESPACE).endMetadata().build()); Resource resource = prepareNamespaceResource(NAMESPACE); doThrow(new KubernetesClientException("error", 403, null)).when(resource).get(); @@ -142,7 +135,9 @@ public class KubernetesNamespaceTest { namespace.prepare(true, Map.of()); // then - verify(namespaceMeta).withName(NAMESPACE); + ArgumentCaptor captor = ArgumentCaptor.forClass(Namespace.class); + verify(namespaceOperation).create(captor.capture()); + Assert.assertEquals(captor.getValue().getMetadata().getName(), NAMESPACE); } @Test(expectedExceptions = InfrastructureException.class) @@ -196,7 +191,6 @@ public class KubernetesNamespaceTest { @Test(expectedExceptions = InfrastructureException.class) public void testThrowsInfrastructureExceptionWhenFailedToGetNamespaceServiceAccounts() throws Exception { - prepareCreateNamespaceRequest(); final Resource resource = prepareNamespaceResource(NAMESPACE); doThrow(new KubernetesClientException("error", 403, null)).when(resource).get(); doThrow(KubernetesClientException.class).when(kubernetesClient).serviceAccounts(); @@ -208,7 +202,6 @@ public class KubernetesNamespaceTest { @Test(expectedExceptions = InfrastructureException.class) public void testThrowsInfrastructureExceptionWhenServiceAccountEventNotPublished() throws Exception { - prepareCreateNamespaceRequest(); final Resource resource = prepareNamespaceResource(NAMESPACE); doThrow(new KubernetesClientException("error", 403, null)).when(resource).get(); when(serviceAccountResource.get()).thenReturn(null); @@ -219,7 +212,6 @@ public class KubernetesNamespaceTest { @Test(expectedExceptions = InfrastructureException.class) public void testThrowsInfrastructureExceptionWhenWatcherClosed() throws Exception { - prepareCreateNamespaceRequest(); final Resource resource = prepareNamespaceResource(NAMESPACE); doThrow(new KubernetesClientException("error", 403, null)).when(resource).get(); when(serviceAccountResource.get()).thenReturn(null); @@ -227,7 +219,7 @@ public class KubernetesNamespaceTest { (Answer) invocation -> { final Watcher watcher = invocation.getArgument(0); - watcher.onClose(mock(KubernetesClientException.class)); + watcher.onClose(mock(WatcherException.class)); return mock(Watch.class); }) .when(serviceAccountResource) @@ -239,9 +231,6 @@ public class KubernetesNamespaceTest { @Test public void testStopsWaitingServiceAccountEventJustAfterEventReceived() throws Exception { - prepareCreateNamespaceRequest(); - prepareCreateNamespaceRequest( - new NamespaceBuilder().withNewMetadata().withName(NAMESPACE).endMetadata().build()); final Resource resource = prepareNamespaceResource(NAMESPACE); doThrow(new KubernetesClientException("error", 403, null)).when(resource).get(); @@ -455,29 +444,13 @@ public class KubernetesNamespaceTest { verify(nonNamespaceOperation).createOrReplace(namespace); } - private MetadataNested prepareCreateNamespaceRequest() { - return prepareCreateNamespaceRequest(new NamespaceBuilder().build()); - } - - private MetadataNested prepareCreateNamespaceRequest(Namespace ns) { - DoneableNamespace namespace = mock(DoneableNamespace.class); - MetadataNested metadataNested = mock(MetadataNested.class); - - lenient().doReturn(namespace).when(namespaceOperation).createNew(); - lenient().doReturn(metadataNested).when(namespace).withNewMetadata(); - lenient().doReturn(metadataNested).when(metadataNested).withName(anyString()); - lenient().doReturn(namespace).when(metadataNested).endMetadata(); - lenient().doReturn(ns).when(namespace).done(); - return metadataNested; - } - private Resource prepareNamespaceResource(String namespaceName) { Resource namespaceResource = mock(Resource.class); doReturn(namespaceResource).when(namespaceOperation).withName(namespaceName); lenient() .doReturn(namespaceResource) .when(namespaceResource) - .withPropagationPolicy(eq("Background")); + .withPropagationPolicy(eq(BACKGROUND)); when(namespaceResource.get()) .thenReturn( new NamespaceBuilder().withNewMetadata().withName(namespaceName).endMetadata().build()); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecretsTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecretsTest.java index 3a439b7ef4..4d23a5a3f5 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecretsTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/KubernetesSecretsTest.java @@ -11,6 +11,7 @@ */ package org.eclipse.che.workspace.infrastructure.kubernetes.namespace; +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.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -19,12 +20,10 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; -import io.fabric8.kubernetes.api.model.DoneableSecret; import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.api.model.SecretList; import io.fabric8.kubernetes.client.KubernetesClient; -import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; +import io.fabric8.kubernetes.client.dsl.EditReplacePatchDeletable; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; @@ -50,18 +49,12 @@ public class KubernetesSecretsTest { @Mock private KubernetesClient client; @Mock private KubernetesClientFactory clientFactory; - @Mock - private MixedOperation> - secretsMixedOperation; + @Mock private MixedOperation> secretsMixedOperation; - @Mock - private NonNamespaceOperation< - Secret, SecretList, DoneableSecret, Resource> - nonNamespaceOperation; + @Mock private NonNamespaceOperation> nonNamespaceOperation; - @Mock - private FilterWatchListDeletable> - deletableList; + @Mock private FilterWatchListDeletable deletableList; + @Mock private EditReplacePatchDeletable deletableSecret; private KubernetesSecrets kubernetesSecrets; @@ -74,7 +67,7 @@ public class KubernetesSecretsTest { when(client.secrets()).thenReturn(secretsMixedOperation); lenient().when(secretsMixedOperation.inNamespace(any())).thenReturn(nonNamespaceOperation); lenient().when(nonNamespaceOperation.withLabel(any(), any())).thenReturn(deletableList); - lenient().doReturn(deletableList).when(deletableList).withPropagationPolicy(eq("Background")); + lenient().doReturn(deletableSecret).when(deletableList).withPropagationPolicy(eq(BACKGROUND)); } @Test @@ -94,6 +87,7 @@ public class KubernetesSecretsTest { verify(secretsMixedOperation).inNamespace(NAMESPACE); verify(nonNamespaceOperation).withLabel(CHE_WORKSPACE_ID_LABEL, WORKSPACE_ID); - verify(deletableList).delete(); + verify(deletableList).withPropagationPolicy(eq(BACKGROUND)); + verify(deletableSecret).delete(); } } diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/log/ContainerLogWatchTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/log/ContainerLogWatchTest.java index 9267e80a8f..7b9761ec7d 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/log/ContainerLogWatchTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/namespace/log/ContainerLogWatchTest.java @@ -20,11 +20,17 @@ import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; +import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.PodList; import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.dsl.ContainerResource; +import io.fabric8.kubernetes.client.dsl.ExecWatch; import io.fabric8.kubernetes.client.dsl.LogWatch; -import io.fabric8.kubernetes.client.dsl.internal.PodOperationsImpl; +import io.fabric8.kubernetes.client.dsl.MixedOperation; +import io.fabric8.kubernetes.client.dsl.PodResource; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.concurrent.CountDownLatch; @@ -51,7 +57,22 @@ public class ContainerLogWatchTest { @Mock PodLogHandler podLogHandler; - @Mock PodOperationsImpl pods; + @Mock MixedOperation> pods; + @Mock PodResource podResource; + + @Mock + ContainerResource< + LogWatch, + InputStream, + PipedOutputStream, + OutputStream, + PipedInputStream, + String, + ExecWatch, + Boolean, + InputStream, + Boolean> + containerResource; LogWatchMock logWatch; @@ -61,9 +82,9 @@ public class ContainerLogWatchTest { when(client.pods()).thenReturn(pods); when(pods.inNamespace(namespace)).thenReturn(pods); - when(pods.withName(podname)).thenReturn(pods); - when(pods.inContainer(container)).thenReturn(pods); - when(pods.watchLog()).thenReturn(logWatch); + when(pods.withName(podname)).thenReturn(podResource); + when(podResource.inContainer(container)).thenReturn(containerResource); + when(containerResource.watchLog()).thenReturn(logWatch); } @Test @@ -241,7 +262,7 @@ public class ContainerLogWatchTest { .handle("message", container); // return error message logwatch first and regular message logwatch on second call - when(pods.watchLog()).thenReturn(logWatch).thenReturn(logWatchRegularMessage); + when(containerResource.watchLog()).thenReturn(logWatch).thenReturn(logWatchRegularMessage); ContainerLogWatch clw = new ContainerLogWatch( @@ -295,7 +316,7 @@ public class ContainerLogWatchTest { .handle("message", container); // return null stream first and regular message stream on second call - when(pods.watchLog()).thenReturn(logWatch).thenReturn(logWatchRegularMessage); + when(containerResource.watchLog()).thenReturn(logWatch).thenReturn(logWatchRegularMessage); ContainerLogWatch clw = new ContainerLogWatch( diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptorTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptorTest.java index 002b829d06..412cb30baf 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptorTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodInterceptorTest.java @@ -12,6 +12,7 @@ package org.eclipse.che.workspace.infrastructure.kubernetes.provision; import static com.google.common.collect.ImmutableMap.of; +import static io.fabric8.kubernetes.api.model.DeletionPropagation.BACKGROUND; import static java.util.Collections.emptyMap; import static java.util.UUID.randomUUID; import static org.eclipse.che.api.workspace.shared.Constants.ASYNC_PERSIST_ATTRIBUTE; @@ -24,17 +25,13 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import com.google.common.collect.ImmutableMap; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.Pod; -import io.fabric8.kubernetes.api.model.PodList; import io.fabric8.kubernetes.api.model.apps.Deployment; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; -import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; +import io.fabric8.kubernetes.client.dsl.EditReplacePatchDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.PodResource; @@ -60,13 +57,13 @@ public class AsyncStoragePodInterceptorTest { @Mock private RuntimeIdentity identity; @Mock private KubernetesClientFactory clientFactory; @Mock private KubernetesClient kubernetesClient; - @Mock private RollableScalableResource deploymentResource; - @Mock private PodResource podResource; + @Mock private RollableScalableResource deploymentResource; + @Mock private PodResource podResource; @Mock private MixedOperation mixedOperation; @Mock private MixedOperation mixedOperationPod; @Mock private NonNamespaceOperation namespaceOperation; @Mock private NonNamespaceOperation namespacePodOperation; - @Mock private FilterWatchListDeletable> deletable; + @Mock private EditReplacePatchDeletable deletable; @Mock private AppsAPIGroupDSL apps; private AsyncStoragePodInterceptor asyncStoragePodInterceptor; @@ -156,7 +153,7 @@ public class AsyncStoragePodInterceptorTest { deployment.setMetadata(meta); when(deploymentResource.get()).thenReturn(deployment); - when(deploymentResource.withPropagationPolicy("Background")).thenReturn(deletable); + when(deploymentResource.withPropagationPolicy(BACKGROUND)).thenReturn(deletable); Watch watch = mock(Watch.class); when(deploymentResource.watch(any())).thenReturn(watch); @@ -192,7 +189,7 @@ public class AsyncStoragePodInterceptorTest { deployment.setMetadata(meta); when(deploymentResource.get()).thenReturn(deployment); - when(deploymentResource.withPropagationPolicy("Background")).thenReturn(deletable); + when(deploymentResource.withPropagationPolicy(BACKGROUND)).thenReturn(deletable); Watch watch = mock(Watch.class); when(deploymentResource.watch(any())).thenReturn(watch); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcherTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcherTest.java index 1b3b377b1c..2680702e33 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcherTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStoragePodWatcherTest.java @@ -25,11 +25,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import io.fabric8.kubernetes.api.model.DoneablePod; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.apps.Deployment; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; import io.fabric8.kubernetes.client.dsl.MixedOperation; @@ -67,10 +65,10 @@ public class AsyncStoragePodWatcherTest { @Mock private PreferenceManager preferenceManager; @Mock private WorkspaceRuntimes runtimes; @Mock private KubernetesClient kubernetesClient; - @Mock private RollableScalableResource deploymentResource; + @Mock private RollableScalableResource deploymentResource; @Mock private MixedOperation mixedOperation; @Mock private NonNamespaceOperation namespaceOperation; - @Mock private PodResource podResource; + @Mock private PodResource podResource; @Mock private MixedOperation mixedOperationPod; @Mock private NonNamespaceOperation namespacePodOperation; @Mock private UserImpl user; diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisionerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisionerTest.java index 376ce45bca..62ca97de8c 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisionerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/AsyncStorageProvisionerTest.java @@ -29,16 +29,11 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import io.fabric8.kubernetes.api.model.ConfigMap; -import io.fabric8.kubernetes.api.model.DoneableConfigMap; -import io.fabric8.kubernetes.api.model.DoneablePersistentVolumeClaim; -import io.fabric8.kubernetes.api.model.DoneablePod; -import io.fabric8.kubernetes.api.model.DoneableService; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.PersistentVolumeClaim; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.Service; import io.fabric8.kubernetes.api.model.apps.Deployment; -import io.fabric8.kubernetes.api.model.apps.DoneableDeployment; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL; @@ -81,11 +76,11 @@ public class AsyncStorageProvisionerTest { @Mock private KubernetesClientFactory clientFactory; @Mock private KubernetesClient kubernetesClient; @Mock private SshManager sshManager; - @Mock private Resource pvcResource; - @Mock private Resource mapResource; - @Mock private PodResource podResource; - @Mock private RollableScalableResource deploymentResource; - @Mock private ServiceResource serviceResource; + @Mock private Resource pvcResource; + @Mock private Resource mapResource; + @Mock private PodResource podResource; + @Mock private RollableScalableResource deploymentResource; + @Mock private ServiceResource serviceResource; @Mock private MixedOperation mixedOperationPvc; @Mock private MixedOperation mixedOperationConfigMap; @Mock private MixedOperation mixedOperationPod; diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/KubernetesPreviewUrlCommandProvisionerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/KubernetesPreviewUrlCommandProvisionerTest.java index 64ab0fd8c7..1a4de6614f 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/KubernetesPreviewUrlCommandProvisionerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/provision/KubernetesPreviewUrlCommandProvisionerTest.java @@ -125,7 +125,8 @@ public class KubernetesPreviewUrlCommandProvisionerTest { Service service = new Service(); ServiceSpec spec = new ServiceSpec(); spec.setPorts( - Collections.singletonList(new ServicePort("a", null, port, "TCP", new IntOrString(port)))); + Collections.singletonList( + new ServicePort(null, "a", null, port, "TCP", new IntOrString(port)))); service.setSpec(spec); Mockito.when(mockServices.get()).thenReturn(Collections.singletonList(service)); @@ -158,7 +159,7 @@ public class KubernetesPreviewUrlCommandProvisionerTest { ServiceSpec spec = new ServiceSpec(); spec.setPorts( Collections.singletonList( - new ServicePort(SERVICE_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); + new ServicePort(null, SERVICE_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); service.setSpec(spec); Mockito.when(mockServices.get()).thenReturn(Collections.singletonList(service)); @@ -170,7 +171,8 @@ public class KubernetesPreviewUrlCommandProvisionerTest { new HTTPIngressRuleValue( Collections.singletonList( new HTTPIngressPath( - new IngressBackend("servicename", new IntOrString(SERVICE_PORT_NAME)), + new IngressBackend(null, "servicename", new IntOrString(SERVICE_PORT_NAME)), + null, null)))); ingressSpec.setRules(Collections.singletonList(rule)); ingress.setSpec(ingressSpec); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/IngressServerResolverTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/IngressServerResolverTest.java index 3cf9ff8fbf..2596e7fea0 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/IngressServerResolverTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/IngressServerResolverTest.java @@ -18,6 +18,7 @@ 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; @@ -299,15 +300,17 @@ public class IngressServerResolverTest { new HTTPIngressRuleValue( singletonList( new HTTPIngressPath( - new IngressBackend(name, new IntOrString("8080")), - INGRESS_PATH_PREFIX))))) + new IngressBackend(null, name, new IntOrString("8080")), + INGRESS_PATH_PREFIX, + null))))) .endSpec() .withNewStatus() - .withNewLoadBalancer() - .addNewIngress() - .withIp("127.0.0.1") - .endIngress() - .endLoadBalancer() + .withLoadBalancer( + new LoadBalancerStatusBuilder() + .addNewIngress() + .withIp("127.0.0.1") + .endIngress() + .build()) .endStatus() .build(); } diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposerTest.java index 4a36c6c58d..3a0da8a906 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/PreviewUrlExposerTest.java @@ -100,7 +100,8 @@ public class PreviewUrlExposerTest { service.setMetadata(serviceMeta); ServiceSpec serviceSpec = new ServiceSpec(); serviceSpec.setPorts( - singletonList(new ServicePort(SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); + singletonList( + new ServicePort(null, SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); service.setSpec(serviceSpec); Ingress ingress = new Ingress(); @@ -111,9 +112,9 @@ public class PreviewUrlExposerTest { IngressRule ingressRule = new IngressRule(); ingressRule.setHost("ingresshost"); IngressBackend ingressBackend = - new IngressBackend("servicename", new IntOrString(SERVER_PORT_NAME)); + new IngressBackend(null, "servicename", new IntOrString(SERVER_PORT_NAME)); ingressRule.setHttp( - new HTTPIngressRuleValue(singletonList(new HTTPIngressPath(ingressBackend, null)))); + new HTTPIngressRuleValue(singletonList(new HTTPIngressPath(ingressBackend, null, null)))); ingressSpec.setRules(singletonList(ingressRule)); ingress.setSpec(ingressSpec); @@ -153,7 +154,8 @@ public class PreviewUrlExposerTest { service.setMetadata(serviceMeta); ServiceSpec serviceSpec = new ServiceSpec(); serviceSpec.setPorts( - singletonList(new ServicePort(SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); + singletonList( + new ServicePort(null, SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); service.setSpec(serviceSpec); Map services = new HashMap<>(); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/GatewayServerExposerTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/GatewayServerExposerTest.java index 66670788a5..d6fed2a608 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/GatewayServerExposerTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/server/external/GatewayServerExposerTest.java @@ -47,7 +47,7 @@ public class GatewayServerExposerTest { private final String serviceName = "service"; private final String serverId = "server"; private final ServicePort servicePort = - new ServicePort("portName", 1, 1, "http", new IntOrString(1234)); + new ServicePort(null, "portName", 1, 1, "http", new IntOrString(1234)); private final Map s1attrs = Collections.singletonMap("s1attr", "s1val"); diff --git a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/util/IngressesTest.java b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/util/IngressesTest.java index 39e3ab4b75..b523e98e11 100644 --- a/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/util/IngressesTest.java +++ b/infrastructures/kubernetes/src/test/java/org/eclipse/che/workspace/infrastructure/kubernetes/util/IngressesTest.java @@ -39,7 +39,7 @@ public class IngressesTest { final int PORT = 8080; Service service = createService(SERVER_PORT_NAME, PORT); - Ingress ingress = createIngress(new IngressBackend("servicename", new IntOrString(PORT))); + Ingress ingress = createIngress(new IngressBackend(null, "servicename", new IntOrString(PORT))); Optional foundRule = Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT); @@ -54,7 +54,7 @@ public class IngressesTest { Service service = createService(SERVER_PORT_NAME, PORT); Ingress ingress = - createIngress(new IngressBackend("servicename", new IntOrString(SERVER_PORT_NAME))); + createIngress(new IngressBackend(null, "servicename", new IntOrString(SERVER_PORT_NAME))); Optional foundRule = Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT); @@ -69,7 +69,7 @@ public class IngressesTest { Service service = createService(SERVER_PORT_NAME, PORT); Ingress ingress = - createIngress(new IngressBackend("servicename", new IntOrString("does not exist"))); + createIngress(new IngressBackend(null, "servicename", new IntOrString("does not exist"))); Optional foundRule = Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT); @@ -82,7 +82,7 @@ public class IngressesTest { final int PORT = 8080; Service service = createService(SERVER_PORT_NAME, PORT); - Ingress ingress = createIngress(new IngressBackend("servicename", new IntOrString(666))); + Ingress ingress = createIngress(new IngressBackend(null, "servicename", new IntOrString(666))); Optional foundRule = Ingresses.findIngressRuleForServicePort(singletonList(ingress), service, PORT); @@ -96,7 +96,8 @@ public class IngressesTest { service.setMetadata(serviceMeta); ServiceSpec serviceSpec = new ServiceSpec(); serviceSpec.setPorts( - singletonList(new ServicePort(serverPortName, null, port, "TCP", new IntOrString(port)))); + singletonList( + new ServicePort(null, serverPortName, null, port, "TCP", new IntOrString(port)))); service.setSpec(serviceSpec); return service; } @@ -110,7 +111,7 @@ public class IngressesTest { IngressRule ingressRule = new IngressRule(); ingressRule.setHost("ingresshost"); ingressRule.setHttp( - new HTTPIngressRuleValue(singletonList(new HTTPIngressPath(backend, null)))); + new HTTPIngressRuleValue(singletonList(new HTTPIngressPath(backend, null, null)))); ingressSpec.setRules(singletonList(ingressRule)); ingress.setSpec(ingressSpec); return ingress; diff --git a/infrastructures/openshift/pom.xml b/infrastructures/openshift/pom.xml index a3c3b54afe..c407fd8332 100644 --- a/infrastructures/openshift/pom.xml +++ b/infrastructures/openshift/pom.xml @@ -44,12 +44,24 @@ io.fabric8 - kubernetes-model + kubernetes-model-apps + + + io.fabric8 + kubernetes-model-core + + + io.fabric8 + kubernetes-model-extensions io.fabric8 openshift-client + + io.fabric8 + openshift-model + io.opentracing opentracing-api diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProject.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProject.java index 4ca6cbda4b..a911c4a80c 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProject.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProject.java @@ -17,6 +17,7 @@ import com.google.common.annotations.VisibleForTesting; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.openshift.api.model.Project; +import io.fabric8.openshift.api.model.ProjectRequestBuilder; import io.fabric8.openshift.api.model.Route; import io.fabric8.openshift.client.OpenShiftClient; import java.util.Map; @@ -166,11 +167,12 @@ public class OpenShiftProject extends KubernetesNamespace { try { osClient .projectrequests() - .createNew() - .withNewMetadata() - .withName(projectName) - .endMetadata() - .done(); + .create( + new ProjectRequestBuilder() + .withNewMetadata() + .withName(projectName) + .endMetadata() + .build()); } catch (KubernetesClientException e) { if (e.getCode() == 403) { LOG.error( diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftWorkspaceServiceAccount.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftWorkspaceServiceAccount.java index 7546005371..59c598b30d 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftWorkspaceServiceAccount.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftWorkspaceServiceAccount.java @@ -12,12 +12,12 @@ package org.eclipse.che.workspace.infrastructure.openshift.project; import io.fabric8.kubernetes.api.model.ObjectReferenceBuilder; -import io.fabric8.openshift.api.model.OpenshiftRole; -import io.fabric8.openshift.api.model.OpenshiftRoleBinding; -import io.fabric8.openshift.api.model.OpenshiftRoleBindingBuilder; -import io.fabric8.openshift.api.model.OpenshiftRoleBindingFluent; -import io.fabric8.openshift.api.model.OpenshiftRoleBuilder; import io.fabric8.openshift.api.model.PolicyRuleBuilder; +import io.fabric8.openshift.api.model.Role; +import io.fabric8.openshift.api.model.RoleBinding; +import io.fabric8.openshift.api.model.RoleBindingBuilder; +import io.fabric8.openshift.api.model.RoleBindingFluent; +import io.fabric8.openshift.api.model.RoleBuilder; import io.fabric8.openshift.client.OpenShiftClient; import java.util.List; import java.util.Set; @@ -34,7 +34,7 @@ import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftClientFactory * org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesWorkspaceServiceAccount */ class OpenShiftWorkspaceServiceAccount - extends AbstractWorkspaceServiceAccount { + extends AbstractWorkspaceServiceAccount { OpenShiftWorkspaceServiceAccount( String workspaceId, @@ -54,9 +54,9 @@ class OpenShiftWorkspaceServiceAccount } @Override - protected OpenshiftRole buildRole( + protected Role buildRole( String name, List resources, List apiGroups, List verbs) { - return new OpenshiftRoleBuilder() + return new RoleBuilder() .withNewMetadata() .withName(name) .endMetadata() @@ -70,10 +70,10 @@ class OpenShiftWorkspaceServiceAccount } @Override - protected OpenshiftRoleBinding createRoleBinding( + protected RoleBinding createRoleBinding( String roleName, String bindingName, boolean clusterRole) { - OpenshiftRoleBindingFluent.RoleRefNested bld = - new OpenshiftRoleBindingBuilder() + RoleBindingFluent.RoleRefNested bld = + new RoleBindingBuilder() .withNewMetadata() .withName(bindingName) .withNamespace(namespace) diff --git a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisioner.java b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisioner.java index 2b55aa3a98..1121531af4 100644 --- a/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisioner.java +++ b/infrastructures/openshift/src/main/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisioner.java @@ -12,11 +12,11 @@ package org.eclipse.che.workspace.infrastructure.openshift.provision; import io.fabric8.kubernetes.api.model.ObjectReferenceBuilder; -import io.fabric8.openshift.api.model.OpenshiftRole; -import io.fabric8.openshift.api.model.OpenshiftRoleBinding; -import io.fabric8.openshift.api.model.OpenshiftRoleBindingBuilder; -import io.fabric8.openshift.api.model.OpenshiftRoleBuilder; import io.fabric8.openshift.api.model.PolicyRuleBuilder; +import io.fabric8.openshift.api.model.Role; +import io.fabric8.openshift.api.model.RoleBinding; +import io.fabric8.openshift.api.model.RoleBindingBuilder; +import io.fabric8.openshift.api.model.RoleBuilder; import io.fabric8.openshift.client.OpenShiftClient; import javax.inject.Inject; import javax.inject.Named; @@ -75,8 +75,8 @@ public class OpenShiftStopWorkspaceRoleProvisioner { } } - protected OpenshiftRole createStopWorkspacesRole(String name) { - return new OpenshiftRoleBuilder() + protected Role createStopWorkspacesRole(String name) { + return new RoleBuilder() .withNewMetadata() .withName(name) .endMetadata() @@ -104,8 +104,8 @@ public class OpenShiftStopWorkspaceRoleProvisioner { .build(); } - protected OpenshiftRoleBinding createStopWorkspacesRoleBinding(String projectName) { - return new OpenshiftRoleBindingBuilder() + protected RoleBinding createStopWorkspacesRoleBinding(String projectName) { + return new RoleBindingBuilder() .withNewMetadata() .withName("che-workspace-stop") .withNamespace(projectName) diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectFactoryTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectFactoryTest.java index 59c59e80d4..c241f1d88c 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectFactoryTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectFactoryTest.java @@ -37,16 +37,13 @@ import static org.testng.Assert.assertNull; import com.google.common.collect.ImmutableMap; import io.fabric8.kubernetes.api.model.Status; import io.fabric8.kubernetes.client.KubernetesClientException; -import io.fabric8.kubernetes.client.Watch; -import io.fabric8.kubernetes.client.Watcher; import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; -import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; -import io.fabric8.openshift.api.model.DoneableProject; import io.fabric8.openshift.api.model.Project; import io.fabric8.openshift.api.model.ProjectBuilder; import io.fabric8.openshift.api.model.ProjectList; import io.fabric8.openshift.client.OpenShiftClient; +import io.fabric8.openshift.client.dsl.ProjectOperation; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -102,20 +99,15 @@ public class OpenShiftProjectFactoryTest { @Mock private PreferenceManager preferenceManager; @Mock private KubernetesSharedPool pool; - @Mock - private NonNamespaceOperation< - Project, ProjectList, DoneableProject, Resource> - projectOperation; + @Mock private ProjectOperation projectOperation; - @Mock private Resource projectResource; + @Mock private Resource projectResource; @Mock private OpenShiftClient osClient; private OpenShiftProjectFactory projectFactory; - @Mock - private FilterWatchListDeletable> - projectListResource; + @Mock private FilterWatchListDeletable projectListResource; @Mock private ProjectList projectList; @@ -856,7 +848,7 @@ public class OpenShiftProjectFactoryTest { private void prepareNamespaceToBeFoundByName(String name, Project project) throws Exception { @SuppressWarnings("unchecked") - Resource getProjectByNameOperation = mock(Resource.class); + Resource getProjectByNameOperation = mock(Resource.class); when(projectOperation.withName(name)).thenReturn(getProjectByNameOperation); when(getProjectByNameOperation.get()).thenReturn(project); @@ -865,7 +857,7 @@ public class OpenShiftProjectFactoryTest { private void throwOnTryToGetProjectByName(String name, KubernetesClientException e) throws Exception { @SuppressWarnings("unchecked") - Resource getProjectByNameOperation = mock(Resource.class); + Resource getProjectByNameOperation = mock(Resource.class); when(projectOperation.withName(name)).thenReturn(getProjectByNameOperation); when(getProjectByNameOperation.get()).thenThrow(e); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectTest.java index 08fa19f217..6340ce5641 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/project/OpenShiftProjectTest.java @@ -25,7 +25,6 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; -import io.fabric8.kubernetes.api.model.DoneableServiceAccount; import io.fabric8.kubernetes.api.model.Namespace; import io.fabric8.kubernetes.api.model.NamespaceBuilder; import io.fabric8.kubernetes.api.model.ServiceAccount; @@ -35,11 +34,12 @@ import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; -import io.fabric8.openshift.api.model.DoneableProjectRequest; import io.fabric8.openshift.api.model.Project; import io.fabric8.openshift.api.model.ProjectBuilder; +import io.fabric8.openshift.api.model.ProjectRequest; import io.fabric8.openshift.api.model.ProjectRequestFluent.MetadataNested; import io.fabric8.openshift.client.OpenShiftClient; +import io.fabric8.openshift.client.dsl.ProjectOperation; import io.fabric8.openshift.client.dsl.ProjectRequestOperation; import java.util.Map; import java.util.concurrent.Executor; @@ -55,6 +55,7 @@ import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftClientFactory import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.testng.MockitoTestNGListener; +import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; @@ -82,7 +83,9 @@ public class OpenShiftProjectTest { @Mock private Executor executor; @Mock private OpenShiftClient openShiftClient; @Mock private KubernetesClient kubernetesClient; - @Mock private Resource serviceAccountResource; + @Mock private Resource serviceAccountResource; + @Mock private ProjectRequestOperation projectRequestOperation; + @Mock private MetadataNested metadataNested; private OpenShiftProject openShiftProject; @@ -99,6 +102,8 @@ public class OpenShiftProjectTest { lenient().when(mixedOperation.inNamespace(anyString())).thenReturn(namespaceOperation); lenient().when(namespaceOperation.withName(anyString())).thenReturn(serviceAccountResource); lenient().when(serviceAccountResource.get()).thenReturn(mock(ServiceAccount.class)); + lenient().doReturn(projectRequestOperation).when(openShiftClient).projectrequests(); + lenient().doReturn(metadataNested).when(metadataNested).withName(anyString()); openShiftProject = new OpenShiftProject( @@ -118,7 +123,6 @@ public class OpenShiftProjectTest { @Test public void testOpenShiftProjectPreparingWhenProjectExists() throws Exception { // given - MetadataNested projectMeta = prepareProjectRequest(); prepareNamespaceGet(PROJECT_NAME); prepareProject(PROJECT_NAME); @@ -129,13 +133,12 @@ public class OpenShiftProjectTest { project.prepare(true, Map.of()); // then - verify(projectMeta, never()).withName(PROJECT_NAME); + verify(metadataNested, never()).withName(PROJECT_NAME); } @Test public void testOpenShiftProjectPreparingWhenProjectDoesNotExist() throws Exception { // given - MetadataNested projectMetadata = prepareProjectRequest(); prepareNamespaceGet(PROJECT_NAME); Resource resource = prepareProjectResource(PROJECT_NAME); @@ -147,7 +150,9 @@ public class OpenShiftProjectTest { openShiftProject.prepare(true, Map.of()); // then - verify(projectMetadata).withName(PROJECT_NAME); + ArgumentCaptor captor = ArgumentCaptor.forClass(ProjectRequest.class); + verify(projectRequestOperation).create(captor.capture()); + Assert.assertEquals(captor.getValue().getMetadata().getName(), PROJECT_NAME); } @Test(expectedExceptions = InfrastructureException.class) @@ -365,23 +370,10 @@ public class OpenShiftProjectTest { verify(nonNamespaceOperation).createOrReplace(namespace); } - private MetadataNested prepareProjectRequest() { - ProjectRequestOperation projectRequestOperation = mock(ProjectRequestOperation.class); - DoneableProjectRequest projectRequest = mock(DoneableProjectRequest.class); - MetadataNested metadataNested = mock(MetadataNested.class); - - lenient().doReturn(projectRequestOperation).when(openShiftClient).projectrequests(); - lenient().doReturn(projectRequest).when(projectRequestOperation).createNew(); - lenient().doReturn(metadataNested).when(projectRequest).withNewMetadata(); - lenient().doReturn(metadataNested).when(metadataNested).withName(anyString()); - lenient().doReturn(projectRequest).when(metadataNested).endMetadata(); - return metadataNested; - } - private Resource prepareProjectResource(String projectName) { Resource projectResource = mock(Resource.class); - NonNamespaceOperation projectOperation = mock(NonNamespaceOperation.class); + ProjectOperation projectOperation = mock(ProjectOperation.class); doReturn(projectResource).when(projectOperation).withName(projectName); doReturn(projectOperation).when(openShiftClient).projects(); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftPreviewUrlCommandProvisionerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftPreviewUrlCommandProvisionerTest.java index 47aa2a04da..79d214c01b 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftPreviewUrlCommandProvisionerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftPreviewUrlCommandProvisionerTest.java @@ -131,7 +131,8 @@ public class OpenShiftPreviewUrlCommandProvisionerTest { Service service = new Service(); ServiceSpec spec = new ServiceSpec(); spec.setPorts( - Collections.singletonList(new ServicePort("a", null, port, "TCP", new IntOrString(port)))); + Collections.singletonList( + new ServicePort(null, "a", null, port, "TCP", new IntOrString(port)))); service.setSpec(spec); Mockito.when(mockServices.get()).thenReturn(Collections.singletonList(service)); @@ -163,7 +164,7 @@ public class OpenShiftPreviewUrlCommandProvisionerTest { ServiceSpec spec = new ServiceSpec(); spec.setPorts( Collections.singletonList( - new ServicePort("8080", null, port, "TCP", new IntOrString(port)))); + new ServicePort(null, "8080", null, port, "TCP", new IntOrString(port)))); service.setSpec(spec); Mockito.when(mockServices.get()).thenReturn(Collections.singletonList(service)); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisionerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisionerTest.java index 02d35e7992..3cae99707b 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisionerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenShiftStopWorkspaceRoleProvisionerTest.java @@ -25,15 +25,13 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation; import io.fabric8.kubernetes.client.dsl.Resource; -import io.fabric8.openshift.api.model.DoneableOpenshiftRole; -import io.fabric8.openshift.api.model.DoneableOpenshiftRoleBinding; -import io.fabric8.openshift.api.model.OpenshiftRole; -import io.fabric8.openshift.api.model.OpenshiftRoleBinding; -import io.fabric8.openshift.api.model.OpenshiftRoleBindingBuilder; -import io.fabric8.openshift.api.model.OpenshiftRoleBindingList; -import io.fabric8.openshift.api.model.OpenshiftRoleBuilder; -import io.fabric8.openshift.api.model.OpenshiftRoleList; import io.fabric8.openshift.api.model.PolicyRuleBuilder; +import io.fabric8.openshift.api.model.Role; +import io.fabric8.openshift.api.model.RoleBinding; +import io.fabric8.openshift.api.model.RoleBindingBuilder; +import io.fabric8.openshift.api.model.RoleBindingList; +import io.fabric8.openshift.api.model.RoleBuilder; +import io.fabric8.openshift.api.model.RoleList; import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.che.api.workspace.server.spi.InfrastructureException; import org.eclipse.che.workspace.infrastructure.kubernetes.environment.CheInstallationLocation; @@ -59,45 +57,25 @@ public class OpenShiftStopWorkspaceRoleProvisionerTest { @Mock private OpenShiftClient osClient; @Mock private KubernetesClient kubernetesClient; - @Mock - private MixedOperation< - OpenshiftRole, - OpenshiftRoleList, - DoneableOpenshiftRole, - Resource> - mixedRoleOperation; + @Mock private MixedOperation> mixedRoleOperation; @Mock - private MixedOperation< - OpenshiftRoleBinding, - OpenshiftRoleBindingList, - DoneableOpenshiftRoleBinding, - Resource> + private MixedOperation> mixedRoleBindingOperation; - @Mock - private NonNamespaceOperation< - OpenshiftRole, - OpenshiftRoleList, - DoneableOpenshiftRole, - Resource> - nonNamespaceRoleOperation; + @Mock private NonNamespaceOperation> nonNamespaceRoleOperation; @Mock - private NonNamespaceOperation< - OpenshiftRoleBinding, - OpenshiftRoleBindingList, - DoneableOpenshiftRoleBinding, - Resource> + private NonNamespaceOperation> nonNamespaceRoleBindingOperation; - @Mock private Resource roleResource; - @Mock private Resource roleBindingResource; - @Mock private OpenshiftRole mockRole; - @Mock private OpenshiftRoleBinding mockRoleBinding; + @Mock private Resource roleResource; + @Mock private Resource roleBindingResource; + @Mock private Role mockRole; + @Mock private RoleBinding mockRoleBinding; - private final OpenshiftRole expectedRole = - new OpenshiftRoleBuilder() + private final Role expectedRole = + new RoleBuilder() .withNewMetadata() .withName("workspace-stop") .endMetadata() @@ -124,8 +102,8 @@ public class OpenShiftStopWorkspaceRoleProvisionerTest { .build()) .build(); - private final OpenshiftRoleBinding expectedRoleBinding = - new OpenshiftRoleBindingBuilder() + private final RoleBinding expectedRoleBinding = + new RoleBindingBuilder() .withNewMetadata() .withName("che-workspace-stop") .withNamespace("developer-che") diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenshiftTrustedCAProvisionerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenshiftTrustedCAProvisionerTest.java index da3c758b5e..4c875a3a88 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenshiftTrustedCAProvisionerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/provision/OpenshiftTrustedCAProvisionerTest.java @@ -23,7 +23,6 @@ import com.google.common.collect.ImmutableMap; import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ConfigMapList; import io.fabric8.kubernetes.api.model.ContainerBuilder; -import io.fabric8.kubernetes.api.model.DoneableConfigMap; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.fabric8.kubernetes.api.model.Pod; @@ -72,16 +71,13 @@ public class OpenshiftTrustedCAProvisionerTest { @Mock private CheInstallationLocation cheInstallationLocation; @Mock - private MixedOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> - cheServerConfigMapGetter1; + private MixedOperation> cheServerConfigMapGetter1; @Mock - private NonNamespaceOperation< - ConfigMap, ConfigMapList, DoneableConfigMap, Resource> + private NonNamespaceOperation> cheServerConfigMapGetter2; - @Mock private Resource cheServerConfigMapResource; + @Mock private Resource cheServerConfigMapResource; @Mock private ConfigMap cheServerConfigMap; @Mock private ObjectMeta cheServerConfigMapMetadata; diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftExternalServerExposerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftExternalServerExposerTest.java index 22d1e45b30..c75b6619db 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftExternalServerExposerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftExternalServerExposerTest.java @@ -50,7 +50,7 @@ public class OpenShiftExternalServerExposerTest { "machine123", "service123", null, - new ServicePort("servicePort", null, null, "TCP", null), + new ServicePort(null, "servicePort", null, null, "TCP", null), servers); // then @@ -82,7 +82,7 @@ public class OpenShiftExternalServerExposerTest { "machine123", "service123", null, - new ServicePort("servicePort", null, null, "TCP", null), + new ServicePort(null, "servicePort", null, null, "TCP", null), servers); // then diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftPreviewUrlExposerTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftPreviewUrlExposerTest.java index 6e73f0d560..4d4a1744f4 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftPreviewUrlExposerTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/server/OpenShiftPreviewUrlExposerTest.java @@ -86,7 +86,8 @@ public class OpenShiftPreviewUrlExposerTest { service.setMetadata(serviceMeta); ServiceSpec serviceSpec = new ServiceSpec(); serviceSpec.setPorts( - singletonList(new ServicePort(SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); + singletonList( + new ServicePort(null, SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); service.setSpec(serviceSpec); Route route = new Route(); @@ -127,7 +128,8 @@ public class OpenShiftPreviewUrlExposerTest { service.setMetadata(serviceMeta); ServiceSpec serviceSpec = new ServiceSpec(); serviceSpec.setPorts( - singletonList(new ServicePort(SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); + singletonList( + new ServicePort(null, SERVER_PORT_NAME, null, PORT, "TCP", new IntOrString(PORT)))); service.setSpec(serviceSpec); Map services = new HashMap<>(); diff --git a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/util/RoutesTest.java b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/util/RoutesTest.java index e503f16329..940719bb0b 100644 --- a/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/util/RoutesTest.java +++ b/infrastructures/openshift/src/test/java/org/eclipse/che/workspace/infrastructure/openshift/util/RoutesTest.java @@ -100,7 +100,7 @@ public class RoutesTest { service.setMetadata(metadata); ServiceSpec spec = new ServiceSpec(); spec.setPorts( - Collections.singletonList(new ServicePort(portString, null, portInt, "TCP", null))); + Collections.singletonList(new ServicePort(null, portString, null, portInt, "TCP", null))); service.setSpec(spec); return service; } diff --git a/pom.xml b/pom.xml index 80b00d2dd1..334adaacaf 100644 --- a/pom.xml +++ b/pom.xml @@ -48,8 +48,7 @@ 1.0 1.2.1 0.3.0 - 2.10.5.1 - 2.10.3 + 2.11.2 1.7.1 2.27.2 4.2.2 @@ -60,7 +59,7 @@ 1.4.196 2.6.0 0.1.54 - 3.12.6 + 3.12.12 1.15.0 1.11 1.19 @@ -69,7 +68,7 @@ 2.6 quay.io/eclipse/che--centos--mysql-57-centos7:latest-e08ee4d43b7356607685b69bde6335e27cf20c020f345b6c6c59400183882764 quay.io/eclipse/che--centos--postgresql-96-centos7:9.6-b681d78125361519180a6ac05242c296f8906c11eab7e207b5ca9a89b6344392 - 4.9.0 + 5.3.1 0.1.3 1.0.0 1.0.0 @@ -143,26 +142,6 @@ jwks-rsa ${com.auth0.jwks-rsa.version} - - com.fasterxml.jackson.core - jackson-annotations - ${com.fasterxml.jackson.core.version} - - - com.fasterxml.jackson.core - jackson-core - ${com.fasterxml.jackson.core.version} - - - com.fasterxml.jackson.core - jackson-databind - ${com.fasterxml.jackson.core.jackson-databind.version} - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${com.fasterxml.jackson.core.version} - com.github.tomakehurst wiremock-jre8-standalone @@ -290,38 +269,6 @@ commons-lang ${commons-lang.version} - - io.fabric8 - kubernetes-client - ${io.fabric8.kubernetes-client} - - - generex - com.github.mifmif - - - - - io.fabric8 - kubernetes-model - ${io.fabric8.kubernetes-client} - - - jackson-module-jaxb-annotations - com.fasterxml.jackson.module - - - - - io.fabric8 - kubernetes-server-mock - ${io.fabric8.kubernetes-client} - - - io.fabric8 - openshift-client - ${io.fabric8.kubernetes-client} - io.github.mweirauch micrometer-jvm-extras @@ -1390,6 +1337,20 @@ testng ${org.testng.version} + + com.fasterxml.jackson + jackson-bom + ${com.fasterxml.jackson.version} + pom + import + + + io.fabric8 + kubernetes-client + ${io.fabric8.kubernetes-client} + pom + import + com.github.kirviq dumbster