Skip to content

Commit

Permalink
fix: config properties resolved for generated images
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Nuri <marc@marcnuri.com>
  • Loading branch information
manusa authored Feb 11, 2025
1 parent d0c7dc4 commit 407dc6e
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 20 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ Usage:
./scripts/extract-changelog-for-version.sh 1.3.37 5
```
### 1.19-SNAPSHOT
* Fix #3642: Config properties resolved for generated images
* Fix #3660: remote-dev issue with ssh user (locked)

### 1.18.0 (2025-01-15)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public final ImageConfiguration resolve(ImageConfiguration fromConfig, JavaProje
final String prefix = StringUtils.isBlank(fromConfig.getPropertyResolverPrefix()) ?
DEFAULT_PREFIX : fromConfig.getPropertyResolverPrefix();
final ValueProvider valueProvider = new ValueProvider(prefix, properties, DEFAULT_MODE);
return ImageConfiguration.builder()
final ImageConfiguration configuration = fromConfig != null ? fromConfig : new ImageConfiguration();
return configuration.toBuilder()
.name(valueProvider.getString(ConfigKey.NAME, fromConfig.getName()))
.alias(valueProvider.getString(ConfigKey.ALIAS, fromConfig.getAlias()))
.registry(valueProvider.getString(ConfigKey.REGISTRY, fromConfig.getRegistry()))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,18 +93,19 @@ private List<ImageConfiguration> resolveImages(List<ImageConfiguration> unresolv
}

private List<ImageConfiguration> generateImages(List<ImageConfiguration> imageConfigs) {
List<ImageConfiguration> ret = imageConfigs;
final KitLogger log = genCtx.getLogger();
final List<Generator> usableGenerators = createUsableGeneratorList();
log.verbose("Generators:");
for (Generator generator : usableGenerators) {
log.verbose(" - %s", generator.getName());
if (generator.isApplicable(ret)) {
if (generator.isApplicable(imageConfigs)) {
log.info("Running generator %s", generator.getName());
ret = generator.customize(ret, genCtx.isPrePackagePhase());
imageConfigs = generator.customize(imageConfigs, genCtx.isPrePackagePhase());
}
}
return ret;
return imageConfigs.stream()
.map(ic -> propertyConfigResolver.resolve(ic, genCtx.getProject()))
.collect(Collectors.toList());
}

private List<ImageConfiguration> filterImages(List<ImageConfiguration> imagesToFilter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
*/
package org.eclipse.jkube.generator.api;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
Expand All @@ -38,24 +40,18 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

class DefaultGeneratorManagerTest {

private KitLogger logger;
private ByteArrayOutputStream out;

private ImageConfiguration baseImageConfig;
private GeneratorManager generatorManager;
private GeneratorContext generatorContext;

@BeforeEach
void setUp() {
logger = spy(new KitLogger.SilentLogger());
out = new ByteArrayOutputStream();
final ProcessorConfig processorConfig = new ProcessorConfig();
processorConfig.setIncludes(Collections.singletonList("fake-generator"));
JavaProject javaProject = JavaProject.builder()
Expand All @@ -73,7 +69,7 @@ void setUp() {
.build();
generatorContext = GeneratorContext.builder()
.config(processorConfig)
.logger(logger)
.logger(new KitLogger.PrintStreamLogger(new PrintStream(out)))
.project(javaProject)
.build();
generatorManager = new DefaultGeneratorManager(generatorContext);
Expand All @@ -91,7 +87,28 @@ void withEmptyImageConfigurations_shouldCreteImageConfigViaGenerator() {
.singleElement()
.hasFieldOrPropertyWithValue("alias", "processed-by-test")
.hasFieldOrPropertyWithValue("name", "generated-by-test");
verify(logger, times(1)).info("Running generator %s", "fake-generator");
assertThat(out.toString())
.contains("Running generator fake-generator");
}

@Test
void withEmptyImageConfigurationsAndPropertyOverrides_shouldCreteImageConfigViaGenerator() {
// Given
final List<ImageConfiguration> images = Collections.emptyList();
generatorContext.getProject().getProperties().put("jkube.container-image.name", "overridden-image-name");
generatorContext.getProject().getProperties().put("jkube.container-image.platforms.1", "linux/amd64");
generatorContext.getProject().getProperties().put("jkube.container-image.platforms.2", "linux/arm64");
// When
final List<ImageConfiguration> result = generatorManager.generateAndMerge(images);
// Then
assertThat(result)
.isNotSameAs(images)
.singleElement()
.hasFieldOrPropertyWithValue("alias", "processed-by-test")
.hasFieldOrPropertyWithValue("name", "overridden-image-name")
.hasFieldOrPropertyWithValue("build.platforms", Arrays.asList("linux/amd64", "linux/arm64"));
assertThat(out.toString())
.contains("Running generator fake-generator");
}

@Test
Expand All @@ -116,7 +133,8 @@ void withSimpleImageConfiguration_shouldMergeWithImageConfigGeneratedViaGenerato
.hasSize(1)
.extracting(ImageConfiguration::getAlias)
.contains("processed-by-test");
verify(logger, times(1)).info("Running generator %s", "fake-generator");
assertThat(out.toString())
.contains("Running generator fake-generator");
}

@Test
Expand All @@ -126,7 +144,8 @@ void whenNoMatchForImageFilter_thenLogWarning() {
// When
new DefaultGeneratorManager(generatorContext).generateAndMerge(Collections.singletonList(baseImageConfig));
// Then
verify(logger).warn("None of the resolved images [%s] match the configured filter '%s'", "foo/bar:latest", "i-dont-exist");
assertThat(out.toString())
.contains("None of the resolved images [foo/bar:latest] match the configured filter 'i-dont-exist'");
}

@Test
Expand All @@ -136,7 +155,8 @@ void whenNoMatchForMultipleImageNameFilters_thenLogWarning() {
// When
new DefaultGeneratorManager(generatorContext).generateAndMerge(Collections.singletonList(baseImageConfig));
// Then
verify(logger).warn("None of the resolved images [%s] match the configured filter '%s'", "foo/bar:latest", "filter1,filter2");
assertThat(out.toString())
.contains("None of the resolved images [foo/bar:latest] match the configured filter 'filter1,filter2'");
}

@Test
Expand All @@ -153,8 +173,9 @@ void whenDockerfileUsed_thenLogDockerfilePathAndContextDir(@TempDir File tempora
// When
generatorManager.generateAndMerge(images);
// Then
verify(logger).info(eq("Using Dockerfile: %s"), anyString());
verify(logger).info(eq("Using Docker Context Directory: %s"), any(File.class));
assertThat(out.toString())
.contains("Using Dockerfile: " + dockerFile.getAbsolutePath())
.contains("Using Docker Context Directory: " + temporaryFolder.getAbsolutePath());
}

@Nested
Expand Down Expand Up @@ -332,6 +353,7 @@ void withPrefix() {
}

// Loaded from META-INF/jkube/generator-default
@SuppressWarnings("unused")
public static final class TestGenerator implements Generator {

public TestGenerator(GeneratorContext ignored) {
Expand Down

0 comments on commit 407dc6e

Please sign in to comment.