chore: Use CheServer client factory to handle Kubernetes operation in a user namespace (#516)

Signed-off-by: Anatolii Bazko <abazko@redhat.com>
dependabot/maven/org.codehaus.plexus-plexus-utils-4.0.0
Anatolii Bazko 2023-05-25 17:20:59 +03:00 committed by GitHub
parent ae4f6a33a5
commit dd873a597b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 304 additions and 446 deletions

View File

@ -43,7 +43,7 @@ import org.eclipse.che.api.factory.server.scm.exception.UnsatisfiedScmPreconditi
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.commons.lang.NameGenerator;
import org.eclipse.che.commons.lang.StringUtils;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
@ -86,13 +86,14 @@ public class KubernetesGitCredentialManager implements GitCredentialManager {
ANNOTATION_DEV_WORKSPACE_MOUNT_PATH, CREDENTIALS_MOUNT_PATH);
private final KubernetesNamespaceFactory namespaceFactory;
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Inject
public KubernetesGitCredentialManager(
KubernetesNamespaceFactory namespaceFactory, KubernetesClientFactory clientFactory) {
KubernetesNamespaceFactory namespaceFactory,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.namespaceFactory = namespaceFactory;
this.clientFactory = clientFactory;
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
}
@Override
@ -100,7 +101,7 @@ public class KubernetesGitCredentialManager implements GitCredentialManager {
throws UnsatisfiedScmPreconditionException, ScmConfigurationPersistenceException {
try {
final String namespace = getFirstNamespace();
final KubernetesClient client = clientFactory.create();
final KubernetesClient client = cheServerKubernetesClientFactory.create();
// to avoid duplicating secrets we try to reuse existing one by matching
// hostname/username if possible, and update it. Otherwise, create new one.
Optional<Secret> existing =

View File

@ -42,7 +42,7 @@ import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.lang.NameGenerator;
import org.eclipse.che.commons.lang.StringUtils;
import org.eclipse.che.commons.subject.Subject;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
@ -69,18 +69,18 @@ public class KubernetesPersonalAccessTokenManager implements PersonalAccessToken
public static final String TOKEN_DATA_FIELD = "token";
private final KubernetesNamespaceFactory namespaceFactory;
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private final ScmPersonalAccessTokenFetcher scmPersonalAccessTokenFetcher;
private final GitCredentialManager gitCredentialManager;
@Inject
public KubernetesPersonalAccessTokenManager(
KubernetesNamespaceFactory namespaceFactory,
KubernetesClientFactory clientFactory,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
ScmPersonalAccessTokenFetcher scmPersonalAccessTokenFetcher,
GitCredentialManager gitCredentialManager) {
this.namespaceFactory = namespaceFactory;
this.clientFactory = clientFactory;
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
this.scmPersonalAccessTokenFetcher = scmPersonalAccessTokenFetcher;
this.gitCredentialManager = gitCredentialManager;
}
@ -119,7 +119,11 @@ public class KubernetesPersonalAccessTokenManager implements PersonalAccessToken
personalAccessToken.getToken().getBytes(StandardCharsets.UTF_8))))
.build();
clientFactory.create().secrets().inNamespace(namespace).createOrReplace(secret);
cheServerKubernetesClientFactory
.create()
.secrets()
.inNamespace(namespace)
.createOrReplace(secret);
} catch (KubernetesClientException | InfrastructureException e) {
throw new ScmConfigurationPersistenceException(e.getMessage(), e);
}
@ -188,7 +192,11 @@ public class KubernetesPersonalAccessTokenManager implements PersonalAccessToken
// be valid. If no valid token can be found, the caller should react in the same way
// as it reacts if no token exists. Usually, that means that process of new token
// retrieval would be initiated.
clientFactory.create().secrets().inNamespace(namespaceMeta.getName()).delete(secret);
cheServerKubernetesClientFactory
.create()
.secrets()
.inNamespace(namespaceMeta.getName())
.delete(secret);
}
}
}

View File

@ -43,7 +43,7 @@ import java.util.HashMap;
import java.util.Map;
import org.eclipse.che.api.factory.server.scm.PersonalAccessToken;
import org.eclipse.che.commons.lang.NameGenerator;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.server.impls.KubernetesNamespaceMetaImpl;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
@ -58,7 +58,7 @@ import org.testng.annotations.Test;
public class KubernetesGitCredentialManagerTest {
@Mock private KubernetesNamespaceFactory namespaceFactory;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Mock private KubernetesClient kubeClient;
@Mock private MixedOperation<Secret, SecretList, Resource<Secret>> secretsMixedOperation;
@ -74,7 +74,7 @@ public class KubernetesGitCredentialManagerTest {
@BeforeMethod
protected void init() {
kubernetesGitCredentialManager =
new KubernetesGitCredentialManager(namespaceFactory, clientFactory);
new KubernetesGitCredentialManager(namespaceFactory, cheServerKubernetesClientFactory);
assertNotNull(this.kubernetesGitCredentialManager);
}
@ -83,7 +83,7 @@ public class KubernetesGitCredentialManagerTest {
KubernetesNamespaceMeta meta = new KubernetesNamespaceMetaImpl("test");
when(namespaceFactory.list()).thenReturn(Collections.singletonList(meta));
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(meta.getName()))).thenReturn(nonNamespaceOperation);
when(nonNamespaceOperation.withLabels(anyMap())).thenReturn(filterWatchDeletable);
@ -113,7 +113,7 @@ public class KubernetesGitCredentialManagerTest {
KubernetesNamespaceMeta meta = new KubernetesNamespaceMetaImpl("test");
when(namespaceFactory.list()).thenReturn(Collections.singletonList(meta));
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(meta.getName()))).thenReturn(nonNamespaceOperation);
when(nonNamespaceOperation.withLabels(anyMap())).thenReturn(filterWatchDeletable);
@ -173,7 +173,7 @@ public class KubernetesGitCredentialManagerTest {
when(namespaceFactory.list()).thenReturn(Collections.singletonList(namespaceMeta));
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(namespaceMeta.getName())))
.thenReturn(nonNamespaceOperation);

View File

@ -45,7 +45,7 @@ import org.eclipse.che.api.factory.server.scm.GitCredentialManager;
import org.eclipse.che.api.factory.server.scm.PersonalAccessToken;
import org.eclipse.che.api.factory.server.scm.ScmPersonalAccessTokenFetcher;
import org.eclipse.che.commons.subject.SubjectImpl;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.server.impls.KubernetesNamespaceMetaImpl;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespace;
@ -64,7 +64,7 @@ import org.testng.annotations.Test;
public class KubernetesPersonalAccessTokenManagerTest {
@Mock private KubernetesNamespaceFactory namespaceFactory;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Mock private ScmPersonalAccessTokenFetcher scmPersonalAccessTokenFetcher;
@Mock private KubernetesClient kubeClient;
@ -80,7 +80,10 @@ public class KubernetesPersonalAccessTokenManagerTest {
protected void init() {
personalAccessTokenManager =
new KubernetesPersonalAccessTokenManager(
namespaceFactory, clientFactory, scmPersonalAccessTokenFetcher, gitCredentialManager);
namespaceFactory,
cheServerKubernetesClientFactory,
scmPersonalAccessTokenFetcher,
gitCredentialManager);
assertNotNull(this.personalAccessTokenManager);
}
@ -123,7 +126,7 @@ public class KubernetesPersonalAccessTokenManagerTest {
KubernetesNamespaceMeta meta = new KubernetesNamespaceMetaImpl("test");
when(namespaceFactory.list()).thenReturn(Collections.singletonList(meta));
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(meta.getName()))).thenReturn(nonNamespaceOperation);
ArgumentCaptor<Secret> captor = ArgumentCaptor.forClass(Secret.class);
@ -259,7 +262,7 @@ public class KubernetesPersonalAccessTokenManagerTest {
when(namespaceFactory.access(eq(null), eq(meta.getName()))).thenReturn(kubernetesnamespace);
when(kubernetesnamespace.secrets()).thenReturn(secrets);
when(scmPersonalAccessTokenFetcher.isValid(any(PersonalAccessToken.class))).thenReturn(false);
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(meta.getName()))).thenReturn(nonNamespaceOperation);
Map<String, String> data1 =
@ -296,7 +299,7 @@ public class KubernetesPersonalAccessTokenManagerTest {
PersonalAccessToken token = invocation.getArgument(0);
return "id2".equals(token.getScmTokenId());
});
when(clientFactory.create()).thenReturn(kubeClient);
when(cheServerKubernetesClientFactory.create()).thenReturn(kubeClient);
when(kubeClient.secrets()).thenReturn(secretsMixedOperation);
when(secretsMixedOperation.inNamespace(eq(meta.getName()))).thenReturn(nonNamespaceOperation);
Map<String, String> data1 =

View File

@ -41,7 +41,6 @@ public class KubernetesInfrastructure extends RuntimeInfrastructure {
private final KubernetesRuntimeContextFactory runtimeContextFactory;
private final KubernetesRuntimeStateCache runtimeStatusesCache;
private final KubernetesNamespaceFactory namespaceFactory;
private final KubernetesClientFactory kubernetesClientFactory;
@Inject
public KubernetesInfrastructure(
@ -49,8 +48,7 @@ public class KubernetesInfrastructure extends RuntimeInfrastructure {
KubernetesRuntimeContextFactory runtimeContextFactory,
Set<InternalEnvironmentProvisioner> internalEnvProvisioners,
KubernetesRuntimeStateCache runtimeStatusesCache,
KubernetesNamespaceFactory namespaceFactory,
KubernetesClientFactory kubernetesClientFactory) {
KubernetesNamespaceFactory namespaceFactory) {
super(
NAME,
ImmutableSet.of(KubernetesEnvironment.TYPE, Constants.NO_ENVIRONMENT_RECIPE_TYPE),
@ -59,7 +57,6 @@ public class KubernetesInfrastructure extends RuntimeInfrastructure {
this.runtimeContextFactory = runtimeContextFactory;
this.runtimeStatusesCache = runtimeStatusesCache;
this.namespaceFactory = namespaceFactory;
this.kubernetesClientFactory = kubernetesClientFactory;
}
@Override

View File

@ -41,7 +41,7 @@ import java.util.concurrent.TimeoutException;
import java.util.function.Predicate;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesInfrastructureException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -73,18 +73,15 @@ public class KubernetesNamespace {
private final KubernetesServices services;
private final KubernetesPersistentVolumeClaims pvcs;
private final KubernetesIngresses ingresses;
/** Factory for workspace related operations clients */
private final KubernetesClientFactory clientFactory;
/** Factory for cluster related operations clients (like labeling the namespaces) */
private final KubernetesClientFactory cheSAClientFactory;
private final CheServerKubernetesClientFactory cheSAClientFactory;
private final KubernetesSecrets secrets;
private final KubernetesConfigsMaps configMaps;
@VisibleForTesting
protected KubernetesNamespace(
KubernetesClientFactory clientFactory,
KubernetesClientFactory cheSAClientFactory,
CheServerKubernetesClientFactory cheSAClientFactory,
String workspaceId,
String name,
KubernetesDeployments deployments,
@ -93,7 +90,6 @@ public class KubernetesNamespace {
KubernetesIngresses kubernetesIngresses,
KubernetesSecrets secrets,
KubernetesConfigsMaps configMaps) {
this.clientFactory = clientFactory;
this.cheSAClientFactory = cheSAClientFactory;
this.workspaceId = workspaceId;
this.name = name;
@ -106,21 +102,19 @@ public class KubernetesNamespace {
}
public KubernetesNamespace(
KubernetesClientFactory clientFactory,
KubernetesClientFactory cheSAClientFactory,
CheServerKubernetesClientFactory cheSAClientFactory,
Executor executor,
String name,
String workspaceId) {
this.clientFactory = clientFactory;
this.cheSAClientFactory = cheSAClientFactory;
this.workspaceId = workspaceId;
this.name = name;
this.deployments = new KubernetesDeployments(name, workspaceId, clientFactory, executor);
this.services = new KubernetesServices(name, workspaceId, clientFactory);
this.pvcs = new KubernetesPersistentVolumeClaims(name, workspaceId, clientFactory);
this.ingresses = new KubernetesIngresses(name, workspaceId, clientFactory);
this.secrets = new KubernetesSecrets(name, workspaceId, clientFactory);
this.configMaps = new KubernetesConfigsMaps(name, workspaceId, clientFactory);
this.deployments = new KubernetesDeployments(name, workspaceId, cheSAClientFactory, executor);
this.services = new KubernetesServices(name, workspaceId, cheSAClientFactory);
this.pvcs = new KubernetesPersistentVolumeClaims(name, workspaceId, cheSAClientFactory);
this.ingresses = new KubernetesIngresses(name, workspaceId, cheSAClientFactory);
this.secrets = new KubernetesSecrets(name, workspaceId, cheSAClientFactory);
this.configMaps = new KubernetesConfigsMaps(name, workspaceId, cheSAClientFactory);
}
/**
@ -270,7 +264,7 @@ public class KubernetesNamespace {
* @throws InfrastructureException if any unexpected exception occurs during namespace deletion
*/
void delete() throws InfrastructureException {
KubernetesClient client = clientFactory.create(workspaceId);
KubernetesClient client = cheSAClientFactory.create(workspaceId);
try {
delete(name, client);

View File

@ -46,7 +46,6 @@ import org.eclipse.che.api.core.ValidationException;
import org.eclipse.che.api.core.model.workspace.Workspace;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
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.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.commons.annotation.Nullable;
@ -56,7 +55,6 @@ import org.eclipse.che.commons.lang.Pair;
import org.eclipse.che.commons.subject.Subject;
import org.eclipse.che.inject.ConfigurationException;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.server.impls.KubernetesNamespaceMetaImpl;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.configurator.NamespaceConfigurator;
@ -95,10 +93,8 @@ public class KubernetesNamespaceFactory {
protected final Map<String, String> namespaceLabels;
protected final Map<String, String> namespaceAnnotations;
private final KubernetesClientFactory clientFactory;
private final KubernetesClientFactory cheClientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private final boolean namespaceCreationAllowed;
private final UserManager userManager;
private final PreferenceManager preferenceManager;
protected final Set<NamespaceConfigurator> namespaceConfigurators;
protected final KubernetesSharedPool sharedPool;
@ -112,16 +108,12 @@ public class KubernetesNamespaceFactory {
@Named("che.infra.kubernetes.namespace.labels") String namespaceLabels,
@Named("che.infra.kubernetes.namespace.annotations") String namespaceAnnotations,
Set<NamespaceConfigurator> namespaceConfigurators,
KubernetesClientFactory clientFactory,
CheServerKubernetesClientFactory cheClientFactory,
UserManager userManager,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
PreferenceManager preferenceManager,
KubernetesSharedPool sharedPool)
throws ConfigurationException {
this.namespaceCreationAllowed = namespaceCreationAllowed;
this.userManager = userManager;
this.clientFactory = clientFactory;
this.cheClientFactory = cheClientFactory;
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
this.defaultNamespaceName = defaultNamespaceName;
this.preferenceManager = preferenceManager;
this.sharedPool = sharedPool;
@ -168,7 +160,7 @@ public class KubernetesNamespaceFactory {
@VisibleForTesting
KubernetesNamespace doCreateNamespaceAccess(String workspaceId, String name) {
return new KubernetesNamespace(
clientFactory, cheClientFactory, sharedPool.getExecutor(), name, workspaceId);
cheServerKubernetesClientFactory, sharedPool.getExecutor(), name, workspaceId);
}
/**
@ -241,7 +233,8 @@ public class KubernetesNamespaceFactory {
public Optional<KubernetesNamespaceMeta> fetchNamespace(String name)
throws InfrastructureException {
try {
Namespace namespace = cheClientFactory.create().namespaces().withName(name).get();
Namespace namespace =
cheServerKubernetesClientFactory.create().namespaces().withName(name).get();
if (namespace == null) {
return Optional.empty();
} else {
@ -501,7 +494,12 @@ public class KubernetesNamespaceFactory {
NamespaceResolutionContext namespaceCtx) throws InfrastructureException {
try {
List<Namespace> workspaceNamespaces =
cheClientFactory.create().namespaces().withLabels(namespaceLabels).list().getItems();
cheServerKubernetesClientFactory
.create()
.namespaces()
.withLabels(namespaceLabels)
.list()
.getItems();
if (!workspaceNamespaces.isEmpty()) {
Map<String, String> evaluatedAnnotations = evaluateAnnotationPlaceholders(namespaceCtx);
return workspaceNamespaces.stream()

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -19,7 +19,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
/**
* This {@link NamespaceConfigurator} ensures that Secret {@link
@ -29,17 +29,18 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFacto
@Singleton
public class CredentialsSecretConfigurator implements NamespaceConfigurator {
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Inject
public CredentialsSecretConfigurator(KubernetesClientFactory clientFactory) {
this.clientFactory = clientFactory;
public CredentialsSecretConfigurator(
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
}
@Override
public void configure(NamespaceResolutionContext namespaceResolutionContext, String namespaceName)
throws InfrastructureException {
var client = clientFactory.create();
var client = cheServerKubernetesClientFactory.create();
if (client.secrets().inNamespace(namespaceName).withName(CREDENTIALS_SECRET_NAME).get()
== null) {
Secret secret =

View File

@ -23,34 +23,30 @@ import javax.inject.Inject;
import org.eclipse.che.api.factory.server.scm.GitUserData;
import org.eclipse.che.api.factory.server.scm.GitUserDataFetcher;
import org.eclipse.che.api.factory.server.scm.exception.*;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GitconfigUserDataConfigurator implements NamespaceConfigurator {
private static final Logger LOG = LoggerFactory.getLogger(GitconfigUserDataConfigurator.class);
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private final Set<GitUserDataFetcher> gitUserDataFetchers;
private static final String CONFIGMAP_DATA_KEY = "gitconfig";
private final UserManager userManager;
@Inject
public GitconfigUserDataConfigurator(
KubernetesClientFactory clientFactory,
Set<GitUserDataFetcher> gitUserDataFetchers,
UserManager userManager) {
this.clientFactory = clientFactory;
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
Set<GitUserDataFetcher> gitUserDataFetchers) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
this.gitUserDataFetchers = gitUserDataFetchers;
this.userManager = userManager;
}
@Override
public void configure(NamespaceResolutionContext namespaceResolutionContext, String namespaceName)
throws InfrastructureException {
var client = clientFactory.create();
var client = cheServerKubernetesClientFactory.create();
GitUserData gitUserData = null;
for (GitUserDataFetcher fetcher : gitUserDataFetchers) {
try {

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -18,7 +18,7 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
import javax.inject.Inject;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
/**
* This {@link NamespaceConfigurator} ensures that ConfigMap {@link
@ -27,17 +27,18 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFacto
*/
public class PreferencesConfigMapConfigurator implements NamespaceConfigurator {
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Inject
public PreferencesConfigMapConfigurator(KubernetesClientFactory clientFactory) {
this.clientFactory = clientFactory;
public PreferencesConfigMapConfigurator(
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
}
@Override
public void configure(NamespaceResolutionContext namespaceResolutionContext, String namespaceName)
throws InfrastructureException {
var client = clientFactory.create();
var client = cheServerKubernetesClientFactory.create();
if (client.configMaps().inNamespace(namespaceName).withName(PREFERENCES_CONFIGMAP_NAME).get()
== null) {
ConfigMap configMap =

View File

@ -38,7 +38,7 @@ import org.eclipse.che.api.ssh.server.model.impl.SshPairImpl;
import org.eclipse.che.api.ssh.shared.model.SshPair;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -55,7 +55,7 @@ public class SshKeysConfigurator implements NamespaceConfigurator {
private final SshManager sshManager;
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private static final Logger LOG = LoggerFactory.getLogger(SshKeysConfigurator.class);
@ -63,16 +63,17 @@ public class SshKeysConfigurator implements NamespaceConfigurator {
Pattern.compile("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$");
@Inject
public SshKeysConfigurator(SshManager sshManager, KubernetesClientFactory clientFactory) {
public SshKeysConfigurator(
SshManager sshManager, CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.sshManager = sshManager;
this.clientFactory = clientFactory;
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
}
@Override
public void configure(NamespaceResolutionContext namespaceResolutionContext, String namespaceName)
throws InfrastructureException {
var client = clientFactory.create();
var client = cheServerKubernetesClientFactory.create();
List<SshPairImpl> vcsSshPairs = getVcsSshPairs(namespaceResolutionContext);
List<String> invalidSshKeyNames =

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -26,7 +26,6 @@ import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
/**
* This {@link NamespaceConfigurator} ensures that User has assigned configured ClusterRoles from
@ -37,13 +36,13 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFacto
public class UserPermissionConfigurator implements NamespaceConfigurator {
private final Set<String> userClusterRoles;
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Inject
public UserPermissionConfigurator(
@Nullable @Named("che.infra.kubernetes.user_cluster_roles") String userClusterRoles,
CheServerKubernetesClientFactory cheClientFactory) {
this.clientFactory = cheClientFactory;
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
if (!isNullOrEmpty(userClusterRoles)) {
this.userClusterRoles =
Sets.newHashSet(
@ -58,7 +57,7 @@ public class UserPermissionConfigurator implements NamespaceConfigurator {
throws InfrastructureException {
if (!userClusterRoles.isEmpty()) {
bindRoles(
clientFactory.create(),
cheServerKubernetesClientFactory.create(),
namespaceName,
namespaceResolutionContext.getUserName(),
userClusterRoles);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2022 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -15,10 +15,7 @@ import com.google.common.annotations.VisibleForTesting;
import io.fabric8.kubernetes.api.model.Secret;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.user.server.PreferenceManager;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -36,19 +33,8 @@ public class UserPreferencesConfigurator implements NamespaceConfigurator {
private static final String USER_PREFERENCES_SECRET_MOUNT_PATH = "/config/user/preferences";
private static final int PREFERENCE_NAME_MAX_LENGTH = 253;
private final KubernetesClientFactory clientFactory;
private final UserManager userManager;
private final PreferenceManager preferenceManager;
@Inject
public UserPreferencesConfigurator(
KubernetesClientFactory clientFactory,
UserManager userManager,
PreferenceManager preferenceManager) {
this.clientFactory = clientFactory;
this.userManager = userManager;
this.preferenceManager = preferenceManager;
}
public UserPreferencesConfigurator() {}
@Override
public void configure(

View File

@ -24,10 +24,9 @@ import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
/**
* Creates {@link Secret} with user profile information such as his id, name and email. This serves
@ -40,13 +39,12 @@ public class UserProfileConfigurator implements NamespaceConfigurator {
private static final String USER_PROFILE_SECRET_NAME = "user-profile";
private static final String USER_PROFILE_SECRET_MOUNT_PATH = "/config/user/profile";
private final KubernetesClientFactory clientFactory;
private final UserManager userManager;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Inject
public UserProfileConfigurator(KubernetesClientFactory clientFactory, UserManager userManager) {
this.clientFactory = clientFactory;
this.userManager = userManager;
public UserProfileConfigurator(
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
}
@Override
@ -54,7 +52,7 @@ public class UserProfileConfigurator implements NamespaceConfigurator {
throws InfrastructureException {
Secret userProfileSecret = prepareProfileSecret(namespaceResolutionContext);
try {
clientFactory
cheServerKubernetesClientFactory
.create()
.secrets()
.inNamespace(namespaceName)

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -24,7 +24,7 @@ import javax.inject.Singleton;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesWorkspaceServiceAccount;
/**
@ -34,7 +34,7 @@ import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesW
@Singleton
public class WorkspaceServiceAccountConfigurator implements NamespaceConfigurator {
private final KubernetesClientFactory clientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private final String serviceAccountName;
private final Set<String> clusterRoleNames;
@ -43,8 +43,8 @@ public class WorkspaceServiceAccountConfigurator implements NamespaceConfigurato
public WorkspaceServiceAccountConfigurator(
@Nullable @Named("che.infra.kubernetes.service_account_name") String serviceAccountName,
@Nullable @Named("che.infra.kubernetes.workspace_sa_cluster_roles") String clusterRoleNames,
KubernetesClientFactory clientFactory) {
this.clientFactory = clientFactory;
CheServerKubernetesClientFactory cheServerKubernetesClientFactory) {
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
this.serviceAccountName = serviceAccountName;
if (!isNullOrEmpty(clusterRoleNames)) {
this.clusterRoleNames =
@ -69,6 +69,10 @@ public class WorkspaceServiceAccountConfigurator implements NamespaceConfigurato
public KubernetesWorkspaceServiceAccount doCreateServiceAccount(
String workspaceId, String namespaceName) {
return new KubernetesWorkspaceServiceAccount(
workspaceId, namespaceName, serviceAccountName, clusterRoleNames, clientFactory);
workspaceId,
namespaceName,
serviceAccountName,
clusterRoleNames,
cheServerKubernetesClientFactory);
}
}

View File

@ -12,14 +12,11 @@
package org.eclipse.che.workspace.infrastructure.kubernetes;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import io.fabric8.kubernetes.client.Config;
import java.util.Collections;
import org.eclipse.che.api.core.notification.EventService;
import org.eclipse.che.workspace.infrastructure.kubernetes.cache.KubernetesRuntimeStateCache;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
@ -27,7 +24,6 @@ import org.testng.annotations.Listeners;
@Listeners(MockitoTestNGListener.class)
public class KubernetesInfrastructureTest {
@Mock private KubernetesClientFactory factory;
private KubernetesInfrastructure infra;
@BeforeMethod
@ -38,9 +34,6 @@ public class KubernetesInfrastructureTest {
mock(KubernetesRuntimeContextFactory.class),
Collections.emptySet(),
mock(KubernetesRuntimeStateCache.class),
mock(KubernetesNamespaceFactory.class),
factory);
when(factory.getDefaultConfig()).thenReturn(mock(Config.class));
mock(KubernetesNamespaceFactory.class));
}
}

View File

@ -75,8 +75,6 @@ import java.util.stream.Stream;
import org.eclipse.che.api.core.ValidationException;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
import org.eclipse.che.api.user.server.PreferenceManager;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.api.workspace.server.model.impl.RuntimeIdentityImpl;
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl.WorkspaceImplBuilder;
@ -87,7 +85,6 @@ import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.SubjectImpl;
import org.eclipse.che.inject.ConfigurationException;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.server.impls.KubernetesNamespaceMetaImpl;
import org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.KubernetesNamespaceMeta;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.configurator.CredentialsSecretConfigurator;
@ -126,10 +123,8 @@ public class KubernetesNamespaceFactoryTest {
private static final String NAMESPACE_ANNOTATIONS = NAMESPACE_ANNOTATION_NAME + "=<username>";
@Mock private KubernetesSharedPool pool;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheClientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private KubernetesClient k8sClient;
@Mock private UserManager userManager;
@Mock private PreferenceManager preferenceManager;
@Mock Appender mockedAppender;
@ -150,8 +145,7 @@ public class KubernetesNamespaceFactoryTest {
serverMock = new KubernetesServer(true, true);
serverMock.before();
k8sClient = spy(serverMock.getClient());
lenient().when(clientFactory.create()).thenReturn(k8sClient);
lenient().when(cheClientFactory.create()).thenReturn(k8sClient);
lenient().when(cheServerKubernetesClientFactory.create()).thenReturn(k8sClient);
lenient().when(k8sClient.namespaces()).thenReturn(namespaceOperation);
lenient().when(namespaceOperation.withName(any())).thenReturn(namespaceResource);
@ -161,9 +155,6 @@ public class KubernetesNamespaceFactoryTest {
lenient().when(namespaceListResource.list()).thenReturn(namespaceList);
lenient().when(namespaceList.getItems()).thenReturn(Collections.emptyList());
lenient()
.when(userManager.getById(USER_ID))
.thenReturn(new UserImpl(USER_ID, "test@mail.com", USER_NAME));
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "i123", null, false));
}
@ -185,9 +176,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -212,9 +201,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -232,9 +219,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -257,9 +242,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -279,9 +262,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
}
@ -329,9 +310,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "123", null, false));
@ -372,9 +351,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "123", null, false));
@ -402,9 +379,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -435,9 +410,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -463,9 +436,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -492,10 +463,8 @@ public class KubernetesNamespaceFactoryTest {
true,
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(new CredentialsSecretConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
userManager,
Set.of(new CredentialsSecretConfigurator(cheServerKubernetesClientFactory)),
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -531,10 +500,8 @@ public class KubernetesNamespaceFactoryTest {
true,
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(new PreferencesConfigMapConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
userManager,
Set.of(new PreferencesConfigMapConfigurator(cheServerKubernetesClientFactory)),
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -575,9 +542,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
namespaceConfigurators,
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "123", null, false));
@ -612,9 +577,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -646,9 +609,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -681,9 +642,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
throwOnTryToGetNamespaceByName(
@ -706,9 +665,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
throwOnTryToGetNamespacesList(new KubernetesClientException("connection refused"));
@ -736,9 +693,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -767,9 +722,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -791,7 +744,9 @@ public class KubernetesNamespaceFactoryTest {
throws Exception {
// given
var serviceAccountCfg =
spy(new WorkspaceServiceAccountConfigurator("serviceAccount", "", clientFactory));
spy(
new WorkspaceServiceAccountConfigurator(
"serviceAccount", "", cheServerKubernetesClientFactory));
namespaceFactory =
spy(
new KubernetesNamespaceFactory(
@ -802,9 +757,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(serviceAccountCfg),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -830,7 +783,8 @@ public class KubernetesNamespaceFactoryTest {
public void shouldBindToAllConfiguredClusterRoles() throws Exception {
// given
var serviceAccountConfigurator =
new WorkspaceServiceAccountConfigurator("serviceAccount", "cr2, cr3", clientFactory);
new WorkspaceServiceAccountConfigurator(
"serviceAccount", "cr2, cr3", cheServerKubernetesClientFactory);
namespaceFactory =
spy(
new KubernetesNamespaceFactory(
@ -841,9 +795,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(serviceAccountConfigurator),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -851,7 +803,7 @@ public class KubernetesNamespaceFactoryTest {
when(toReturnNamespace.getName()).thenReturn("workspace123");
doReturn(toReturnNamespace).when(namespaceFactory).doCreateNamespaceAccess(any(), any());
when(k8sClient.supportsApiPath(eq("/apis/metrics.k8s.io"))).thenReturn(true);
when(clientFactory.create(any())).thenReturn(k8sClient);
when(cheServerKubernetesClientFactory.create(any())).thenReturn(k8sClient);
// pre-create the cluster roles
Stream.of("cr1", "cr2", "cr3")
@ -906,7 +858,8 @@ public class KubernetesNamespaceFactoryTest {
public void shouldCreateAndBindCredentialsSecretRole() throws Exception {
// given
var serviceAccountConfigurator =
new WorkspaceServiceAccountConfigurator("serviceAccount", "cr2, cr3", clientFactory);
new WorkspaceServiceAccountConfigurator(
"serviceAccount", "cr2, cr3", cheServerKubernetesClientFactory);
namespaceFactory =
spy(
new KubernetesNamespaceFactory(
@ -917,16 +870,14 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(serviceAccountConfigurator),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
prepareNamespace(toReturnNamespace);
when(toReturnNamespace.getName()).thenReturn("workspace123");
doReturn(toReturnNamespace).when(namespaceFactory).doCreateNamespaceAccess(any(), any());
when(clientFactory.create(any())).thenReturn(k8sClient);
when(cheServerKubernetesClientFactory.create(any())).thenReturn(k8sClient);
// when
RuntimeIdentity identity =
@ -962,10 +913,9 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
Set.of(
new WorkspaceServiceAccountConfigurator("serviceAccount", "", clientFactory)),
clientFactory,
cheClientFactory,
userManager,
new WorkspaceServiceAccountConfigurator(
"serviceAccount", "", cheServerKubernetesClientFactory)),
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -973,7 +923,7 @@ public class KubernetesNamespaceFactoryTest {
when(toReturnNamespace.getName()).thenReturn("workspace123");
doReturn(toReturnNamespace).when(namespaceFactory).doCreateNamespaceAccess(any(), any());
when(k8sClient.supportsApiPath(eq("/apis/metrics.k8s.io"))).thenReturn(true);
when(clientFactory.create(any())).thenReturn(k8sClient);
when(cheServerKubernetesClientFactory.create(any())).thenReturn(k8sClient);
// when
RuntimeIdentity identity =
@ -1029,9 +979,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1054,9 +1002,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1084,9 +1030,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1115,9 +1059,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1146,9 +1088,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
doReturn(empty()).when(namespaceFactory).fetchNamespace(anyString());
@ -1173,9 +1113,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1202,9 +1140,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1252,9 +1188,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
@ -1278,9 +1212,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -1317,9 +1249,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -1355,9 +1285,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
KubernetesNamespace toReturnNamespace = mock(KubernetesNamespace.class);
@ -1405,9 +1333,7 @@ public class KubernetesNamespaceFactoryTest {
"try_placeholder_here=<username>",
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "123", null, false));
@ -1430,9 +1356,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
"try_placeholder_here=<username>",
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool));
EnvironmentContext.getCurrent().setSubject(new SubjectImpl("jondoe", "123", null, false));
@ -1461,9 +1385,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);
assertEquals(expected, namespaceFactory.normalizeNamespaceName(raw));
@ -1480,9 +1402,7 @@ public class KubernetesNamespaceFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
emptySet(),
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
pool);

View File

@ -45,7 +45,6 @@ import java.util.Map;
import java.util.concurrent.Executor;
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.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.stubbing.Answer;
@ -72,7 +71,6 @@ public class KubernetesNamespaceTest {
@Mock private KubernetesPersistentVolumeClaims pvcs;
@Mock private KubernetesSecrets secrets;
@Mock private KubernetesConfigsMaps configMaps;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheClientFactory;
@Mock private Executor executor;
@Mock private KubernetesClient kubernetesClient;
@ -83,7 +81,6 @@ public class KubernetesNamespaceTest {
@BeforeMethod
public void setUp() throws Exception {
lenient().when(clientFactory.create(anyString())).thenReturn(kubernetesClient);
lenient().when(cheClientFactory.create(anyString())).thenReturn(kubernetesClient);
lenient().doReturn(namespaceOperation).when(kubernetesClient).namespaces();
@ -97,7 +94,6 @@ public class KubernetesNamespaceTest {
k8sNamespace =
new KubernetesNamespace(
clientFactory,
cheClientFactory,
WORKSPACE_ID,
NAMESPACE,
@ -114,7 +110,7 @@ public class KubernetesNamespaceTest {
// given
prepareNamespace(NAMESPACE);
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
namespace.prepare(true, Map.of(), Map.of());
@ -135,7 +131,7 @@ public class KubernetesNamespaceTest {
doReturn(namespaceResource).when(namespaceOperation).withName(anyString());
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
namespace.prepare(true, Map.of(), Map.of());
@ -152,7 +148,7 @@ public class KubernetesNamespaceTest {
Resource resource = prepareNamespaceResource(NAMESPACE);
doThrow(new KubernetesClientException("error", 403, null)).when(resource).get();
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
namespace.prepare(false, Map.of(), Map.of());
@ -201,7 +197,7 @@ public class KubernetesNamespaceTest {
doThrow(new KubernetesClientException("error", 403, null)).when(resource).get();
doThrow(KubernetesClientException.class).when(kubernetesClient).serviceAccounts();
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
.prepare(false, Map.of(), Map.of());
}
@ -212,7 +208,7 @@ public class KubernetesNamespaceTest {
doThrow(new KubernetesClientException("error", 403, null)).when(resource).get();
when(serviceAccountResource.get()).thenReturn(null);
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
.prepare(false, Map.of(), Map.of());
}
@ -231,7 +227,7 @@ public class KubernetesNamespaceTest {
.when(serviceAccountResource)
.watch(any());
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID)
.prepare(false, Map.of(), Map.of());
}
@ -257,7 +253,7 @@ public class KubernetesNamespaceTest {
.watch(any());
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
namespace.prepare(true, Map.of(), Map.of());
@ -270,7 +266,7 @@ public class KubernetesNamespaceTest {
public void testDeletesExistingNamespace() throws Exception {
// given
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
Resource resource = prepareNamespaceResource(NAMESPACE);
// when
@ -284,7 +280,7 @@ public class KubernetesNamespaceTest {
public void testDoesntFailIfDeletedNamespaceDoesntExist() throws Exception {
// given
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
Resource resource = prepareNamespaceResource(NAMESPACE);
when(resource.delete()).thenThrow(new KubernetesClientException("err", 404, null));
@ -300,7 +296,7 @@ public class KubernetesNamespaceTest {
public void testDoesntFailIfDeletedNamespaceIsBeingDeleted() throws Exception {
// given
KubernetesNamespace namespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
Resource resource = prepareNamespaceResource(NAMESPACE);
when(resource.delete()).thenThrow(new KubernetesClientException("err", 409, null));
@ -317,7 +313,7 @@ public class KubernetesNamespaceTest {
// given
prepareNamespace(NAMESPACE);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
doReturn(cheKubeClient).when(cheClientFactory).create();
@ -350,7 +346,7 @@ public class KubernetesNamespaceTest {
Namespace namespace = prepareNamespace(NAMESPACE);
namespace.getMetadata().setLabels(labels);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
lenient().doReturn(cheKubeClient).when(cheClientFactory).create();
@ -378,7 +374,7 @@ public class KubernetesNamespaceTest {
Namespace namespace = prepareNamespace(NAMESPACE);
namespace.getMetadata().setLabels(existingLabels);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
lenient().doReturn(cheKubeClient).when(cheClientFactory).create();
@ -404,7 +400,7 @@ public class KubernetesNamespaceTest {
// given
prepareNamespace(NAMESPACE);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
doReturn(cheKubeClient).when(cheClientFactory).create();
@ -442,7 +438,7 @@ public class KubernetesNamespaceTest {
Namespace namespace = prepareNamespace(NAMESPACE);
namespace.getMetadata().setAnnotations(annotations);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
kubernetesNamespace.prepare(true, emptyMap(), annotations);
@ -460,7 +456,7 @@ public class KubernetesNamespaceTest {
Namespace namespace = prepareNamespace(NAMESPACE);
namespace.getMetadata().setAnnotations(existingAnnotations);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
// when
kubernetesNamespace.prepare(true, emptyMap(), emptyMap());
@ -481,7 +477,7 @@ public class KubernetesNamespaceTest {
prepareNamespace(NAMESPACE);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
lenient().doReturn(cheKubeClient).when(cheClientFactory).create();
@ -512,7 +508,7 @@ public class KubernetesNamespaceTest {
Namespace namespace = prepareNamespace(NAMESPACE);
KubernetesNamespace kubernetesNamespace =
new KubernetesNamespace(clientFactory, cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
new KubernetesNamespace(cheClientFactory, executor, NAMESPACE, WORKSPACE_ID);
KubernetesClient cheKubeClient = mock(KubernetesClient.class);
lenient().doReturn(cheKubeClient).when(cheClientFactory).create();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -21,7 +21,7 @@ import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
import java.util.Map;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.Assert;
@ -34,7 +34,7 @@ public class CredentialsSecretConfiguratorTest {
private NamespaceConfigurator configurator;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private KubernetesServer serverMock;
private NamespaceResolutionContext namespaceResolutionContext;
@ -45,12 +45,12 @@ public class CredentialsSecretConfiguratorTest {
@BeforeMethod
public void setUp() throws InfrastructureException {
configurator = new CredentialsSecretConfigurator(clientFactory);
configurator = new CredentialsSecretConfigurator(cheServerKubernetesClientFactory);
serverMock = new KubernetesServer(true, true);
serverMock.before();
KubernetesClient client = spy(serverMock.getClient());
when(clientFactory.create()).thenReturn(client);
when(cheServerKubernetesClientFactory.create()).thenReturn(client);
namespaceResolutionContext =
new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME);

View File

@ -26,10 +26,9 @@ import java.util.Set;
import org.eclipse.che.api.factory.server.scm.GitUserData;
import org.eclipse.che.api.factory.server.scm.GitUserDataFetcher;
import org.eclipse.che.api.factory.server.scm.exception.*;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.Assert;
@ -42,9 +41,8 @@ public class GitconfigUserdataConfiguratorTest {
private NamespaceConfigurator configurator;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Mock private GitUserDataFetcher gitUserDataFetcher;
@Mock private UserManager userManager;
private KubernetesServer serverMock;
private NamespaceResolutionContext namespaceResolutionContext;
@ -57,12 +55,13 @@ public class GitconfigUserdataConfiguratorTest {
public void setUp()
throws InfrastructureException, ScmCommunicationException, ScmUnauthorizedException {
configurator =
new GitconfigUserDataConfigurator(clientFactory, Set.of(gitUserDataFetcher), userManager);
new GitconfigUserDataConfigurator(
cheServerKubernetesClientFactory, Set.of(gitUserDataFetcher));
serverMock = new KubernetesServer(true, true);
serverMock.before();
KubernetesClient client = spy(serverMock.getClient());
when(clientFactory.create()).thenReturn(client);
when(cheServerKubernetesClientFactory.create()).thenReturn(client);
namespaceResolutionContext =
new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -23,7 +23,7 @@ import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
import java.util.Map;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.Assert;
@ -35,7 +35,7 @@ import org.testng.annotations.Test;
public class PreferencesConfigMapConfiguratorTest {
private NamespaceConfigurator configurator;
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private KubernetesServer serverMock;
private NamespaceResolutionContext namespaceResolutionContext;
@ -46,12 +46,12 @@ public class PreferencesConfigMapConfiguratorTest {
@BeforeMethod
public void setUp() throws InfrastructureException {
configurator = new PreferencesConfigMapConfigurator(clientFactory);
configurator = new PreferencesConfigMapConfigurator(cheServerKubernetesClientFactory);
serverMock = new KubernetesServer(true, true);
serverMock.before();
KubernetesClient client = spy(serverMock.getClient());
when(clientFactory.create()).thenReturn(client);
when(cheServerKubernetesClientFactory.create()).thenReturn(client);
namespaceResolutionContext =
new NamespaceResolutionContext(TEST_WORKSPACE_ID, TEST_USER_ID, TEST_USERNAME);
@ -74,7 +74,7 @@ public class PreferencesConfigMapConfiguratorTest {
.inNamespace(TEST_NAMESPACE_NAME)
.withName(PREFERENCES_CONFIGMAP_NAME)
.get());
verify(clientFactory, times(1)).create();
verify(cheServerKubernetesClientFactory, times(1)).create();
}
@Test

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -28,7 +28,7 @@ import org.eclipse.che.api.ssh.server.SshManager;
import org.eclipse.che.api.ssh.server.model.impl.SshPairImpl;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
@ -44,7 +44,7 @@ public class SshKeysConfiguratorTest {
private static final String USER_NAME = "user-name";
private static final String USER_NAMESPACE = "user-namespace";
@Mock private KubernetesClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Mock private SshManager sshManager;
@InjectMocks private SshKeysConfigurator sshKeysConfigurator;
@ -62,7 +62,7 @@ public class SshKeysConfiguratorTest {
kubernetesServer.before();
when(sshManager.getPairs(USER_ID, "vcs")).thenReturn(Collections.singletonList(sshPair));
when(clientFactory.create()).thenReturn(kubernetesServer.getClient());
when(cheServerKubernetesClientFactory.create()).thenReturn(kubernetesServer.getClient());
}
@AfterMethod

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2022 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -21,11 +21,8 @@ import java.util.Map;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.user.server.PreferenceManager;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesNamespaceFactory;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@ -49,8 +46,6 @@ public class UserPreferencesConfiguratorTest {
private static final String USER_NAMESPACE = "user-namespace";
@Mock private KubernetesNamespaceFactory namespaceFactory;
@Mock private KubernetesClientFactory clientFactory;
@Mock private UserManager userManager;
@Mock private PreferenceManager preferenceManager;
@InjectMocks private UserPreferencesConfigurator userPreferencesConfigurator;
@ -67,11 +62,7 @@ public class UserPreferencesConfiguratorTest {
Map<String, String> preferences = new HashMap<>();
preferences.put("preference-name", "preference");
lenient()
.when(userManager.getById(USER_ID))
.thenReturn(new UserImpl(USER_ID, USER_EMAIL, USER_NAME));
lenient().when(namespaceFactory.evaluateNamespaceName(any())).thenReturn(USER_NAMESPACE);
lenient().when(clientFactory.create()).thenReturn(kubernetesServer.getClient());
lenient().when(preferenceManager.find(USER_ID)).thenReturn(preferences);
}

View File

@ -43,7 +43,6 @@ public class OpenShiftInfrastructure extends RuntimeInfrastructure {
private final OpenShiftRuntimeContextFactory runtimeContextFactory;
private final KubernetesRuntimeStateCache runtimeStatusesCache;
private final OpenShiftProjectFactory projectFactory;
private final OpenShiftClientFactory openShiftClientFactory;
@Inject
public OpenShiftInfrastructure(
@ -51,8 +50,7 @@ public class OpenShiftInfrastructure extends RuntimeInfrastructure {
OpenShiftRuntimeContextFactory runtimeContextFactory,
Set<InternalEnvironmentProvisioner> internalEnvProvisioners,
KubernetesRuntimeStateCache runtimeStatusesCache,
OpenShiftProjectFactory projectFactory,
OpenShiftClientFactory openShiftClientFactory) {
OpenShiftProjectFactory projectFactory) {
super(
NAME,
ImmutableSet.of(
@ -64,7 +62,6 @@ public class OpenShiftInfrastructure extends RuntimeInfrastructure {
this.runtimeContextFactory = runtimeContextFactory;
this.runtimeStatusesCache = runtimeStatusesCache;
this.projectFactory = projectFactory;
this.openShiftClientFactory = openShiftClientFactory;
}
@Override

View File

@ -23,7 +23,7 @@ import java.util.Map;
import java.util.concurrent.Executor;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.InternalInfrastructureException;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.CheServerKubernetesClientFactory;
import org.eclipse.che.workspace.infrastructure.kubernetes.KubernetesInfrastructureException;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesConfigsMaps;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.KubernetesDeployments;
@ -47,13 +47,13 @@ public class OpenShiftProject extends KubernetesNamespace {
private static final Logger LOG = LoggerFactory.getLogger(OpenShiftProject.class);
private final OpenShiftRoutes routes;
private final OpenShiftClientFactory clientFactory;
private final OpenShiftClientFactory openShiftClientFactory;
private final CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory;
@VisibleForTesting
OpenShiftProject(
OpenShiftClientFactory clientFactory,
KubernetesClientFactory cheClientFactory,
OpenShiftClientFactory openShiftClientFactory,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory,
String workspaceId,
String name,
@ -65,8 +65,7 @@ public class OpenShiftProject extends KubernetesNamespace {
KubernetesSecrets secrets,
KubernetesConfigsMaps configMaps) {
super(
clientFactory,
cheClientFactory,
cheServerKubernetesClientFactory,
workspaceId,
name,
deployments,
@ -75,21 +74,21 @@ public class OpenShiftProject extends KubernetesNamespace {
ingresses,
secrets,
configMaps);
this.clientFactory = clientFactory;
this.routes = routes;
this.openShiftClientFactory = openShiftClientFactory;
this.cheServerOpenshiftClientFactory = cheServerOpenshiftClientFactory;
}
public OpenShiftProject(
OpenShiftClientFactory clientFactory,
KubernetesClientFactory cheClientFactory,
OpenShiftClientFactory openShiftClientFactory,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory,
Executor executor,
String name,
String workspaceId) {
super(clientFactory, cheClientFactory, executor, name, workspaceId);
this.clientFactory = clientFactory;
this.routes = new OpenShiftRoutes(name, workspaceId, clientFactory);
super(cheServerKubernetesClientFactory, executor, name, workspaceId);
this.routes = new OpenShiftRoutes(name, workspaceId, cheServerOpenshiftClientFactory);
this.openShiftClientFactory = openShiftClientFactory;
this.cheServerOpenshiftClientFactory = cheServerOpenshiftClientFactory;
}
@ -129,8 +128,8 @@ public class OpenShiftProject extends KubernetesNamespace {
create(projectName, osClient);
waitDefaultServiceAccount(projectName, osClient);
} else {
create(projectName, clientFactory.createOC(workspaceId));
waitDefaultServiceAccount(projectName, clientFactory.create(workspaceId));
create(projectName, openShiftClientFactory.createOC(workspaceId));
waitDefaultServiceAccount(projectName, openShiftClientFactory.create(workspaceId));
}
}
label(osClient.namespaces().withName(projectName).get(), labels);

View File

@ -33,7 +33,6 @@ import javax.inject.Named;
import org.eclipse.che.api.core.model.workspace.Workspace;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
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.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.commons.annotation.Nullable;
@ -60,8 +59,10 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
private static final Logger LOG = LoggerFactory.getLogger(OpenShiftProjectFactory.class);
private final boolean initWithCheServerSa;
private final OpenShiftClientFactory clientFactory;
private final CheServerOpenshiftClientFactory cheOpenShiftClientFactory;
private final OpenShiftClientFactory openShiftClientFactory;
private final CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory;
private final CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
private final String oAuthIdentityProvider;
@ -75,10 +76,9 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
@Named("che.infra.kubernetes.namespace.annotations") String projectAnnotations,
@Named("che.infra.openshift.project.init_with_server_sa") boolean initWithCheServerSa,
Set<NamespaceConfigurator> namespaceConfigurators,
OpenShiftClientFactory clientFactory,
CheServerKubernetesClientFactory cheClientFactory,
CheServerOpenshiftClientFactory cheOpenShiftClientFactory,
UserManager userManager,
OpenShiftClientFactory openShiftClientFactory,
CheServerKubernetesClientFactory cheServerKubernetesClientFactory,
CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory,
PreferenceManager preferenceManager,
KubernetesSharedPool sharedPool,
@Nullable @Named("che.infra.openshift.oauth_identity_provider")
@ -91,14 +91,13 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
projectLabels,
projectAnnotations,
namespaceConfigurators,
clientFactory,
cheClientFactory,
userManager,
cheServerKubernetesClientFactory,
preferenceManager,
sharedPool);
this.initWithCheServerSa = initWithCheServerSa;
this.clientFactory = clientFactory;
this.cheOpenShiftClientFactory = cheOpenShiftClientFactory;
this.cheServerKubernetesClientFactory = cheServerKubernetesClientFactory;
this.cheServerOpenshiftClientFactory = cheServerOpenshiftClientFactory;
this.openShiftClientFactory = openShiftClientFactory;
this.oAuthIdentityProvider = oAuthIdentityProvider;
}
@ -154,9 +153,9 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
@VisibleForTesting
OpenShiftProject doCreateProjectAccess(String workspaceId, String name) {
return new OpenShiftProject(
clientFactory,
cheOpenShiftClientFactory,
cheOpenShiftClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
sharedPool.getExecutor(),
name,
workspaceId);
@ -170,7 +169,7 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
private Optional<Project> fetchNamespaceObject(String name) throws InfrastructureException {
try {
Project project = clientFactory.createOC().projects().withName(name).get();
Project project = cheServerOpenshiftClientFactory.createOC().projects().withName(name).get();
return Optional.ofNullable(project);
} catch (KubernetesClientException e) {
if (e.getCode() == 403) {
@ -189,7 +188,12 @@ public class OpenShiftProjectFactory extends KubernetesNamespaceFactory {
NamespaceResolutionContext namespaceCtx) throws InfrastructureException {
try {
List<Project> workspaceProjects =
clientFactory.createOC().projects().withLabels(namespaceLabels).list().getItems();
cheServerOpenshiftClientFactory
.createOC()
.projects()
.withLabels(namespaceLabels)
.list()
.getItems();
if (!workspaceProjects.isEmpty()) {
Map<String, String> evaluatedAnnotations = evaluateAnnotationPlaceholders(namespaceCtx);
return workspaceProjects.stream()

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -25,7 +25,7 @@ import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.workspace.infrastructure.kubernetes.namespace.configurator.NamespaceConfigurator;
import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftClientFactory;
import org.eclipse.che.workspace.infrastructure.openshift.CheServerOpenshiftClientFactory;
import org.eclipse.che.workspace.infrastructure.openshift.project.OpenShiftWorkspaceServiceAccount;
/**
@ -35,7 +35,7 @@ import org.eclipse.che.workspace.infrastructure.openshift.project.OpenShiftWorks
@Singleton
public class OpenShiftWorkspaceServiceAccountConfigurator implements NamespaceConfigurator {
private final OpenShiftClientFactory clientFactory;
private final CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory;
private final String serviceAccountName;
private final Set<String> clusterRoleNames;
@ -44,8 +44,8 @@ public class OpenShiftWorkspaceServiceAccountConfigurator implements NamespaceCo
public OpenShiftWorkspaceServiceAccountConfigurator(
@Nullable @Named("che.infra.kubernetes.service_account_name") String serviceAccountName,
@Nullable @Named("che.infra.kubernetes.workspace_sa_cluster_roles") String clusterRoleNames,
OpenShiftClientFactory clientFactory) {
this.clientFactory = clientFactory;
CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory) {
this.cheServerOpenshiftClientFactory = cheServerOpenshiftClientFactory;
this.serviceAccountName = serviceAccountName;
if (!isNullOrEmpty(clusterRoleNames)) {
this.clusterRoleNames =
@ -69,6 +69,6 @@ public class OpenShiftWorkspaceServiceAccountConfigurator implements NamespaceCo
@VisibleForTesting
public OpenShiftWorkspaceServiceAccount createServiceAccount(String wsId, String namespaceName) {
return new OpenShiftWorkspaceServiceAccount(
wsId, namespaceName, serviceAccountName, clusterRoleNames, clientFactory);
wsId, namespaceName, serviceAccountName, clusterRoleNames, cheServerOpenshiftClientFactory);
}
}

View File

@ -12,21 +12,17 @@
package org.eclipse.che.workspace.infrastructure.openshift;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import io.fabric8.kubernetes.client.Config;
import java.util.Collections;
import org.eclipse.che.api.core.notification.EventService;
import org.eclipse.che.workspace.infrastructure.kubernetes.cache.KubernetesRuntimeStateCache;
import org.eclipse.che.workspace.infrastructure.openshift.project.OpenShiftProjectFactory;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
@Listeners(MockitoTestNGListener.class)
public class OpenShiftInfrastructureTest {
@Mock private OpenShiftClientFactory factory;
private OpenShiftInfrastructure infra;
@BeforeMethod
@ -37,9 +33,6 @@ public class OpenShiftInfrastructureTest {
mock(OpenShiftRuntimeContextFactory.class),
Collections.emptySet(),
mock(KubernetesRuntimeStateCache.class),
mock(OpenShiftProjectFactory.class),
factory);
when(factory.getDefaultConfig()).thenReturn(mock(Config.class));
mock(OpenShiftProjectFactory.class));
}
}

View File

@ -61,8 +61,6 @@ import java.util.Set;
import org.eclipse.che.api.core.ValidationException;
import org.eclipse.che.api.core.model.workspace.runtime.RuntimeIdentity;
import org.eclipse.che.api.user.server.PreferenceManager;
import org.eclipse.che.api.user.server.UserManager;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.api.workspace.server.WorkspaceManager;
import org.eclipse.che.api.workspace.server.model.impl.RuntimeIdentityImpl;
import org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl;
@ -110,11 +108,10 @@ public class OpenShiftProjectFactoryTest {
private static final String NAMESPACE_ANNOTATIONS = NAMESPACE_ANNOTATION_NAME + "=<username>";
// @Mock private OpenShiftClientConfigFactory configFactory;
@Mock private OpenShiftClientFactory clientFactory;
@Mock private CheServerKubernetesClientFactory cheClientFactory;
@Mock private OpenShiftClientFactory openShiftClientFactory;
@Mock private CheServerKubernetesClientFactory cheServerKubernetesClientFactory;
@Mock private CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory;
@Mock private WorkspaceManager workspaceManager;
@Mock private UserManager userManager;
@Mock private PreferenceManager preferenceManager;
@Mock private KubernetesSharedPool pool;
@ -132,8 +129,10 @@ public class OpenShiftProjectFactoryTest {
@BeforeMethod
public void setUp() throws Exception {
lenient().when(clientFactory.createOC()).thenReturn(osClient);
lenient().when(clientFactory.create()).thenReturn(osClient);
lenient().when(openShiftClientFactory.createOC()).thenReturn(osClient);
lenient().when(cheServerOpenshiftClientFactory.create()).thenReturn(osClient);
lenient().when(cheServerOpenshiftClientFactory.createOC()).thenReturn(osClient);
lenient().when(cheServerKubernetesClientFactory.create()).thenReturn(osClient);
lenient().when(osClient.projects()).thenReturn(projectOperation);
lenient()
@ -147,9 +146,6 @@ public class OpenShiftProjectFactoryTest {
lenient().when(projectListResource.list()).thenReturn(projectList);
lenient().when(projectList.getItems()).thenReturn(emptyList());
lenient()
.when(userManager.getById(USER_ID))
.thenReturn(new UserImpl(USER_ID, "test@mail.com", USER_NAME));
EnvironmentContext.getCurrent()
.setSubject(new SubjectImpl(USER_NAME, USER_ID, "t-354t53xff34234", false));
}
@ -173,10 +169,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -204,10 +199,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -235,10 +229,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -271,10 +264,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -308,10 +300,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -341,10 +332,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -384,10 +374,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -421,10 +410,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -458,10 +446,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -485,10 +472,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -517,10 +503,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -551,11 +536,10 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
true,
Set.of(new CredentialsSecretConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
Set.of(new CredentialsSecretConfigurator(cheServerKubernetesClientFactory)),
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -596,11 +580,10 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
true,
Set.of(new PreferencesConfigMapConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
Set.of(new PreferencesConfigMapConfigurator(cheServerKubernetesClientFactory)),
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -639,11 +622,10 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
true,
Set.of(new CredentialsSecretConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
Set.of(new CredentialsSecretConfigurator(cheServerKubernetesClientFactory)),
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -681,11 +663,10 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_LABELS,
NAMESPACE_ANNOTATIONS,
true,
Set.of(new PreferencesConfigMapConfigurator(clientFactory)),
clientFactory,
cheClientFactory,
Set.of(new PreferencesConfigMapConfigurator(cheServerKubernetesClientFactory)),
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -713,7 +694,9 @@ public class OpenShiftProjectFactoryTest {
@Test
public void shouldCallStopWorkspaceRoleProvisionWhenIdentityProviderIsDefined() throws Exception {
var saConf =
spy(new OpenShiftWorkspaceServiceAccountConfigurator("serviceAccount", "", clientFactory));
spy(
new OpenShiftWorkspaceServiceAccountConfigurator(
"serviceAccount", "", cheServerOpenshiftClientFactory));
projectFactory =
spy(
new OpenShiftProjectFactory(
@ -725,10 +708,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
Set.of(saConf),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
OAUTH_IDENTITY_PROVIDER));
@ -775,10 +757,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -808,10 +789,9 @@ public class OpenShiftProjectFactoryTest {
NAMESPACE_ANNOTATIONS,
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER);
@ -835,10 +815,9 @@ public class OpenShiftProjectFactoryTest {
"try_placeholder_here=<username>",
true,
emptySet(),
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));
@ -876,10 +855,9 @@ public class OpenShiftProjectFactoryTest {
"try_placeholder_here=<username>",
true,
namespaceConfigurators,
clientFactory,
cheClientFactory,
openShiftClientFactory,
cheServerKubernetesClientFactory,
cheServerOpenshiftClientFactory,
userManager,
preferenceManager,
pool,
NO_OAUTH_IDENTITY_PROVIDER));

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2021 Red Hat, Inc.
* Copyright (c) 2012-2023 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
@ -17,11 +17,10 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.testng.Assert.*;
import org.eclipse.che.api.workspace.server.spi.InfrastructureException;
import org.eclipse.che.api.workspace.server.spi.NamespaceResolutionContext;
import org.eclipse.che.workspace.infrastructure.openshift.OpenShiftClientFactory;
import org.eclipse.che.workspace.infrastructure.openshift.CheServerOpenshiftClientFactory;
import org.eclipse.che.workspace.infrastructure.openshift.project.OpenShiftWorkspaceServiceAccount;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
@ -42,7 +41,7 @@ public class OpenShiftWorkspaceServiceAccountConfiguratorTest {
private NamespaceResolutionContext nsContext;
@Mock private OpenShiftClientFactory clientFactory;
@Mock private CheServerOpenshiftClientFactory cheServerOpenshiftClientFactory;
private OpenShiftWorkspaceServiceAccountConfigurator saConfigurator;
@ -56,7 +55,7 @@ public class OpenShiftWorkspaceServiceAccountConfiguratorTest {
saConfigurator =
spy(
new OpenShiftWorkspaceServiceAccountConfigurator(
SA_NAME, CLUSTER_ROLES, clientFactory));
SA_NAME, CLUSTER_ROLES, cheServerOpenshiftClientFactory));
OpenShiftWorkspaceServiceAccount serviceAccount = mock(OpenShiftWorkspaceServiceAccount.class);
doReturn(serviceAccount).when(saConfigurator).createServiceAccount(WS_ID, NS_NAME);
@ -68,7 +67,9 @@ public class OpenShiftWorkspaceServiceAccountConfiguratorTest {
@Test
public void testDoNothingWhenServiceAccountNotSet() throws InfrastructureException {
saConfigurator =
spy(new OpenShiftWorkspaceServiceAccountConfigurator(null, CLUSTER_ROLES, clientFactory));
spy(
new OpenShiftWorkspaceServiceAccountConfigurator(
null, CLUSTER_ROLES, cheServerOpenshiftClientFactory));
saConfigurator.configure(nsContext, NS_NAME);