Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: introduce JKubeConfiguration#pushRegistryConfig settings #3064

Merged
merged 1 commit into from
May 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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();
}
}
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