Skip to content

Commit

Permalink
refactor: introduce JKubeConfiguration#pushRegistryConfig settings
Browse files Browse the repository at this point in the history
Signed-off-by: Marc Nuri <marc@marcnuri.com>
  • Loading branch information
manusa committed May 16, 2024
1 parent 91cef56 commit 19fcb86
Show file tree
Hide file tree
Showing 17 changed files with 52 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,20 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder() {
.reactorProjects(Collections.singletonList(kubernetesExtension.javaProject))
.sourceDirectory(kubernetesExtension.getBuildSourceDirectoryOrDefault())
.outputDirectory(kubernetesExtension.getBuildOutputDirectoryOrDefault())
.registryConfig(RegistryConfig.builder()
.pullRegistryConfig(RegistryConfig.builder()
.settings(Collections.emptyList())
.authConfig(kubernetesExtension.authConfig != null ? kubernetesExtension.authConfig.toMap() : null)
.skipExtendedAuth(kubernetesExtension.getSkipExtendedAuth().getOrElse(false))
.passwordDecryptionMethod(s -> s)
.registry(kubernetesExtension.getPullRegistryOrDefault())
.build())
.pushRegistryConfig(RegistryConfig.builder()
.settings(Collections.emptyList())
.authConfig(kubernetesExtension.authConfig != null ? kubernetesExtension.authConfig.toMap() : null)
.skipExtendedAuth(kubernetesExtension.getSkipExtendedAuth().getOrElse(false))
.passwordDecryptionMethod(s -> s)
.registry(kubernetesExtension.getPushRegistryOrNull())
.build())
.build())
.clusterAccess(clusterAccess)
.offline(kubernetesExtension.getOfflineOrDefault())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ private void autoPullBaseImage(ImageConfiguration imageConfig, ImagePullManager
}
for (String fromImage : fromImages) {
if (fromImage != null && !AssemblyManager.SCRATCH_IMAGE.equals(fromImage)) {
registryService.pullImageWithPolicy(fromImage, imagePullManager, configuration.getRegistryConfig(), buildConfig);
registryService.pullImageWithPolicy(fromImage, imagePullManager, configuration.getPullRegistryConfig(), buildConfig);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ public class JKubeConfiguration implements Serializable {
private String sourceDirectory;
private String outputDirectory;
private Map<String, String> buildArgs;
private RegistryConfig registryConfig;
private RegistryConfig pullRegistryConfig;
private RegistryConfig pushRegistryConfig;
private List<JavaProject> reactorProjects;

public File getBasedir() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,8 @@ void builder() {
.sourceDirectory("src/main/jkube")
.outputDirectory("target")
.buildArgs(Collections.singletonMap("foo", "bar"))
.registryConfig(RegistryConfig.builder()
.registry("r.example.com")
.build());
.pullRegistryConfig(RegistryConfig.builder().registry("pull.example.com").build())
.pushRegistryConfig(RegistryConfig.builder().registry("push.example.com").build());

// When
JKubeConfiguration jKubeConfiguration = builder.build();
Expand All @@ -113,7 +112,8 @@ void builder() {
.hasFieldOrPropertyWithValue("sourceDirectory", "src/main/jkube")
.hasFieldOrPropertyWithValue("outputDirectory", "target")
.hasFieldOrPropertyWithValue("buildArgs", Collections.singletonMap("foo", "bar"))
.hasFieldOrPropertyWithValue("registryConfig.registry", "r.example.com");
.hasFieldOrPropertyWithValue("pullRegistryConfig.registry", "pull.example.com")
.hasFieldOrPropertyWithValue("pushRegistryConfig.registry", "push.example.com");
}

/**
Expand All @@ -134,7 +134,8 @@ void rawDeserialization() throws IOException {
.hasFieldOrPropertyWithValue("sourceDirectory", "src")
.hasFieldOrPropertyWithValue("outputDirectory", "target")
.hasFieldOrPropertyWithValue("buildArgs.http_proxy", "127.0.0.1:8001")
.hasFieldOrPropertyWithValue("registryConfig.registry", "the-registry")
.hasFieldOrPropertyWithValue("pullRegistryConfig.registry", "the-pull-registry")
.hasFieldOrPropertyWithValue("pushRegistryConfig.registry", "the-push-registry")
.extracting(JKubeConfiguration::getReactorProjects).asList().isEmpty();
}
}
9 changes: 6 additions & 3 deletions jkube-kit/common/src/test/resources/jkube-configuration.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
"buildArgs": {
"http_proxy": "127.0.0.1:8001"
},
"registryConfig": {
"registry": "the-registry"
"pullRegistryConfig": {
"registry": "the-pull-registry"
},
"pushRegistryConfig": {
"registry": "the-push-registry"
},
"reactorProjects": []
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,11 @@ public void buildSingleImage(ImageConfiguration imageConfiguration) throws JKube
if (imageConfiguration.getBuildConfiguration().isDockerFileMode()) {
throw new JKubeServiceException("Dockerfile mode is not supported with JIB build strategy");
}
final ImageConfiguration imageConfigToBuild = prependPushRegistry(imageConfiguration, configuration.getRegistryConfig());
final ImageConfiguration imageConfigToBuild = prependPushRegistry(imageConfiguration, configuration.getPullRegistryConfig());
final BuildDirs buildDirs = new BuildDirs(imageConfigToBuild.getName(), configuration);
final String pullRegistry = getPullRegistry(imageConfigToBuild, configuration.getRegistryConfig());
final String pullRegistry = getPullRegistry(imageConfigToBuild, configuration.getPullRegistryConfig());
final Credential pullRegistryCredential = getRegistryCredentials(
configuration.getRegistryConfig(), false, pullRegistry);
configuration.getPullRegistryConfig(), false, pullRegistry);
final JibContainerBuilder containerBuilder = containerFromImageConfiguration(imageConfigToBuild, pullRegistry, pullRegistryCredential);

final Map<Assembly, List<AssemblyFileEntry>> layers = AssemblyManager.getInstance()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
import org.eclipse.jkube.kit.common.JKubeConfiguration;
import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy;
import org.eclipse.jkube.kit.common.BuildRecreateMode;
import org.eclipse.jkube.kit.config.resource.RuntimeMode;
import org.eclipse.jkube.kit.config.service.AbstractImageBuildService;
import org.eclipse.jkube.kit.config.service.BuildServiceConfig;
Expand Down Expand Up @@ -131,7 +130,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService
initClient();
String buildName = null;
try {
final ImageConfiguration applicableImageConfig = getApplicableImageConfiguration(imageConfig, jKubeConfiguration.getRegistryConfig());
final ImageConfiguration applicableImageConfig = getApplicableImageConfiguration(imageConfig, jKubeConfiguration.getPullRegistryConfig());
ImageName imageName = new ImageName(applicableImageConfig.getName());

File dockerTar = createBuildArchive(jKubeServiceHub, applicableImageConfig);
Expand Down Expand Up @@ -343,10 +342,10 @@ private boolean checkOrCreatePullSecret(OpenShiftClient client, KubernetesListBu
fromImage = extractBaseFromConfiguration(buildConfig);
}

String pullRegistry = getApplicablePullRegistryFrom(fromImage, jKubeConfiguration.getRegistryConfig());
String pullRegistry = getApplicablePullRegistryFrom(fromImage, jKubeConfiguration.getPullRegistryConfig());

if (pullRegistry != null) {
RegistryConfig registryConfig = jKubeConfiguration.getRegistryConfig();
RegistryConfig registryConfig = jKubeConfiguration.getPullRegistryConfig();
final AuthConfig authConfig = new AuthConfigFactory(log).createAuthConfig(false, registryConfig.isSkipExtendedAuth(), registryConfig.getAuthConfig(),
registryConfig.getSettings(), null, pullRegistry, registryConfig.getPasswordDecryptionMethod());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ void setUp(@TempDir Path projectRoot) throws IOException {
.outputDirectory(targetDirectory.toFile())
.properties(new Properties())
.build())
.registryConfig(RegistryConfig.builder().settings(Collections.emptyList()).build())
.pullRegistryConfig(RegistryConfig.builder().settings(Collections.emptyList()).build())
.pushRegistryConfig(RegistryConfig.builder().settings(Collections.emptyList()).build())
.build())
.build();
jibBuildService = new JibImageBuildService(hub);
Expand Down Expand Up @@ -188,7 +189,7 @@ void setUp() {
.registry("gcr.io")
.build();
hub = hub.toBuilder().configuration(hub.getConfiguration().toBuilder()
.registryConfig(RegistryConfig.builder()
.pullRegistryConfig(RegistryConfig.builder()
.registry("gcr.io")
.authConfig(Collections.emptyMap())
.settings(Collections.emptyList())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ void build_shouldCallPluginServiceAddFiles() throws JKubeServiceException {
@Test
void build_withRegistryConfig_shouldPrependRegistryToImageName() throws JKubeServiceException {
// Given
when(mockedServiceHub.getConfiguration().getRegistryConfig())
when(mockedServiceHub.getConfiguration().getPullRegistryConfig())
.thenReturn(RegistryConfig.builder().registry("quay.io").settings(Collections.emptyList()).build());
when(mockedServiceHub.getConfiguration().getProject())
.thenReturn(JavaProject.builder().baseDirectory(temporaryFolder.toFile()).build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ void init(@TempDir Path temporaryFolder) throws Exception {
.baseDirectory(baseDirectory)
.buildDirectory(target)
.build())
.registryConfig(RegistryConfig.builder().build())
.pullRegistryConfig(RegistryConfig.builder().build())
.build());

image = ImageConfiguration.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
Expand Down Expand Up @@ -154,10 +153,10 @@ public void uploadHelmChart(HelmConfig helm) throws BadUploadException, IOExcept
final HelmRepository helmRepository = selectHelmRepository(helm);
if (isRepositoryValid(helmRepository)) {
final List<RegistryServerConfiguration> registryServerConfigurations = Optional
.ofNullable(jKubeConfiguration).map(JKubeConfiguration::getRegistryConfig).map(RegistryConfig::getSettings)
.ofNullable(jKubeConfiguration).map(JKubeConfiguration::getPullRegistryConfig).map(RegistryConfig::getSettings)
.orElse(Collections.emptyList());
final UnaryOperator<String> passwordDecryptor = Optional.ofNullable(jKubeConfiguration)
.map(JKubeConfiguration::getRegistryConfig).map(RegistryConfig::getPasswordDecryptionMethod)
.map(JKubeConfiguration::getPullRegistryConfig).map(RegistryConfig::getPasswordDecryptionMethod)
.orElse(s -> s);
setAuthentication(helmRepository, logger, registryServerConfigurations, passwordDecryptor);
uploadHelmChart(helm, helmRepository);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void setUp(@TempDir Path tempDir) throws IOException {
.tarballOutputDir(helmOutputDirectory.toFile().getAbsolutePath());
jKubeConfiguration = JKubeConfiguration.builder()
.project(JavaProject.builder().properties(new Properties()).build())
.registryConfig(RegistryConfig.builder().settings(new ArrayList<>()).build()).build();
.pullRegistryConfig(RegistryConfig.builder().settings(new ArrayList<>()).build()).build();
resourceServiceConfig = new ResourceServiceConfig();
helmService = new HelmService(jKubeConfiguration, resourceServiceConfig, new KitLogger.SilentLogger());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ void setUp(@TempDir Path temporaryFolder) throws IOException {
helmService = new HelmService(
JKubeConfiguration.builder()
.project(JavaProject.builder().properties(new Properties()).build())
.registryConfig(RegistryConfig.builder()
.pullRegistryConfig(RegistryConfig.builder()
.settings(Collections.singletonList(registryServerConfiguration)).build())
.build(),
new ResourceServiceConfig(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,10 @@ public abstract class AbstractDockerMojo extends AbstractMojo
@Parameter(property = "jkube.docker.pull.registry")
protected String pullRegistry;

// Registry to use for push operations if no registry is specified
@Parameter(property = "jkube.docker.push.registry")
protected String pushRegistry;

/**
* Build mode when build is performed.
* Can be either "s2i" for an s2i binary build mode (in case of OpenShift) or
Expand Down Expand Up @@ -428,7 +432,8 @@ protected JKubeConfiguration initJKubeConfiguration() throws DependencyResolutio
.outputDirectory(outputDirectory)
.reactorProjects(Collections.singletonList(javaProject))
.buildArgs(buildArgs)
.registryConfig(getRegistryConfig(pullRegistry))
.pullRegistryConfig(getRegistryConfig(pullRegistry))
.pushRegistryConfig(getRegistryConfig(pushRegistry))
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,13 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder(Java
.configuration(JKubeConfiguration.builder()
.project(javaProject)
.reactorProjects(Collections.singletonList(javaProject))
.registryConfig(RegistryConfig.builder()
// TODO: Should provide same values as AbstractDockerMojo#getRegistryConfig
// AbstractDockerMojo should be eventually removed in favor of AbstractJKubeMojo
.pullRegistryConfig(RegistryConfig.builder()
.settings(MavenUtil.getRegistryServerFromMavenSettings(settings))
.passwordDecryptionMethod(this::decrypt)
.build())
.pushRegistryConfig(RegistryConfig.builder()
.settings(MavenUtil.getRegistryServerFromMavenSettings(settings))
.passwordDecryptionMethod(this::decrypt)
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ public class PushMojo extends AbstractDockerMojo {
@Parameter(property = "jkube.skip.push", defaultValue = "false")
protected boolean skipPush;

// Registry to use for push operations if no registry is specified
@Parameter(property = "jkube.docker.push.registry")
private String pushRegistry;

/**
* Skip building tags
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ void execute_withValidMavenSettings_shouldUpload() throws Exception {
// When
helmPushMojo.execute();
// Then
assertThat(helmPushMojo.jkubeServiceHub.getConfiguration().getRegistryConfig().getSettings()).singleElement()
assertThat(helmPushMojo.jkubeServiceHub.getConfiguration().getPullRegistryConfig().getSettings()).singleElement()
.isEqualTo(RegistryServerConfiguration.builder()
.id("SNAP-REPO").username("mavenUser").password("mavenPassword").configuration(new HashMap<>()).build());
assertThat(helmServiceMockedConstruction.constructed()).hasSize(1);
Expand Down

0 comments on commit 19fcb86

Please sign in to comment.