diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java index 91e5fe82e9..8e08a7a26c 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/AbstractJKubeTask.java @@ -37,7 +37,6 @@ 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; import org.eclipse.jkube.kit.config.resource.ResourceServiceConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -173,7 +172,7 @@ private ResourceServiceConfig initResourceServiceConfig() { protected GeneratorContext.GeneratorContextBuilder initGeneratorContextBuilder() { return GeneratorContext.builder() - .config(extractGeneratorConfig()) + .config(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, kubernetesExtension.getProfileOrNull(), ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(), kubernetesExtension.getResourceEnvironmentOrNull()), kubernetesExtension.generator)) .project(kubernetesExtension.javaProject) .logger(kitLogger) .runtimeMode(kubernetesExtension.getRuntimeMode()) @@ -192,14 +191,6 @@ protected final List resolveResourceSourceDirectory() { } - protected ProcessorConfig extractGeneratorConfig() { - try { - return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, kubernetesExtension.getProfileOrNull(), ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(), kubernetesExtension.getResourceEnvironmentOrNull()), kubernetesExtension.generator); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot extract generator config: " + e, e); - } - } - protected List resolveImages(ImageConfigResolver imageConfigResolver) throws IOException { return initImageConfiguration( getBuildTimestamp(null, null, kubernetesExtension.javaProject.getBuildDirectory().getAbsolutePath(), diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java index a26f00cdcf..b7c53428f4 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesWatchTask.java @@ -22,7 +22,6 @@ import org.eclipse.jkube.kit.build.service.docker.watch.WatchContext; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.config.resource.ProcessorConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import org.eclipse.jkube.kit.profile.ProfileUtil; @@ -78,7 +77,7 @@ private WatcherContext createWatcherContext() throws IOException { return WatcherContext.builder() .buildContext(jKubeServiceHub.getConfiguration()) .watchContext(watchContext) - .config(extractWatcherConfig()) + .config(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.WATCHER_CONFIG, kubernetesExtension.getProfileOrNull(), ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(), kubernetesExtension.getResourceEnvironmentOrNull()), kubernetesExtension.watcher)) .logger(kitLogger) .newPodLogger(createLogger("[[C]][NEW][[C]] ")) .oldPodLogger(createLogger("[[R]][OLD][[R]] ")) @@ -87,14 +86,6 @@ private WatcherContext createWatcherContext() throws IOException { .build(); } - private ProcessorConfig extractWatcherConfig() { - try { - return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.WATCHER_CONFIG, kubernetesExtension.getProfileOrNull(), ResourceUtil.getFinalResourceDirs(kubernetesExtension.getResourceSourceDirectoryOrDefault(), kubernetesExtension.getResourceEnvironmentOrNull()), kubernetesExtension.watcher); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot extract watcher config: " + e, e); - } - } - private WatchContext getWatchContext() throws IOException { final DockerServiceHub hub = jKubeServiceHub.getDockerServiceHub(); return WatchContext.builder() diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeException.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeException.java index 16748c6b38..e4fbe7227b 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeException.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeException.java @@ -19,4 +19,25 @@ public JKubeException(String message) { super(message); } + public JKubeException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Convert exception into an instance of JKubeException + * + * @param message message of exception + * @param cause actual cause of exception + * @return {@link RuntimeException} wrapping actual cause + */ + public static RuntimeException launderThrowable(String message, Throwable cause) { + if (cause instanceof RuntimeException) { + return ((RuntimeException) cause); + } else if (cause instanceof Error) { + throw ((Error) cause); + } else if (cause instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + throw new JKubeException(message, cause); + } } diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeExceptionTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeExceptionTest.java new file mode 100644 index 0000000000..5d0720c53b --- /dev/null +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeExceptionTest.java @@ -0,0 +1,36 @@ +/* + * 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.common; + +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +class JKubeExceptionTest { + @Test + void launderThrowable_whenInvoked_shouldWrapExceptionAsJKubeException() { + // Given + IOException actualException = new IOException("I/O Error"); + + // When + assertThatExceptionOfType(JKubeException.class) + .isThrownBy(() -> { + throw JKubeException.launderThrowable("custom message", actualException); + }) + .withMessage("custom message") + .withCause(actualException); + } +} diff --git a/jkube-kit/profile/src/main/java/org/eclipse/jkube/kit/profile/ProfileUtil.java b/jkube-kit/profile/src/main/java/org/eclipse/jkube/kit/profile/ProfileUtil.java index 27f78882dd..e9e55161b8 100644 --- a/jkube-kit/profile/src/main/java/org/eclipse/jkube/kit/profile/ProfileUtil.java +++ b/jkube-kit/profile/src/main/java/org/eclipse/jkube/kit/profile/ProfileUtil.java @@ -14,6 +14,7 @@ package org.eclipse.jkube.kit.profile; import com.fasterxml.jackson.core.type.TypeReference; +import org.eclipse.jkube.kit.common.JKubeException; import org.eclipse.jkube.kit.common.util.ClassUtil; import org.eclipse.jkube.kit.common.util.Serialization; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; @@ -46,7 +47,7 @@ private ProfileUtil() {} // Default profile which will be always there public static final String DEFAULT_PROFILE = "default"; - public static Profile findProfile(String profileArg, List resourceDirs) throws IOException { + public static Profile findProfile(String profileArg, List resourceDirs) { return findProfile(profileArg, resourceDirs == null ? new File[0] : resourceDirs.toArray(new File[0])); } @@ -59,12 +60,11 @@ public static Profile findProfile(String profileArg, List resourceDirs) th * @param profileArg the profile's name * @param resourceDirs directories to check for profiles. * @return the profile found or the default profile if none of this name is given - * @throws IOException if there's a problem while performing IO operations. */ - public static Profile findProfile(String profileArg, File... resourceDirs) throws IOException { - try { - final String profile = profileArg == null ? DEFAULT_PROFILE : profileArg; - for (File resourceDir : resourceDirs) { + public static Profile findProfile(String profileArg, File... resourceDirs) { + final String profile = profileArg == null ? DEFAULT_PROFILE : profileArg; + for (File resourceDir : resourceDirs) { + try { Profile profileFound = lookup(profile, resourceDir); if (profileFound != null) { if (profileFound.getParentProfile() != null) { @@ -73,11 +73,11 @@ public static Profile findProfile(String profileArg, File... resourceDirs) throw } return profileFound; } + } catch (IOException ioException) { + throw JKubeException.launderThrowable("Error in looking up profile in " + resourceDir.getAbsolutePath(), ioException); } - throw new IllegalArgumentException("No profile '" + profile + "' defined"); - } catch (IOException e) { - throw new IOException("Error while looking up profile " + profileArg + ": " + e.getMessage(),e); } + throw new IllegalArgumentException("No profile '" + profile + "' defined"); } private static Profile inheritFromParentProfile(Profile aProfile, File resourceDir) throws IOException { @@ -100,14 +100,13 @@ private static Profile inheritFromParentProfile(Profile aProfile, File resourceD * @param resourceDirs resource directory where to lookup the profile (in addition to a classpath lookup) * @return the merged configuration which can be empty if no profile is given * @param config the provided configuration - * @throws IOException */ public static ProcessorConfig blendProfileWithConfiguration(ProcessorConfigurationExtractor configExtractor, String profile, List resourceDirs, - ProcessorConfig config) throws IOException { + ProcessorConfig config) { // Get specified profile or the default profile - ProcessorConfig profileConfig = extractProcesssorConfiguration(configExtractor, profile, resourceDirs); + ProcessorConfig profileConfig = extractProcessorConfiguration(configExtractor, profile, resourceDirs); return ProcessorConfig.mergeProcessorConfigs(config, profileConfig); } @@ -141,9 +140,8 @@ public static Profile lookup(String name, File directory) throws IOException { return mergeProfiles(profiles); } - private static ProcessorConfig extractProcesssorConfiguration(ProcessorConfigurationExtractor extractor, - String profile, - List resourceDirs) throws IOException { + private static ProcessorConfig extractProcessorConfiguration(ProcessorConfigurationExtractor extractor, + String profile, List resourceDirs) { Profile profileFound = findProfile(profile, resourceDirs); return extractor.extract(profileFound); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java index 3b77d7c29a..f4b3c16e6c 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java @@ -598,7 +598,7 @@ protected JKubeBuildStrategy getJKubeBuildStrategy() { public EnricherContext getEnricherContext() throws DependencyResolutionRequiredException { return JKubeEnricherContext.builder() .project(MavenUtil.convertMavenProjectToJKubeProject(project, session)) - .processorConfig(extractEnricherConfig()) + .processorConfig(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.ENRICHER_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), enricher)) .images(getResolvedImages()) .resources(resources) .log(log) @@ -608,31 +608,13 @@ public EnricherContext getEnricherContext() throws DependencyResolutionRequiredE // Get generator context protected GeneratorContext.GeneratorContextBuilder generatorContextBuilder() throws DependencyResolutionRequiredException { return GeneratorContext.builder() - .config(extractGeneratorConfig()) + .config(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), generator)) .project(MavenUtil.convertMavenProjectToJKubeProject(project, session)) .logger(log) .runtimeMode(runtimeMode) .useProjectClasspath(useProjectClasspath); } - // Get generator config - protected ProcessorConfig extractGeneratorConfig() { - try { - return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), generator); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot extract generator config: " + e, e); - } - } - - // Get enricher config - protected ProcessorConfig extractEnricherConfig() { - try { - return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.ENRICHER_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), enricher); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot extract enricher config: " + e, e); - } - } - /** * Determine whether to enable colorized log messages * @return true if log statements should be colorized diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java index cbe996aa62..4b0eec03cd 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojo.java @@ -29,7 +29,6 @@ import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; -import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import org.eclipse.jkube.kit.profile.ProfileUtil; import org.eclipse.jkube.maven.plugin.mojo.ManifestProvider; @@ -116,7 +115,7 @@ private WatcherContext getWatcherContext() throws MojoExecutionException { return WatcherContext.builder() .buildContext(buildContext) .watchContext(watchContext) - .config(extractWatcherConfig()) + .config(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.WATCHER_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), watcher)) .logger(log) .newPodLogger(createLogger("[[C]][NEW][[C]] ")) .oldPodLogger(createLogger("[[R]][OLD][[R]] ")) @@ -133,7 +132,7 @@ private WatcherContext getWatcherContext() throws MojoExecutionException { @Override protected GeneratorContext.GeneratorContextBuilder generatorContextBuilder() throws DependencyResolutionRequiredException { return GeneratorContext.builder() - .config(extractGeneratorConfig()) + .config(ProfileUtil.blendProfileWithConfiguration(ProfileUtil.GENERATOR_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), generator)) .project(MavenUtil.convertMavenProjectToJKubeProject(project, session)) .logger(log) .runtimeMode(getConfiguredRuntimeMode()) @@ -141,15 +140,6 @@ protected GeneratorContext.GeneratorContextBuilder generatorContextBuilder() thr .generatorMode(GeneratorMode.WATCH); } - // Get watcher config - private ProcessorConfig extractWatcherConfig() { - try { - return ProfileUtil.blendProfileWithConfiguration(ProfileUtil.WATCHER_CONFIG, profile, ResourceUtil.getFinalResourceDirs(resourceDir, environment), watcher); - } catch (IOException e) { - throw new IllegalArgumentException("Cannot extract watcher config: " + e, e); - } - } - protected KitLogger createLogger(String prefix) { return new AnsiLogger(getLog(), useColor, verbose, !settings.getInteractiveMode(), getLogPrefix() + prefix); }