Skip to content

Commit

Permalink
refactor : remove ClusterAccess from JKubeServiceHub constructor
Browse files Browse the repository at this point in the history
ClusterAccess is not required in the constructor as ClusterConfiguration
is being passed in JKubeConfiguration

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
  • Loading branch information
rohanKanojia committed Jun 27, 2024
1 parent 7c7f179 commit 5677669
Show file tree
Hide file tree
Showing 18 changed files with 90 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ public abstract class AbstractJKubeTask extends DefaultTask implements Kubernete

protected final KubernetesExtension kubernetesExtension;
protected KitLogger kitLogger;
protected ClusterAccess clusterAccess;
protected JKubeServiceHub jKubeServiceHub;
protected static final String DOCKER_BUILD_TIMESTAMP = "docker/build.timestamp";
protected List<ImageConfiguration> resolvedImages;
Expand All @@ -80,7 +79,6 @@ public final void runTask() {
protected void init() {
kubernetesExtension.javaProject = GradleUtil.convertGradleProject(getProject());
kitLogger = createLogger(null);
clusterAccess = new ClusterAccess(initClusterConfiguration());
jKubeServiceHub = initJKubeServiceHubBuilder().build();
kubernetesExtension.resources = updateResourceConfigNamespace(kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources);
resolvedImages = resolveImages();
Expand Down Expand Up @@ -142,8 +140,8 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder() {
.registry(kubernetesExtension.getPushRegistryOrNull() != null ?
kubernetesExtension.getPushRegistryOrNull() : kubernetesExtension.getRegistryOrDefault())
.build())
.clusterConfiguration(initClusterConfiguration())
.build())
.clusterAccess(clusterAccess)
.offline(kubernetesExtension.getOfflineOrDefault())
.platformMode(kubernetesExtension.getRuntimeMode())
.resourceServiceConfig(initResourceServiceConfig())
Expand Down Expand Up @@ -176,7 +174,7 @@ protected GeneratorContext.GeneratorContextBuilder initGeneratorContextBuilder()
.prePackagePhase(false)
.useProjectClasspath(kubernetesExtension.getUseProjectClassPathOrDefault())
.sourceDirectory(kubernetesExtension.getBuildSourceDirectoryOrDefault())
.openshiftNamespace(StringUtils.isNotBlank(kubernetesExtension.getNamespaceOrNull()) ? kubernetesExtension.getNamespaceOrNull() : clusterAccess.getNamespace())
.openshiftNamespace(StringUtils.isNotBlank(kubernetesExtension.getNamespaceOrNull()) ? kubernetesExtension.getNamespaceOrNull() : new ClusterAccess(initClusterConfiguration()).getNamespace())
.buildTimestamp(getBuildTimestamp(null, null, kubernetesExtension.javaProject.getBuildDirectory().getAbsolutePath(),
DOCKER_BUILD_TIMESTAMP))
.filter(kubernetesExtension.getFilterOrNull());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientException;
import org.eclipse.jkube.gradle.plugin.KubernetesExtension;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.util.KubernetesHelper;
import org.eclipse.jkube.kit.common.util.OpenshiftHelper;
import org.eclipse.jkube.kit.config.service.ApplyService;
Expand Down Expand Up @@ -92,6 +93,6 @@ protected void configureApplyService() {
applyService.setRollingUpgradePreserveScale(kubernetesExtension.getRollingUpgradePreserveScaleOrDefault());
applyService.setRecreateMode(kubernetesExtension.getRecreateOrDefault());
applyService.setNamespace(kubernetesExtension.getNamespaceOrNull());
applyService.setFallbackNamespace(resolveFallbackNamespace(kubernetesExtension.resources, clusterAccess));
applyService.setFallbackNamespace(resolveFallbackNamespace(kubernetesExtension.resources, new ClusterAccess(initClusterConfiguration())));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.jkube.kit.build.core.GavLabel;
import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub;
import org.eclipse.jkube.kit.build.service.docker.watch.WatchContext;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.util.KubernetesHelper;
import org.eclipse.jkube.kit.common.util.ResourceUtil;
import org.eclipse.jkube.kit.config.service.JKubeServiceHub;
Expand Down Expand Up @@ -58,6 +59,7 @@ public void run() {
try {
List<HasMetadata> resources = KubernetesHelper.loadResources(getManifest(kubernetesClient));
WatcherContext context = createWatcherContext();
ClusterAccess clusterAccess = new ClusterAccess(initClusterConfiguration());

WatcherManager.watch(resolvedImages,
applicableNamespace(null, kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources, clusterAccess),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.LazyBuilder;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.config.resource.ResourceService;
import org.eclipse.jkube.kit.config.resource.ResourceServiceConfig;
Expand All @@ -51,7 +50,6 @@ public class JKubeServiceHub implements Closeable {
private final BuildServiceConfig buildServiceConfig;
@Getter
private final ResourceServiceConfig resourceServiceConfig;
private final ClusterAccess clusterAccess;
@Getter
@Setter
private RuntimeMode platformMode;
Expand All @@ -70,12 +68,11 @@ public class JKubeServiceHub implements Closeable {

@Builder(toBuilder = true)
public JKubeServiceHub(
ClusterAccess clusterAccess, RuntimeMode platformMode, KitLogger log,
RuntimeMode platformMode, KitLogger log,
DockerServiceHub dockerServiceHub, JKubeConfiguration configuration,
BuildServiceConfig buildServiceConfig, ResourceServiceConfig resourceServiceConfig,
LazyBuilder<JKubeServiceHub, ResourceService> resourceService,
boolean offline) {
this.clusterAccess = clusterAccess;
this.platformMode = platformMode;
this.log = log;
this.dockerServiceHub = dockerServiceHub;
Expand Down Expand Up @@ -129,11 +126,7 @@ private ClusterAccess initClusterAccessIfNecessary() {
if (offline) {
throw new IllegalArgumentException("Connection to Cluster required. Please check if offline mode is set to false");
}
if (clusterAccess != null) {
return clusterAccess;
}
return new ClusterAccess(ClusterConfiguration.from(
System.getProperties(), configuration.getProject().getProperties()).build());
return new ClusterAccess(configuration.getClusterConfiguration());
}

public RuntimeMode getRuntimeMode() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
import io.fabric8.openshift.client.OpenShiftClient;
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -63,7 +62,6 @@

@EnableKubernetesMockClient(crud = true)
class ApplyServiceCrudTest {

KubernetesMockServer kubernetesMockServer;
KubernetesClient kubernetesClient;
private KitLogger log;
Expand All @@ -76,9 +74,10 @@ void setUp() {
apiGroupList = new APIGroupList();
final JKubeServiceHub serviceHub = JKubeServiceHub.builder()
.log(log)
.configuration(JKubeConfiguration.builder().build())
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build())
.build())
.platformMode(RuntimeMode.KUBERNETES)
.clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()))
.build();
applyService = serviceHub.getApplyService();
applyService.setNamespace("default");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.Serialization;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
import org.eclipse.jkube.kit.config.service.openshift.WebServerEventCollector;
Expand Down Expand Up @@ -72,7 +71,6 @@

@EnableKubernetesMockClient
class ApplyServiceTest {

KubernetesMockServer mockServer;
OpenShiftClient client;

Expand All @@ -82,9 +80,10 @@ class ApplyServiceTest {
void setUp() {
final JKubeServiceHub serviceHub = JKubeServiceHub.builder()
.log(new KitLogger.SilentLogger())
.configuration(JKubeConfiguration.builder().build())
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(client.getConfiguration()).build())
.build())
.platformMode(RuntimeMode.KUBERNETES)
.clusterAccess(new ClusterAccess(ClusterConfiguration.from(client.getConfiguration()).build()))
.build();
applyService = serviceHub.getApplyService();
applyService.setNamespace("default");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
import org.eclipse.jkube.kit.common.JKubeException;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.Serialization;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
Expand Down Expand Up @@ -94,9 +93,10 @@ void setUp() {
logger = spy(new KitLogger.SilentLogger());
final JKubeServiceHub serviceHub = JKubeServiceHub.builder()
.log(logger)
.configuration(JKubeConfiguration.builder().build())
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build())
.build())
.platformMode(RuntimeMode.KUBERNETES)
.clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build()))
.build();
debugContext = DebugContext.builder()
.namespace("namespace")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,21 @@
*/
package org.eclipse.jkube.kit.config.service;

import io.fabric8.kubernetes.api.model.APIGroupBuilder;
import io.fabric8.kubernetes.api.model.APIGroupListBuilder;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.http.HttpClient;
import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
import org.assertj.core.api.InstanceOfAssertFactories;
import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub;
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.JavaProject;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.common.service.MigrateService;
import org.eclipse.jkube.kit.common.util.LazyBuilder;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy;
import org.eclipse.jkube.kit.config.resource.ResourceService;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
Expand All @@ -32,35 +41,39 @@
import org.eclipse.jkube.kit.resource.helm.HelmService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.MockedConstruction;
import org.junit.jupiter.api.io.TempDir;

import java.nio.file.Path;

import static java.net.HttpURLConnection.HTTP_OK;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatNullPointerException;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.eclipse.jkube.kit.config.resource.RuntimeMode.KUBERNETES;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockConstruction;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@SuppressWarnings({"unused"})
@EnableKubernetesMockClient(crud = true)
class JKubeServiceHubTest {
@TempDir
Path temporaryFolder;

private JKubeServiceHub.JKubeServiceHubBuilder jKubeServiceHubBuilder;
private OpenShiftClient openShiftClient;
KubernetesMockServer kubernetesMockServer;
OpenShiftClient openShiftClient;

@BeforeEach
void setUp() {
final ClusterAccess clusterAccess = mock(ClusterAccess.class, RETURNS_DEEP_STUBS);
openShiftClient = mock(OpenShiftClient.class);
when(clusterAccess.createDefaultClient()).thenReturn(openShiftClient);
when(openShiftClient.adapt(OpenShiftClient.class)).thenReturn(openShiftClient);
jKubeServiceHubBuilder = JKubeServiceHub.builder()
.platformMode(KUBERNETES)
.configuration(mock(JKubeConfiguration.class, RETURNS_DEEP_STUBS))
.clusterAccess(clusterAccess)
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(openShiftClient.getConfiguration()).build())
.project(JavaProject.builder()
.baseDirectory(temporaryFolder.toFile())
.build())
.build())
.log(new KitLogger.SilentLogger())
.dockerServiceHub(mock(DockerServiceHub.class, RETURNS_DEEP_STUBS))
.offline(false)
Expand Down Expand Up @@ -170,7 +183,7 @@ void getUndeployServiceInOpenShiftWithInvalidClient() {
// Given
jKubeServiceHubBuilder.platformMode(RuntimeMode.OPENSHIFT);
try (JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) {
when(openShiftClient.isSupported()).thenReturn(true);
kubernetesMockServer.setUnsupported("openshift.io");
// When
final UndeployService result = jKubeServiceHub.getUndeployService();
// Then
Expand All @@ -185,7 +198,9 @@ void getUndeployServiceInOpenShiftWithValidClient() {
// Given
jKubeServiceHubBuilder.platformMode(RuntimeMode.OPENSHIFT);
try (JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) {
when(openShiftClient.hasApiGroup("openshift.io", false)).thenReturn(true);
kubernetesMockServer.expect().get().withPath("/apis")
.andReturn(HTTP_OK, new APIGroupListBuilder().addToGroups(new APIGroupBuilder().withName("apps.openshift.io").build()).build())
.once();
// When
final UndeployService result = jKubeServiceHub.getUndeployService();
// Then
Expand Down Expand Up @@ -247,30 +262,19 @@ void getResourceService() {
}
}

@Test
void clusterAccessIsNotInitializedIfProvided() {
// Given
try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build();
MockedConstruction<ClusterAccess> clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class)) {
assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty();
// When
jKubeServiceHub.getClusterAccess();
// Then
assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty();
}
}

@Test
void clusterAccessIsInitializedLazily() {
// Given
jKubeServiceHubBuilder.clusterAccess(null);
try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build();
MockedConstruction<ClusterAccess> clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class)) {
assertThat(clusterAccessMockedConstruction.constructed()).asList().isEmpty();
try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) {
// When
jKubeServiceHub.getClusterAccess();
// Then
assertThat(clusterAccessMockedConstruction.constructed()).asList().hasSize(1);
assertThat(jKubeServiceHub.getClusterAccess())
.isNotNull();
assertThat(jKubeServiceHub.getClusterAccess().createDefaultClient())
.extracting(Client::getMasterUrl)
.extracting("host", "port")
.containsExactly(kubernetesMockServer.getHostName(), kubernetesMockServer.getPort());
}
}

Expand Down Expand Up @@ -300,10 +304,16 @@ void getApplyServiceWithOfflineThrowsException() {

@Test
void closeClosesInitializedClient() {
KubernetesClient kubernetesClient;
try (final JKubeServiceHub jKubeServiceHub = jKubeServiceHubBuilder.build()) {
jKubeServiceHub.getClient();
kubernetesClient = jKubeServiceHub.getClient();
}
// Then
verify(openShiftClient, times(1)).close();
assertThat(kubernetesClient)
.isNotNull()
.extracting(Client::getHttpClient)
.extracting(HttpClient::isClosed)
.asInstanceOf(InstanceOfAssertFactories.BOOLEAN)
.isTrue();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.Serialization;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.resource.ResourceConfig;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
Expand Down Expand Up @@ -72,8 +71,9 @@ void setUp() {
final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder()
.log(logger)
.platformMode(RuntimeMode.KUBERNETES)
.configuration(JKubeConfiguration.builder().build())
.clusterAccess(new ClusterAccess(ClusterConfiguration.from(kubernetesClient.getConfiguration()).namespace("test").build()))
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(kubernetesClient.getConfiguration()).build())
.build())
.build();
kubernetesUndeployService = new KubernetesUndeployService(jKubeServiceHub, logger);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.Serialization;
import org.eclipse.jkube.kit.common.access.ClusterAccess;
import org.eclipse.jkube.kit.common.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.resource.ResourceConfig;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
Expand Down Expand Up @@ -73,8 +72,9 @@ void setUp() {
final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder()
.log(logger)
.platformMode(RuntimeMode.KUBERNETES)
.configuration(JKubeConfiguration.builder().build())
.clusterAccess(new ClusterAccess(ClusterConfiguration.from(openShiftClient.getConfiguration()).namespace("test").build()))
.configuration(JKubeConfiguration.builder()
.clusterConfiguration(ClusterConfiguration.from(openShiftClient.getConfiguration()).build())
.build())
.build();
resourceConfig = ResourceConfig.builder().namespace("test").build();
openshiftUndeployService = new OpenshiftUndeployService(jKubeServiceHub, logger);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class PluginManagerTest {

@BeforeEach
void setUp() {
jKubeServiceHub = new JKubeServiceHub(null, RuntimeMode.KUBERNETES, new KitLogger.StdoutLogger(),
jKubeServiceHub = new JKubeServiceHub(RuntimeMode.KUBERNETES, new KitLogger.StdoutLogger(),
null, new JKubeConfiguration(), new BuildServiceConfig(), new ResourceServiceConfig(),
new LazyBuilder<>(hub -> null), true);
}
Expand Down
Loading

0 comments on commit 5677669

Please sign in to comment.