Skip to content

Commit

Permalink
refactor (jkube-kit) : Add GeneratorManager interface in `jkube-kit/c…
Browse files Browse the repository at this point in the history
…onfig/image`

+ Add an interface `GeneratorManager` in `jkube-kit/config/image`
+ Rename existing `GeneratorManager` to `DefaultGeneratorManager` that
  will implement above interface, rather than relying on static method.
+ Update maven Mojos and AbstractJKubeTask to use GeneratorManager
  interface method instead of static method

Signed-off-by: Rohan Kumar <rohaan@redhat.com>
  • Loading branch information
rohanKanojia committed Mar 5, 2024
1 parent 0e5bcd2 commit 92a4d7c
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

import io.fabric8.kubernetes.client.KubernetesClient;
import org.eclipse.jkube.generator.api.GeneratorContext;
import org.eclipse.jkube.generator.api.GeneratorManager;
import org.eclipse.jkube.generator.api.DefaultGeneratorManager;
import org.eclipse.jkube.gradle.plugin.GradleLogger;
import org.eclipse.jkube.gradle.plugin.GradleUtil;
import org.eclipse.jkube.gradle.plugin.KubernetesExtension;
Expand All @@ -35,6 +35,7 @@
import org.eclipse.jkube.kit.common.util.ResourceUtil;
import org.eclipse.jkube.kit.config.access.ClusterAccess;
import org.eclipse.jkube.kit.config.access.ClusterConfiguration;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.resource.ProcessorConfig;
import org.eclipse.jkube.kit.config.resource.ResourceConfig;
Expand Down Expand Up @@ -64,6 +65,7 @@ public abstract class AbstractJKubeTask extends DefaultTask implements Kubernete
protected static final String DOCKER_BUILD_TIMESTAMP = "docker/build.timestamp";
protected List<ImageConfiguration> resolvedImages;
protected DefaultEnricherManager enricherManager;
protected GeneratorManager generatorManager;

protected AbstractJKubeTask(Class<? extends KubernetesExtension> extensionClass) {
kubernetesExtension = getProject().getExtensions().getByType(extensionClass);
Expand All @@ -87,6 +89,7 @@ private void init() {
kubernetesExtension.resources = updateResourceConfigNamespace(kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources);
ImageConfigResolver imageConfigResolver = new ImageConfigResolver();
try {
generatorManager = new DefaultGeneratorManager(initGeneratorContextBuilder().build());
resolvedImages = resolveImages(imageConfigResolver);
final JKubeEnricherContext context = JKubeEnricherContext.builder()
.project(kubernetesExtension.javaProject)
Expand Down Expand Up @@ -118,7 +121,7 @@ public KubernetesExtension getExtension() {
}

private List<ImageConfiguration> customizeConfig(List<ImageConfiguration> configs) {
return GeneratorManager.generate(configs, initGeneratorContextBuilder().build(), false);
return generatorManager.generate(configs, false);
}

private boolean isAnsiEnabled() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2019 Red Hat, Inc.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at:
*
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.jkube.kit.config.image;

import java.util.List;

public interface GeneratorManager {
/**
* Customize a given list of image configurations
*
* @param imageConfigs list of image configurations
* @param prePackagePhase if true this is called in a prepackage phase where no artifacts has been packaged in target/.
* @return Modified list of image configurations
*/
List<ImageConfiguration> generate(List<ImageConfiguration> imageConfigs, boolean prePackagePhase);
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,28 @@
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.ClassUtil;
import org.eclipse.jkube.kit.common.util.PluginServiceFactory;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;

/**
* Manager responsible for finding and calling generators
*/
public class GeneratorManager {
public class DefaultGeneratorManager implements GeneratorManager {

private static final String[] SERVICE_PATHS = new String[] {
"META-INF/jkube/generator-default",
"META-INF/jkube/jkube-generator-default",
"META-INF/jkube/generator",
"META-INF/jkube-generator"
};
private final GeneratorContext genCtx;

private GeneratorManager() {
public DefaultGeneratorManager(GeneratorContext context) {
this.genCtx = context;
}

public static List<ImageConfiguration> generate(List<ImageConfiguration> imageConfigs,
GeneratorContext genCtx, boolean prePackagePhase) {
@Override
public List<ImageConfiguration> generate(List<ImageConfiguration> imageConfigs, boolean prePackagePhase) {

final PluginServiceFactory<GeneratorContext> pluginFactory = new PluginServiceFactory<>(genCtx);
if (genCtx.isUseProjectClasspath()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.stream.Collectors;

import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.resource.ProcessorConfig;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -28,30 +29,30 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

class GeneratorManagerTest {
class DefaultGeneratorManagerTest {

private KitLogger logger;

private GeneratorContext generatorContext;
private GeneratorManager generatorManager;

@BeforeEach
void setUp() {
logger = spy(new KitLogger.SilentLogger());
final ProcessorConfig processorConfig = new ProcessorConfig();
processorConfig.setIncludes(Collections.singletonList("fake-generator"));
generatorContext = GeneratorContext.builder()
GeneratorContext generatorContext = GeneratorContext.builder()
.config(processorConfig)
.logger(logger)
.build();
generatorManager = new DefaultGeneratorManager(generatorContext);
}

@Test
void generate_withTestGenerator_shouldProcessImages() {
// Given
final List<ImageConfiguration> images = Collections.singletonList(new ImageConfiguration());
// When
final List<ImageConfiguration> result = GeneratorManager
.generate(images, generatorContext, false);
final List<ImageConfiguration> result = generatorManager.generate(images, false);
// Then
assertThat(result)
.isNotSameAs(images)
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.eclipse.jkube.generator.api.GeneratorManagerTest$TestGenerator
org.eclipse.jkube.generator.api.DefaultGeneratorManagerTest$TestGenerator
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@
import java.util.Optional;

import org.eclipse.jkube.generator.api.GeneratorContext;
import org.eclipse.jkube.generator.api.GeneratorManager;
import org.eclipse.jkube.generator.api.DefaultGeneratorManager;
import org.eclipse.jkube.kit.build.core.GavLabel;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy;
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.build.service.docker.DockerAccessFactory;
Expand Down Expand Up @@ -350,6 +351,7 @@ public abstract class AbstractDockerMojo extends AbstractMojo
protected boolean offline;

protected JavaProject javaProject;
protected GeneratorManager generatorManager;

@Override
public void contextualize(Context context) throws ContextException {
Expand Down Expand Up @@ -573,7 +575,8 @@ protected BuildServiceConfig.BuildServiceConfigBuilder buildServiceConfigBuilder
public List<ImageConfiguration> customizeConfig(List<ImageConfiguration> configs) {
log.info("Building Docker image");
try {
return GeneratorManager.generate(configs, generatorContextBuilder().build(), false);
generatorManager = new DefaultGeneratorManager(generatorContextBuilder().build());
return generatorManager.generate(configs, false);
} catch (DependencyResolutionRequiredException de) {
throw new IllegalArgumentException("Instructed to use project classpath, but cannot. Continuing build if we can: ", de);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@
import javax.validation.ConstraintViolationException;

import org.eclipse.jkube.generator.api.GeneratorContext;
import org.eclipse.jkube.generator.api.GeneratorManager;
import org.eclipse.jkube.kit.build.api.helper.ImageConfigResolver;
import org.eclipse.jkube.kit.build.api.helper.ConfigHelper;

import org.eclipse.jkube.generator.api.DefaultGeneratorManager;
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.common.util.MavenUtil;
import org.eclipse.jkube.kit.common.util.ResourceClassifier;
import org.eclipse.jkube.kit.common.util.validator.ResourceValidator;
import org.eclipse.jkube.kit.config.image.GeneratorManager;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy;
import org.eclipse.jkube.kit.config.resource.MappingConfig;
Expand Down Expand Up @@ -269,15 +271,15 @@ private List<ImageConfiguration> getResolvedImages(List<ImageConfiguration> imag
null, // no filter on image name yet (TODO: Maybe add this, too ?)
configs -> {
try {
GeneratorContext ctx = GeneratorContext.builder()
.config(extractGeneratorConfig())
.project(javaProject)
.runtimeMode(getRuntimeMode())
.logger(log)
.strategy(JKubeBuildStrategy.docker)
.useProjectClasspath(useProjectClasspath)
.build();
return GeneratorManager.generate(configs, ctx, true);
GeneratorManager generatorManager = new DefaultGeneratorManager(GeneratorContext.builder()
.config(extractGeneratorConfig())
.project(javaProject)
.runtimeMode(getRuntimeMode())
.logger(log)
.strategy(JKubeBuildStrategy.docker)
.useProjectClasspath(useProjectClasspath)
.build());
return generatorManager.generate(configs, true);
} catch (Exception e) {
throw new IllegalArgumentException("Cannot extract generator: " + e, e);
}
Expand Down

0 comments on commit 92a4d7c

Please sign in to comment.