From eeb263f71956c3954881447429ebfe970ddd8c83 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Mon, 17 Oct 2022 22:47:39 +0530 Subject: [PATCH] refactor : Use SummaryService as injected object rather than static util Signed-off-by: Rohan Kumar --- .../gradle/plugin/task/AbstractJKubeTask.java | 24 +-- .../plugin/task/KubernetesApplyTask.java | 17 +- .../plugin/task/KubernetesBuildTask.java | 6 +- .../plugin/task/KubernetesDebugTask.java | 5 +- .../plugin/task/KubernetesHelmPushTask.java | 7 +- .../plugin/task/KubernetesHelmTask.java | 7 +- .../gradle/plugin/task/KubernetesLogTask.java | 5 +- .../plugin/task/KubernetesPushTask.java | 8 +- .../plugin/task/KubernetesResourceTask.java | 9 +- .../plugin/task/KubernetesUndeployTask.java | 8 +- .../plugin/task/KubernetesWatchTask.java | 12 +- .../jkube/gradle/plugin/GradleUtilTest.java | 32 ++++ .../plugin/task/KubernetesApplyTaskTest.java | 133 +++++++++----- .../plugin/task/KubernetesPushTaskTest.java | 85 +++++---- .../task/KubernetesUndeployTaskTest.java | 83 +++++---- .../build/api/assembly/AssemblyManager.java | 7 +- ...mblyManagerCreateDockerTarArchiveTest.java | 21 ++- .../build/service/docker/ArchiveService.java | 18 +- .../build/service/docker/BuildService.java | 81 +++++---- .../build/service/docker/RegistryService.java | 6 +- .../build/service/docker/WatchService.java | 77 ++++---- .../service/docker/BuildServiceTest.java | 7 +- .../service/docker/RegistryServiceTest.java | 7 +- .../jkube/kit/service/jib/JibServiceUtil.java | 16 +- .../kit/service/jib/JibServiceUtilTest.java | 15 +- .../jkube/kit/common/util/MavenUtilTest.java | 26 +++ .../jkube/kit/common/JKubeConfiguration.java | 4 + .../SummaryService.java} | 168 +++++++++--------- .../kit/common/JKubeConfigurationTest.java | 11 ++ .../SummaryServiceTest.java} | 96 +++++----- .../kit/config/resource/ResourceService.java | 3 +- .../kit/config/service/ApplyService.java | 10 +- .../kit/config/service/JKubeServiceHub.java | 15 +- .../kubernetes/DockerBuildService.java | 15 +- .../service/kubernetes/JibBuildService.java | 23 +-- .../kubernetes/KubernetesUndeployService.java | 5 +- .../kubernetes/SummaryServiceUtil.java | 40 +++++ .../openshift/OpenShiftBuildServiceUtils.java | 7 +- .../openshift/OpenshiftBuildService.java | 7 +- .../kit/config/service/ApplyServiceTest.java | 5 +- .../JKubeServiceHubBuildServiceTest.java | 8 +- .../kubernetes/DockerBuildServiceTest.java | 12 +- .../kubernetes/JibBuildServiceTest.java | 8 +- .../kubernetes/SummaryServiceUtilTest.java | 107 +++++++++++ .../openshift/OpenShiftBuildServiceTest.java | 2 +- .../OpenShiftBuildServiceUtilsTest.java | 4 +- .../service/plugins/PluginManagerTest.java | 2 +- .../service/plugins/PluginServiceTest.java | 2 +- .../kit/enricher/api/EnricherContext.java | 2 + .../enricher/api/JKubeEnricherContext.java | 6 +- .../api/util/KubernetesResourceUtil.java | 10 +- .../enricher/generic/ConfigMapEnricher.java | 5 +- .../ContainerEnvJavaOptionsMergeEnricher.java | 3 +- ...trollerViaPluginConfigurationEnricher.java | 3 +- .../jkube/enricher/generic/DebugEnricher.java | 3 +- .../generic/DefaultControllerEnricher.java | 3 +- .../generic/DefaultMetadataEnricher.java | 3 +- .../generic/DefaultNamespaceEnricher.java | 5 +- .../generic/DefaultServiceEnricher.java | 3 +- .../enricher/generic/DependencyEnricher.java | 3 +- .../generic/DockerRegistrySecretEnricher.java | 3 +- .../generic/FileDataSecretEnricher.java | 3 +- .../jkube/enricher/generic/GitEnricher.java | 3 +- .../jkube/enricher/generic/ImageEnricher.java | 3 +- .../generic/ImagePullPolicyEnricher.java | 3 +- .../enricher/generic/IngressEnricher.java | 3 +- .../generic/MavenIssueManagementEnricher.java | 3 +- .../enricher/generic/MavenScmEnricher.java | 3 +- .../jkube/enricher/generic/NameEnricher.java | 3 +- .../generic/PodAnnotationEnricher.java | 3 +- .../enricher/generic/PortNameEnricher.java | 3 +- .../generic/ProjectLabelEnricher.java | 3 +- .../generic/ReplicaCountEnricher.java | 3 +- .../generic/RevisionHistoryEnricher.java | 3 +- .../enricher/generic/SecretEnricher.java | 5 +- .../generic/ServiceAccountEnricher.java | 5 +- .../generic/TriggersAnnotationEnricher.java | 3 +- .../generic/VolumePermissionEnricher.java | 4 +- .../generic/openshift/AutoTLSEnricher.java | 3 +- .../openshift/DeploymentConfigEnricher.java | 3 +- .../openshift/ImageChangeTriggerEnricher.java | 3 +- .../generic/openshift/ProjectEnricher.java | 3 +- .../generic/openshift/RouteEnricher.java | 3 +- .../DefaultControllerEnricherCreateTest.java | 4 + .../DefaultControllerEnricherTest.java | 4 + .../generic/DefaultNamespaceEnricherTest.java | 4 + ...ultServiceEnricherAddMissingPartsTest.java | 6 +- .../generic/DependencyEnricherTest.java | 5 +- .../DockerRegistrySecretEnricherTest.java | 6 +- .../generic/ImagePullPolicyEnricherTest.java | 5 +- .../IngressEnricherBehavioralTest.java | 4 + .../generic/PodAnnotationEnricherTest.java | 5 + .../generic/ReplicaCountEnricherTest.java | 4 + .../generic/ServiceAccountEnricherTest.java | 4 + .../DeploymentConfigEnricherTest.java | 6 +- .../openshift/ProjectEnricherTest.java | 3 +- .../RouteEnricherBehavioralTest.java | 4 + .../specific/DockerHealthCheckEnricher.java | 3 +- .../specific/KarafHealthCheckEnricher.java | 5 +- .../enricher/specific/PrometheusEnricher.java | 3 +- .../specific/ServiceDiscoveryEnricher.java | 3 +- .../specific/WebAppHealthCheckEnricher.java | 3 +- .../jkube/generator/api/GeneratorManager.java | 6 +- .../generator/api/GeneratorManagerTest.java | 6 +- .../MicronautHealthCheckEnricher.java | 3 +- .../MicronautHealthCheckEnricherTest.java | 3 + .../OpenLibertyHealthCheckEnricher.java | 3 +- .../enricher/QuarkusHealthCheckEnricher.java | 3 +- .../QuarkusHealthCheckEnricherTest.java | 3 + .../SpringBootHealthCheckEnricher.java | 3 +- .../springboot/watcher/SpringBootWatcher.java | 3 +- .../ThorntailV2HealthCheckEnricher.java | 3 +- .../enricher/VertxHealthCheckEnricher.java | 3 +- .../VertxHealthCheckEnricherTest.java | 4 + .../WildflyJARHealthCheckEnricher.java | 3 +- .../jkube/kit/resource/helm/HelmService.java | 15 +- .../kit/resource/helm/HelmServiceIT.java | 3 +- .../kit/resource/helm/HelmServiceTest.java | 4 +- .../service/DefaultResourceService.java | 8 +- .../jkube/kit/resource/service/WriteUtil.java | 10 +- .../service/DefaultResourceServiceTest.java | 7 +- .../kit/resource/service/WriteUtilTest.java | 12 +- .../eclipse/jkube/watcher/api/Watcher.java | 4 +- .../jkube/watcher/api/WatcherManager.java | 2 +- .../jkube/watcher/api/WatcherManagerTest.java | 3 +- .../watcher/standard/DockerImageWatcher.java | 5 +- .../standard/DockerImageWatcherTest.java | 11 +- .../plugin/mojo/build/AbstractDockerMojo.java | 26 +-- .../plugin/mojo/build/AbstractJKubeMojo.java | 23 ++- .../maven/plugin/mojo/build/ApplyMojo.java | 18 +- .../maven/plugin/mojo/build/HelmMojo.java | 5 +- .../maven/plugin/mojo/build/HelmPushMojo.java | 5 +- .../maven/plugin/mojo/build/PushMojo.java | 6 +- .../maven/plugin/mojo/build/ResourceMojo.java | 10 +- .../plugin/mojo/develop/UndeployMojo.java | 5 +- .../maven/plugin/mojo/develop/WatchMojo.java | 12 +- .../build/ApplyMojoFailureScenariosTest.java | 109 ++++++++++++ .../plugin/mojo/build/ApplyMojoTest.java | 4 +- .../plugin/mojo/build/BuildMojoTest.java | 150 ++++++++++++++-- .../maven/plugin/mojo/build/HelmMojoTest.java | 3 + .../plugin/mojo/build/ResourceMojoTest.java | 7 +- .../plugin/mojo/develop/UndeployMojoTest.java | 25 ++- .../plugin/mojo/develop/WatchMojoTest.java | 4 +- 143 files changed, 1353 insertions(+), 669 deletions(-) rename jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/{util/SummaryUtil.java => service/SummaryService.java} (67%) rename jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/{SummaryUtilTest.java => service/SummaryServiceTest.java} (61%) create mode 100644 jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtil.java create mode 100644 jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtilTest.java create mode 100644 kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoFailureScenariosTest.java 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 262dc8e3ab..f28d93749b 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 @@ -30,7 +30,6 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.RegistryConfig; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -49,6 +48,7 @@ import static org.eclipse.jkube.kit.build.service.docker.helper.ConfigHelper.initImageConfiguration; import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.updateResourceConfigNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummaryIfLastExecuting; public abstract class AbstractJKubeTask extends DefaultTask implements KubernetesJKubeTask { @@ -67,16 +67,15 @@ protected AbstractJKubeTask(Class extensionClass) @TaskAction public final void runTask() { - init(); - if (shouldSkip()) { + try { + init(); + if (shouldSkip()) { kitLogger.info("`%s` task is skipped.", this.getName()); return; - } - run(); - String lastExecutingTask = GradleUtil.getLastExecutingTask(getProject(), getTaskPrioritiesMap()); - if (lastExecutingTask != null && lastExecutingTask.equals(getName())) { - SummaryUtil.printSummary(kubernetesExtension.javaProject.getBaseDirectory(), kubernetesExtension.getSummaryEnabledOrDefault()); - SummaryUtil.clear(); + } + run(); + } finally { + printSummaryIfLastExecuting(jKubeServiceHub, getName(), GradleUtil.getLastExecutingTask(getProject(), getTaskPrioritiesMap())); } } @@ -89,8 +88,7 @@ private void init() { jKubeServiceHub = initJKubeServiceHubBuilder().build(); kubernetesExtension.resources = updateResourceConfigNamespace(kubernetesExtension.getNamespaceOrNull(), kubernetesExtension.resources); ImageConfigResolver imageConfigResolver = new ImageConfigResolver(); - SummaryUtil.initSummary(kubernetesExtension.javaProject.getBuildDirectory(), kitLogger); - SummaryUtil.setSuccessful(true); + jKubeServiceHub.getSummaryService().setSuccessful(true); try { resolvedImages = resolveImages(imageConfigResolver); final JKubeEnricherContext context = JKubeEnricherContext.builder() @@ -103,6 +101,7 @@ private void init() { .resources(kubernetesExtension.resources) .log(kitLogger) .jKubeBuildStrategy(kubernetesExtension.getBuildStrategyOrDefault()) + .summaryService(jKubeServiceHub.getSummaryService()) .build(); final List extraClasspathElements = kubernetesExtension.getUseProjectClassPathOrDefault() ? kubernetesExtension.javaProject.getCompileClassPathElements() : Collections.emptyList(); @@ -123,7 +122,7 @@ public KubernetesExtension getExtension() { } private List customizeConfig(List configs) { - return GeneratorManager.generate(configs, initGeneratorContextBuilder().build(), false); + return GeneratorManager.generate(configs, initGeneratorContextBuilder().build(), false, jKubeServiceHub.getSummaryService()); } private boolean isAnsiEnabled() { @@ -153,6 +152,7 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder() { .build()) .clusterAccess(clusterAccess) .offline(kubernetesExtension.getOfflineOrDefault()) + .summaryEnabled(kubernetesExtension.getSummaryEnabledOrDefault()) .platformMode(kubernetesExtension.getRuntimeMode()); } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java index bee7786616..d8ff205ed2 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTask.java @@ -22,7 +22,6 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.service.ApplyService; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; @@ -33,6 +32,8 @@ import java.util.List; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.resolveFallbackNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummary; @SuppressWarnings("CdiInjectionPointsInspection") public class KubernetesApplyTask extends AbstractJKubeTask { @@ -63,15 +64,13 @@ public void run() { kitLogger.info("[[B]]HINT:[[B]] Use the command `%s get pods -w` to watch your pods start up", clusterAccess.isOpenShift() ? "oc" : "kubectl"); } catch (KubernetesClientException e) { - KubernetesResourceUtil.handleKubernetesClientException(e, kitLogger, kubernetesExtension.getSummaryEnabledOrDefault()); + IllegalStateException illegalStateException = KubernetesResourceUtil.handleKubernetesClientException(e, kitLogger, jKubeServiceHub.getSummaryService()); + printSummary(jKubeServiceHub); + throw illegalStateException; } catch (IOException ioException) { kitLogger.error("Error in loading Kubernetes Manifests ", ioException); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), ioException.getMessage(), () -> new IllegalStateException(ioException)); - } catch (InterruptedException interruptedException) { - Thread.currentThread().interrupt(); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - interruptedException.getMessage(), - () -> new IllegalStateException(interruptedException.getMessage(), interruptedException)); + handleExceptionAndSummary(jKubeServiceHub, ioException); + throw new IllegalStateException(ioException); } } @@ -80,7 +79,7 @@ protected boolean shouldSkip() { return super.shouldSkip() || kubernetesExtension.getSkipApplyOrDefault(); } - private void applyEntities(String fileName, final Collection entities) throws InterruptedException { + private void applyEntities(String fileName, final Collection entities) { KitLogger serviceLogger = createLogger("[[G]][SVC][[G]] [[s]]"); applyService.applyEntities(fileName, entities, serviceLogger, kubernetesExtension.getServiceUrlWaitTimeSecondsOrDefault()); } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTask.java index 39a4a2f3ee..b54ad2ce72 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesBuildTask.java @@ -17,7 +17,6 @@ import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.BuildServiceConfig; @@ -30,6 +29,7 @@ import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp; import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestampFile; import static org.eclipse.jkube.kit.common.util.EnvUtil.storeTimestamp; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; @SuppressWarnings("CdiInjectionPointsInspection") public class KubernetesBuildTask extends AbstractJKubeTask { @@ -66,8 +66,8 @@ public void run() { jKubeServiceHub.getBuildService().build(resolvedImages.toArray(new ImageConfiguration[0])); } catch (JKubeServiceException | IOException e) { kitLogger.error(e.getMessage()); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - e.getMessage(), () -> new GradleException(e.getMessage(), e)); + handleExceptionAndSummary(jKubeServiceHub, e); + throw new GradleException(e.getMessage(), e); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesDebugTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesDebugTask.java index 0fe3ed1c70..d1a8aeb66b 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesDebugTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesDebugTask.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.client.KubernetesClient; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.gradle.api.GradleException; public class KubernetesDebugTask extends AbstractJKubeTask { @@ -46,9 +45,7 @@ public void run() { "" + kubernetesExtension.getLocalDebugPortOrDefault(), kubernetesExtension.getDebugSuspendOrDefault(), createLogger("[[Y]][W][[Y]] [[s]]")); } catch (IOException ex) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - ex.getMessage(), - () -> new GradleException("Failure in debug task", ex)); + throw new GradleException("Failure in debug task", ex); } } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmPushTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmPushTask.java index 606e539ab0..0fffcb8d56 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmPushTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmPushTask.java @@ -14,11 +14,11 @@ package org.eclipse.jkube.gradle.plugin.task; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.resource.helm.HelmConfig; import javax.inject.Inject; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.resource.helm.HelmServiceUtil.initHelmConfig; import static org.eclipse.jkube.kit.resource.helm.HelmServiceUtil.initHelmPushConfig; @@ -42,9 +42,8 @@ public void run() { jKubeServiceHub.getHelmService().uploadHelmChart(helm); } catch (Exception exp) { kitLogger.error("Error performing helm push", exp); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - exp.getMessage(), - () -> new IllegalStateException(exp.getMessage(), exp)); + handleExceptionAndSummary(jKubeServiceHub, exp); + throw new IllegalStateException(exp.getMessage(), exp); } } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmTask.java index 6a3767b390..02ff86d303 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesHelmTask.java @@ -14,13 +14,13 @@ package org.eclipse.jkube.gradle.plugin.task; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.resource.helm.HelmConfig; import javax.inject.Inject; import java.io.File; import java.io.IOException; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.resource.helm.HelmServiceUtil.initHelmConfig; public class KubernetesHelmTask extends AbstractJKubeTask { @@ -42,9 +42,8 @@ public void run() { kubernetesExtension.helm).build(); jKubeServiceHub.getHelmService().generateHelmCharts(helm); } catch (IOException exception) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - exception.getMessage(), - () -> new IllegalStateException(exception.getMessage(), exception)); + handleExceptionAndSummary(jKubeServiceHub, exception); + throw new IllegalStateException(exception.getMessage(), exception); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesLogTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesLogTask.java index e8e33575f6..9ed3f31c20 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesLogTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesLogTask.java @@ -20,7 +20,6 @@ import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.kit.common.util.KubernetesHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.service.PodLogService; import io.fabric8.kubernetes.api.model.HasMetadata; @@ -51,9 +50,7 @@ public void run() { null, true); } catch (IOException exception) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - exception.getMessage(), - () -> new GradleException("Failure in getting logs", exception)); + throw new GradleException("Failure in getting logs", exception); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTask.java index 4042119b86..72782c48d3 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTask.java @@ -16,7 +16,6 @@ import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.RegistryConfig; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.service.BuildServiceConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceException; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -24,6 +23,8 @@ import javax.inject.Inject; import java.util.Collections; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; + public class KubernetesPushTask extends AbstractJKubeTask { @Inject public KubernetesPushTask(Class extensionClass) { @@ -45,9 +46,8 @@ public void run() { jKubeServiceHub.getBuildService() .push(resolvedImages, kubernetesExtension.getPushRetriesOrDefault(), initRegistryConfig(), kubernetesExtension.getSkipTagOrDefault()); } catch (JKubeServiceException e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - e.getMessage(), - () -> new IllegalStateException("Error in pushing image: " + e.getMessage(), e)); + handleExceptionAndSummary(jKubeServiceHub, e); + throw new IllegalStateException("Error in pushing image: " + e.getMessage(), e); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesResourceTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesResourceTask.java index ca6e6c5050..17311b1024 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesResourceTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesResourceTask.java @@ -19,7 +19,6 @@ import io.fabric8.kubernetes.api.model.KubernetesList; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.kit.common.util.LazyBuilder; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.kit.config.resource.ResourceServiceConfig; @@ -35,6 +34,7 @@ import static org.eclipse.jkube.kit.common.util.DekorateUtil.DEFAULT_RESOURCE_LOCATION; import static org.eclipse.jkube.kit.common.util.DekorateUtil.useDekorate; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil.updateKindFilenameMappings; import static org.eclipse.jkube.kit.common.JKubeFileInterpolator.interpolate; @@ -89,13 +89,12 @@ public void run() { ResourceClassifier resourceClassifier = kubernetesExtension.getResourceClassifier(); KubernetesList resourceList = jKubeServiceHub.getResourceService().generateResources(kubernetesExtension.getPlatformMode(), enricherManager, kitLogger); final File resourceClassifierDir = new File(kubernetesExtension.getResourceTargetDirectoryOrDefault(), resourceClassifier.getValue()); - jKubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, kitLogger); + jKubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, kitLogger, jKubeServiceHub.getSummaryService()); validateIfRequired(resourceClassifierDir, resourceClassifier); } } catch (IOException e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - e.getMessage(), - () -> new IllegalStateException("Failed to generate kubernetes descriptor", e)); + handleExceptionAndSummary(jKubeServiceHub, e); + throw new IllegalStateException("Failed to generate kubernetes descriptor", e); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTask.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTask.java index 4cea71db62..182d911bbb 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTask.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTask.java @@ -14,7 +14,6 @@ package org.eclipse.jkube.gradle.plugin.task; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import javax.inject.Inject; @@ -24,6 +23,8 @@ import java.util.List; import java.util.Optional; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; + public class KubernetesUndeployTask extends AbstractJKubeTask { @Inject @@ -45,9 +46,8 @@ public void run() { jKubeServiceHub.getUndeployService() .undeploy(environmentResourceDirs, resources, findManifestsToUndeploy().toArray(new File[0])); } catch (IOException e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - e.getMessage(), - () -> new IllegalStateException(e.getMessage(), e)); + handleExceptionAndSummary(jKubeServiceHub, e); + throw new IllegalStateException(e.getMessage(), e); } } 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 0a5d2df39b..8c329db9fd 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 @@ -23,7 +23,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.common.util.SummaryUtil; 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; @@ -38,6 +37,8 @@ import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.applicableNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummary; public class KubernetesWatchTask extends AbstractJKubeTask { @Inject @@ -69,11 +70,12 @@ public void run() { resources, context); } catch (KubernetesClientException kubernetesClientException) { - KubernetesResourceUtil.handleKubernetesClientException(kubernetesClientException, kitLogger, kubernetesExtension.getSummaryEnabledOrDefault()); + IllegalStateException illegalStateException = KubernetesResourceUtil.handleKubernetesClientException(kubernetesClientException, kitLogger, jKubeServiceHub.getSummaryService()); + printSummary(jKubeServiceHub); + throw illegalStateException; } catch (Exception ioException) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(kubernetesExtension.getSummaryEnabledOrDefault(), - ioException.getMessage(), - () -> new IllegalStateException("An error has occurred while while trying to watch the resources", ioException)); + handleExceptionAndSummary(jKubeServiceHub, ioException); + throw new IllegalStateException("An error has occurred while while trying to watch the resources", ioException); } } } diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/GradleUtilTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/GradleUtilTest.java index 0bd879c61d..b073934a94 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/GradleUtilTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/GradleUtilTest.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -31,6 +32,7 @@ import org.eclipse.jkube.kit.common.JavaProject; +import org.gradle.StartParameter; import org.gradle.api.Project; import org.gradle.api.UnknownDomainObjectException; import org.gradle.api.artifacts.Configuration; @@ -41,6 +43,7 @@ import org.gradle.api.artifacts.result.ResolvedDependencyResult; import org.gradle.api.internal.plugins.DefaultPluginContainer; import org.gradle.api.internal.provider.DefaultProvider; +import org.gradle.api.invocation.Gradle; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.internal.deprecation.DeprecatableConfiguration; import org.junit.Before; @@ -320,6 +323,35 @@ public void canBeResolved_DeprecatedAndNullResolutionAlternativesAndResolvable_s assertThat(result).isTrue(); } + @Test + public void getLastExecutingTask_whenTasksReturnedEmpty_shouldReturnNull() { + // Given + When + String task = GradleUtil.getLastExecutingTask(project, Collections.emptyMap()); + + // Then + assertThat(task).isNull(); + } + + @Test + public void getLastExecutingTask_whenTasksReturnsValidList_shouldReturnLastExecutingTask() { + // Given + Gradle gradle = mock(Gradle.class); + StartParameter startParameter = mock(StartParameter.class); + when(startParameter.getTaskNames()).thenReturn(Arrays.asList("k8sBuild", "k8sResource", "k8sApply")); + when(gradle.getStartParameter()).thenReturn(startParameter); + when(project.getGradle()).thenReturn(gradle); + Map taskPrioritiesMap = new HashMap<>(); + taskPrioritiesMap.put("k8sBuild", 1); + taskPrioritiesMap.put("k8sResource", 1); + taskPrioritiesMap.put("k8sApply", 2); + + // When + String task = GradleUtil.getLastExecutingTask(project, taskPrioritiesMap); + + // Then + assertThat(task).isEqualTo("k8sApply"); + } + private static Function configurationDependencyMock() { return s -> { final Configuration c = mock(Configuration.class, RETURNS_DEEP_STUBS); diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java index 6c2d71da8c..5c102a68a1 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesApplyTaskTest.java @@ -17,9 +17,11 @@ import java.net.URL; import java.util.Collections; +import io.fabric8.kubernetes.client.KubernetesClientException; import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.gradle.plugin.KubernetesExtension; import org.eclipse.jkube.gradle.plugin.TestKubernetesExtension; +import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.service.ApplyService; @@ -30,13 +32,19 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; +import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -47,7 +55,6 @@ public class KubernetesApplyTaskTest { public TaskEnvironment taskEnvironment = new TaskEnvironment(); private MockedConstruction clusterAccessMockedConstruction; - private MockedConstruction applyServiceMockedConstruction; private TestKubernetesExtension extension; @Before @@ -59,7 +66,6 @@ public void setUp() throws IOException { when(kubernetesClient.adapt(OpenShiftClient.class)).thenReturn(kubernetesClient); when(mock.createDefaultClient()).thenReturn(kubernetesClient); }); - applyServiceMockedConstruction = mockConstruction(ApplyService.class); extension = new TestKubernetesExtension(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); extension.isFailOnNoKubernetesJson = false; @@ -67,7 +73,6 @@ public void setUp() throws IOException { @After public void tearDown() { - applyServiceMockedConstruction.close(); clusterAccessMockedConstruction.close(); } @@ -99,58 +104,94 @@ public void runTask_withNoManifest_shouldThrowException() { @Test public void configureApplyService_withManifest_shouldSetDefaults() throws Exception { - // Given - taskEnvironment.withKubernetesManifest(); - final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); - // When - applyTask.runTask(); - // Then - final ApplyService as = applyServiceMockedConstruction.constructed().iterator().next(); - verify(as, times(1)).setAllowCreate(true); - verify(as, times(1)).setServicesOnlyMode(false); - verify(as, times(1)).setIgnoreServiceMode(false); - verify(as, times(1)).setLogJsonDir(any()); - verify(as, times(1)).setBasedir(taskEnvironment.getRoot()); - verify(as, times(1)).setSupportOAuthClients(false); - verify(as, times(1)).setIgnoreRunningOAuthClients(true); - verify(as, times(1)).setProcessTemplatesLocally(true); - verify(as, times(1)).setDeletePodsOnReplicationControllerUpdate(true); - verify(as, times(1)).setRollingUpgrade(false); - verify(as, times(1)).setRollingUpgradePreserveScale(false); - verify(as, times(1)).setRecreateMode(false); - verify(as, times(1)).setNamespace(null); - verify(as, times(1)).setFallbackNamespace(null); + try (MockedConstruction applyServiceMockedConstruction = mockConstruction(ApplyService.class)) { + // Given + taskEnvironment.withKubernetesManifest(); + final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + // When + applyTask.runTask(); + // Then + final ApplyService as = applyServiceMockedConstruction.constructed().iterator().next(); + verify(as, times(1)).setAllowCreate(true); + verify(as, times(1)).setServicesOnlyMode(false); + verify(as, times(1)).setIgnoreServiceMode(false); + verify(as, times(1)).setLogJsonDir(any()); + verify(as, times(1)).setBasedir(taskEnvironment.getRoot()); + verify(as, times(1)).setSupportOAuthClients(false); + verify(as, times(1)).setIgnoreRunningOAuthClients(true); + verify(as, times(1)).setProcessTemplatesLocally(true); + verify(as, times(1)).setDeletePodsOnReplicationControllerUpdate(true); + verify(as, times(1)).setRollingUpgrade(false); + verify(as, times(1)).setRollingUpgradePreserveScale(false); + verify(as, times(1)).setRecreateMode(false); + verify(as, times(1)).setNamespace(null); + verify(as, times(1)).setFallbackNamespace(null); + } } @Test public void runTask_withManifest_shouldApplyEntities() throws Exception { - // Given - taskEnvironment.withKubernetesManifest(); - final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); - // When - applyTask.runTask(); - // Then - assertThat(applyServiceMockedConstruction.constructed()).hasSize(1); - verify(applyServiceMockedConstruction.constructed().iterator().next(), times(1)) - .applyEntities(any(), eq(Collections.emptyList()), any(), eq(5L)); + try (MockedConstruction applyServiceMockedConstruction = mockConstruction(ApplyService.class)) { + // Given + taskEnvironment.withKubernetesManifest(); + final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + // When + applyTask.runTask(); + // Then + assertThat(applyServiceMockedConstruction.constructed()).hasSize(1); + verify(applyServiceMockedConstruction.constructed().iterator().next(), times(1)) + .applyEntities(any(), eq(Collections.emptyList()), any(), eq(5L)); + } } @Test public void runTask_withSkipApply_shouldDoNothing() { - // Given - extension = new TestKubernetesExtension() { - @Override - public Property getSkipApply() { - return new DefaultProperty<>(Boolean.class).value(true); - } - }; - when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); - final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + try (MockedConstruction applyServiceMockedConstruction = mockConstruction(ApplyService.class)) { + // Given + extension = new TestKubernetesExtension() { + @Override + public Property getSkipApply() { + return new DefaultProperty<>(Boolean.class).value(true); + } + }; + when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); + final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + + // When + applyTask.runTask(); + + // Then + assertThat(applyServiceMockedConstruction.constructed()).isEmpty(); + } + } - // When - applyTask.runTask(); + @Test + public void runTask_whenApplyServiceFails_thenExceptionThrown() { + try (MockedConstruction applyServiceMockedConstruction = mockConstruction(ApplyService.class, (mock, ctx) -> { + doThrow(new KubernetesClientException("failure")).when(mock).applyEntities(anyString(), any(), any(), anyLong()); + })) { + // Given + final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + + // When + Then + assertThatIllegalStateException() + .isThrownBy(applyTask::runTask) + .withMessage("failure"); + assertThat(applyServiceMockedConstruction.constructed()).hasSize(1); + } + } - // Then - assertThat(applyServiceMockedConstruction.constructed()).isEmpty(); + @Test + public void runTask_whenLoadingManifestFails_thenExceptionThrown() { + try (MockedStatic kubernetesHelperMockedStatic = mockStatic(KubernetesHelper.class)) { + // Given + kubernetesHelperMockedStatic.when(() -> KubernetesHelper.loadResources(any())).thenThrow(new IOException("failure")); + final KubernetesApplyTask applyTask = new KubernetesApplyTask(KubernetesExtension.class); + + // When + Then + assertThatIllegalStateException() + .isThrownBy(applyTask::runTask) + .withMessageContaining("failure"); + } } } diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTaskTest.java index 46d183c2e8..1e3f990a12 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesPushTaskTest.java @@ -34,12 +34,14 @@ import org.junit.Test; import org.mockito.MockedConstruction; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.contains; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; @@ -52,7 +54,6 @@ public class KubernetesPushTaskTest { public TaskEnvironment taskEnvironment = new TaskEnvironment(); private MockedConstruction dockerAccessFactoryMockedConstruction; - private MockedConstruction dockerBuildServiceMockedConstruction; private KubernetesExtension extension; @Before @@ -60,8 +61,6 @@ public void setUp() throws IOException { // Mock required for environments with no DOCKER available (don't remove) dockerAccessFactoryMockedConstruction = mockConstruction(DockerAccessFactory.class, (mock, ctx) -> when(mock.createDockerAccess(any())).thenReturn(mock(DockerAccess.class))); - dockerBuildServiceMockedConstruction = mockConstruction(DockerBuildService.class, - (mock, ctx) -> when(mock.isApplicable()).thenReturn(true)); extension = new TestKubernetesExtension(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); extension.images = Collections.singletonList(ImageConfiguration.builder() @@ -74,45 +73,67 @@ public void setUp() throws IOException { @After public void tearDown() { - dockerBuildServiceMockedConstruction.close(); dockerAccessFactoryMockedConstruction.close(); } @Test public void run_withImageConfiguration_shouldPushImage() throws JKubeServiceException { - // Given - final KubernetesPushTask kubernetesPushTask = new KubernetesPushTask(KubernetesExtension.class); - - // When - kubernetesPushTask.runTask(); - - // Then - assertThat(dockerBuildServiceMockedConstruction.constructed()).hasSize(1); - verify(dockerBuildServiceMockedConstruction.constructed().iterator().next(), times(1)) - .push(eq(extension.images), eq(0), any(), eq(false)); + try (MockedConstruction dockerBuildServiceMockedConstruction = mockConstruction(DockerBuildService.class, + (mock, ctx) -> when(mock.isApplicable()).thenReturn(true))) { + // Given + final KubernetesPushTask kubernetesPushTask = new KubernetesPushTask(KubernetesExtension.class); + + // When + kubernetesPushTask.runTask(); + + // Then + assertThat(dockerBuildServiceMockedConstruction.constructed()).hasSize(1); + verify(dockerBuildServiceMockedConstruction.constructed().iterator().next(), times(1)) + .push(eq(extension.images), eq(0), any(), eq(false)); + } } @Test public void runTask_withSkipPush_shouldDoNothing() throws JKubeServiceException { - // Given - extension = new TestKubernetesExtension() { - @Override - public Property getSkipPush() { - return new DefaultProperty<>(Boolean.class).value(true); - } - }; - when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); - final KubernetesPushTask pushTask = new KubernetesPushTask(KubernetesExtension.class); - when(pushTask.getName()).thenReturn("k8sPush"); - - // When - pushTask.runTask(); - - // Then - Assertions.assertThat(dockerBuildServiceMockedConstruction.constructed()).isEmpty(); - verify(pushTask.jKubeServiceHub.getBuildService(), times(0)).push(any(), anyInt(), any(), anyBoolean()); - verify(taskEnvironment.logger, times(1)).lifecycle(contains("k8s: `k8sPush` task is skipped.")); + try (MockedConstruction dockerBuildServiceMockedConstruction = mockConstruction(DockerBuildService.class, + (mock, ctx) -> when(mock.isApplicable()).thenReturn(true))) { + // Given + extension = new TestKubernetesExtension() { + @Override + public Property getSkipPush() { + return new DefaultProperty<>(Boolean.class).value(true); + } + }; + when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); + final KubernetesPushTask pushTask = new KubernetesPushTask(KubernetesExtension.class); + when(pushTask.getName()).thenReturn("k8sPush"); + + // When + pushTask.runTask(); + + // Then + Assertions.assertThat(dockerBuildServiceMockedConstruction.constructed()).isEmpty(); + verify(pushTask.jKubeServiceHub.getBuildService(), times(0)).push(any(), anyInt(), any(), anyBoolean()); + verify(taskEnvironment.logger, times(1)).lifecycle(contains("k8s: `k8sPush` task is skipped.")); + } + } + @Test + public void runTask_whenPushFails_thenExceptionThrown() { + try (MockedConstruction dockerBuildServiceMockedConstruction = mockConstruction(DockerBuildService.class, + (mock, ctx) -> { + when(mock.isApplicable()).thenReturn(true); + doThrow(new JKubeServiceException("failure")).when(mock).push(any(), anyInt(), any(), anyBoolean()); + })) { + // Given + final KubernetesPushTask pushTask = new KubernetesPushTask(KubernetesExtension.class); + + // When + Then + assertThatIllegalStateException() + .isThrownBy(pushTask::runTask) + .withMessage("Error in pushing image: failure"); + assertThat(dockerBuildServiceMockedConstruction.constructed()).isNotEmpty(); + } } } diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java index b056fe7cf9..bcde57b8eb 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/task/KubernetesUndeployTaskTest.java @@ -34,7 +34,10 @@ import org.mockito.MockedConstruction; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.junit.Assert.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockConstruction; import static org.mockito.Mockito.times; @@ -46,7 +49,6 @@ public class KubernetesUndeployTaskTest { @Rule public TaskEnvironment taskEnvironment = new TaskEnvironment(); - private MockedConstruction kubernetesUndeployServiceMockedConstruction; private MockedConstruction clusterAccessMockedConstruction; private TestKubernetesExtension extension; @@ -57,14 +59,12 @@ public void setUp() throws IOException { when(mock.createDefaultClient()).thenReturn(kubernetesClient); when(kubernetesClient.getMasterUrl()).thenReturn(new URL("http://kubernetes-cluster")); }); - kubernetesUndeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class); extension = new TestKubernetesExtension(); when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); } @After public void tearDown() { - kubernetesUndeployServiceMockedConstruction.close(); clusterAccessMockedConstruction.close(); } @@ -84,39 +84,58 @@ public void runTask_withOffline_shouldThrowException() { @Test public void runTask_withOfflineTrue_shouldUndeployResources() throws IOException { - // Given - final KubernetesUndeployTask undeployTask = new KubernetesUndeployTask(KubernetesExtension.class); - - // When - undeployTask.runTask(); - - // Then - assertThat(kubernetesUndeployServiceMockedConstruction.constructed()).hasSize(1); - verify(kubernetesUndeployServiceMockedConstruction.constructed().iterator().next(), times(1)) - .undeploy( - Collections.singletonList(taskEnvironment.getRoot().toPath().resolve(Paths.get("src", "main", "jkube")) - .toFile()), - ResourceConfig.builder().build(), taskEnvironment.getRoot().toPath() - .resolve(Paths.get("build", "classes", "java", "main", "META-INF", "jkube", "kubernetes.yml")).toFile() - ); + try (MockedConstruction kubernetesUndeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class)) { + // Given + final KubernetesUndeployTask undeployTask = new KubernetesUndeployTask(KubernetesExtension.class); + + // When + undeployTask.runTask(); + + // Then + assertThat(kubernetesUndeployServiceMockedConstruction.constructed()).hasSize(1); + verify(kubernetesUndeployServiceMockedConstruction.constructed().iterator().next(), times(1)) + .undeploy( + Collections.singletonList(taskEnvironment.getRoot().toPath().resolve(Paths.get("src", "main", "jkube")) + .toFile()), + ResourceConfig.builder().build(), taskEnvironment.getRoot().toPath() + .resolve(Paths.get("build", "classes", "java", "main", "META-INF", "jkube", "kubernetes.yml")).toFile() + ); + } } @Test public void runTask_withSkipUndeploy_shouldDoNothing() { - // Given - extension = new TestKubernetesExtension() { - @Override - public Property getSkipUndeploy() { - return new DefaultProperty<>(Boolean.class).value(true); - } - }; - when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); - final KubernetesUndeployTask kubernetesUndeployTask = new KubernetesUndeployTask(KubernetesExtension.class); - - // When - kubernetesUndeployTask.runTask(); + try (MockedConstruction kubernetesUndeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class)) { + // Given + extension = new TestKubernetesExtension() { + @Override + public Property getSkipUndeploy() { + return new DefaultProperty<>(Boolean.class).value(true); + } + }; + when(taskEnvironment.project.getExtensions().getByType(KubernetesExtension.class)).thenReturn(extension); + final KubernetesUndeployTask kubernetesUndeployTask = new KubernetesUndeployTask(KubernetesExtension.class); + + // When + kubernetesUndeployTask.runTask(); + + // Then + assertThat(kubernetesUndeployServiceMockedConstruction.constructed()).isEmpty(); + } + } - // Then - assertThat(kubernetesUndeployServiceMockedConstruction.constructed()).isEmpty(); + @Test + public void runTask_whenUndeployServiceFails_thenThrowException() { + try (MockedConstruction kubernetesUndeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class, + (mock, ctx) -> doThrow(new IOException("failure")).when(mock).undeploy(any(), any(), any()))) { + // Given + final KubernetesUndeployTask kubernetesUndeployTask = new KubernetesUndeployTask(KubernetesExtension.class); + + // When + Then + assertThatIllegalStateException() + .isThrownBy(kubernetesUndeployTask::runTask) + .withMessageContaining("failure"); + assertThat(kubernetesUndeployServiceMockedConstruction.constructed()).isNotEmpty(); + } } } diff --git a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java index 47b24ed8b6..6ac4b4bab0 100644 --- a/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java +++ b/jkube-kit/build/api/src/main/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManager.java @@ -41,9 +41,9 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.FileUtil; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.image.build.DockerFileBuilder; @@ -95,12 +95,13 @@ public static AssemblyManager getInstance() { * @param buildConfig configuration for how to build the image * @param log KitLogger used to display warning if permissions are to be normalized * @param finalCustomizer finalCustomizer to be applied to the tar archive + * @param summaryService {@link SummaryService} * @return file holding the path to the created assembly tar file * @throws IOException IO exception */ public File createDockerTarArchive( String imageName, final JKubeConfiguration configuration, final BuildConfiguration buildConfig, KitLogger log, - ArchiverCustomizer finalCustomizer) throws IOException { + ArchiverCustomizer finalCustomizer, SummaryService summaryService) throws IOException { final BuildDirs buildDirs = createBuildDirs(imageName, configuration); final List archiveCustomizers = new ArrayList<>(); @@ -110,7 +111,7 @@ public File createDockerTarArchive( try { if (buildConfig.isDockerFileMode()) { - SummaryUtil.setDockerFileImageSummary(imageName, buildConfig.getDockerFileFile().getAbsolutePath()); + summaryService.setDockerFileImageSummary(imageName, buildConfig.getDockerFileFile().getAbsolutePath()); createDockerTarArchiveForDockerFile(buildConfig, assemblyConfig, configuration, buildDirs, log, archiveCustomizers); } else { createAssemblyArchive(assemblyConfig, configuration, buildDirs, buildConfig.getCompression(), layers); diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerCreateDockerTarArchiveTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerCreateDockerTarArchiveTest.java index 237342c3ff..aabaf4330d 100644 --- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerCreateDockerTarArchiveTest.java +++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/assembly/AssemblyManagerCreateDockerTarArchiveTest.java @@ -32,6 +32,7 @@ import org.eclipse.jkube.kit.common.PrefixedLogger; import org.eclipse.jkube.kit.common.assertj.ArchiveAssertions; import org.eclipse.jkube.kit.common.assertj.FileAssertions; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.assertj.core.api.AbstractFileAssert; import org.assertj.core.api.AbstractListAssert; @@ -55,10 +56,12 @@ class AssemblyManagerCreateDockerTarArchiveTest { private AssemblyManager assemblyManager; private File baseDirectory; private File targetDirectory; + private SummaryService summaryService; @BeforeEach void setUp() throws IOException { prefixedLogger = mock(PrefixedLogger.class); + summaryService = mock(SummaryService.class); assemblyManager = AssemblyManager.getInstance(); baseDirectory = temporaryFolder.toFile(); targetDirectory = Files.createDirectory(temporaryFolder.resolve("target")).toFile(); @@ -93,7 +96,7 @@ void withoutDockerfile() throws IOException { // When File dockerArchiveFile = assemblyManager.createDockerTarArchive( - "test-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null); + "test-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("test-image"); @@ -124,7 +127,7 @@ void withoutDockerfileAndFinalCustomizer() throws IOException { // When File dockerArchiveFile = assemblyManager.createDockerTarArchive( - "no-docker-file-and-customizer", jKubeConfiguration, buildConfiguration, prefixedLogger, finalCustomizer); + "no-docker-file-and-customizer", jKubeConfiguration, buildConfiguration, prefixedLogger, finalCustomizer, summaryService); // Then assertTargetHasDockerDirectories("no-docker-file-and-customizer"); @@ -150,11 +153,11 @@ void withoutDockerfileAndAlreadyExistingFileInAssemblyGetsOverwritten() throws I // When assemblyManager.createDockerTarArchive( - "modified-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null); + "modified-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null, summaryService); // Modify file contents writeLineToFile(jKubeConfiguration.getProject().getArtifact(), "Modified content"); dockerArchiveFile = assemblyManager.createDockerTarArchive( - "modified-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null); + "modified-image", jKubeConfiguration, buildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("modified-image"); @@ -185,7 +188,7 @@ void withDockerfileInBaseDirectory() throws IOException { .dockerFileFile(dockerFile).dockerFile(dockerFile.getPath()).build(); // When - File dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null); + File dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("test-image"); @@ -226,7 +229,7 @@ void withDockerfileInBaseDirectoryAndAssemblyFile() throws IOException { // When final File dockerArchiveFile = assemblyManager.createDockerTarArchive( - "dockerfile-and-assembly-file", configuration, jKubeBuildConfiguration, prefixedLogger, null); + "dockerfile-and-assembly-file", configuration, jKubeBuildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("dockerfile-and-assembly-file"); @@ -259,7 +262,7 @@ void withDockerfileInBaseDirectoryAndDockerinclude() throws IOException { // When final File dockerArchiveFile = assemblyManager.createDockerTarArchive( - "test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null); + "test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("test-image"); @@ -290,7 +293,7 @@ void withDockerfileInBaseDirectoryAndDockerexclude() throws IOException { // When final File dockerArchiveFile = assemblyManager.createDockerTarArchive( - "test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null); + "test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("test-image"); @@ -323,7 +326,7 @@ void withDockerfileInBaseDirectoryAndDockerignore() throws IOException { .dockerFileFile(dockerFile).dockerFile(dockerFile.getPath()).build(); // When - File dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null); + File dockerArchiveFile = assemblyManager.createDockerTarArchive("test-image", configuration, jKubeBuildConfiguration, prefixedLogger, null, summaryService); // Then assertTargetHasDockerDirectories("test-image"); diff --git a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/ArchiveService.java b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/ArchiveService.java index 3395443c40..174b1691f4 100644 --- a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/ArchiveService.java +++ b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/ArchiveService.java @@ -18,6 +18,7 @@ import org.eclipse.jkube.kit.build.api.assembly.ArchiverCustomizer; import org.eclipse.jkube.kit.build.api.assembly.AssemblyFiles; import org.eclipse.jkube.kit.build.api.assembly.AssemblyManager; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.common.KitLogger; @@ -48,9 +49,9 @@ public ArchiveService(AssemblyManager assemblyManager, KitLogger log) { * @return file for holding the sources * @throws IOException if during creation of the tar an error occurs. */ - public File createDockerBuildArchive(ImageConfiguration imageConfig, JKubeConfiguration params) + public File createDockerBuildArchive(ImageConfiguration imageConfig, JKubeConfiguration params, SummaryService summaryService) throws IOException { - return createDockerBuildArchive(imageConfig, params, null); + return createDockerBuildArchive(imageConfig, params, null, summaryService); } /** @@ -63,9 +64,9 @@ public File createDockerBuildArchive(ImageConfiguration imageConfig, JKubeConfig * @return file for holding the sources * @throws IOException if during creation of the tar an error occurs. */ - public File createDockerBuildArchive(ImageConfiguration imageConfig, JKubeConfiguration params, ArchiverCustomizer customizer) + public File createDockerBuildArchive(ImageConfiguration imageConfig, JKubeConfiguration params, ArchiverCustomizer customizer, SummaryService summaryService) throws IOException { - File ret = createArchive(imageConfig.getName(), imageConfig.getBuildConfiguration(), params, log, customizer); + File ret = createArchive(imageConfig.getName(), imageConfig.getBuildConfiguration(), params, log, customizer, summaryService); log.info("%s: Created docker source tar %s",imageConfig.getDescription(), ret); return ret; } @@ -108,13 +109,14 @@ public File createChangedFilesArchive( return assemblyManager.createChangedFilesArchive(entries, assemblyDir, imageName, jKubeConfiguration); } - File createArchive(String imageName, BuildConfiguration buildConfig, JKubeConfiguration params, KitLogger log) + File createArchive(String imageName, BuildConfiguration buildConfig, JKubeConfiguration params, KitLogger log, SummaryService summaryService) throws IOException { - return createArchive(imageName, buildConfig, params, log, null); + return createArchive(imageName, buildConfig, params, log, null, summaryService); } - File createArchive(String imageName, BuildConfiguration buildConfig, JKubeConfiguration params, KitLogger log, ArchiverCustomizer customizer) + File createArchive(String imageName, BuildConfiguration buildConfig, JKubeConfiguration params, KitLogger log, + ArchiverCustomizer customizer, SummaryService summaryService) throws IOException { - return assemblyManager.createDockerTarArchive(imageName, params, buildConfig, log, customizer); + return assemblyManager.createDockerTarArchive(imageName, params, buildConfig, log, customizer, summaryService); } } diff --git a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/BuildService.java b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/BuildService.java index e6c0f1e4cd..d194346757 100644 --- a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/BuildService.java +++ b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/BuildService.java @@ -30,12 +30,12 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.build.api.helper.DockerFileUtil; import org.eclipse.jkube.kit.build.api.assembly.AssemblyManager; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.build.service.docker.access.BuildOptions; import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess; import org.eclipse.jkube.kit.build.service.docker.access.DockerAccessException; import org.eclipse.jkube.kit.common.KitLogger; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; @@ -69,14 +69,14 @@ public class BuildService { * @param configuration the project configuration * @throws IOException in case of any problems */ - public void buildImage(ImageConfiguration imageConfig, ImagePullManager imagePullManager, JKubeConfiguration configuration) + public void buildImage(ImageConfiguration imageConfig, ImagePullManager imagePullManager, JKubeConfiguration configuration, SummaryService summaryService) throws IOException { if (imagePullManager != null) { - autoPullBaseImage(imageConfig, imagePullManager, configuration); + autoPullBaseImage(imageConfig, imagePullManager, configuration, summaryService); } - buildImage(imageConfig, configuration, checkForNocache(imageConfig), addBuildArgs(configuration)); + buildImage(imageConfig, configuration, checkForNocache(imageConfig), addBuildArgs(configuration), summaryService); } public void tagImage(String imageName, ImageConfiguration imageConfig) throws DockerAccessException { @@ -102,10 +102,12 @@ public void tagImage(String imageName, ImageConfiguration imageConfig) throws Do * @param params mojo params for the project * @param noCache if not null, dictate the caching behaviour. Otherwise its taken from the build configuration * @param buildArgs maven build context + * @param summaryService {@link SummaryService} * @throws DockerAccessException docker access exception * @throws IOException in case of any I/O exception */ - protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration params, boolean noCache, Map buildArgs) + protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration params, boolean noCache + , Map buildArgs, SummaryService summaryService) throws IOException { String imageName = imageConfig.getName(); @@ -129,41 +131,23 @@ protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration par return; } - File dockerArchive = archiveService.createArchive(imageName, buildConfig, params, log); + File dockerArchive = archiveService.createArchive(imageName, buildConfig, params, log, summaryService); log.info("%s: Created %s in %s", imageConfig.getDescription(), dockerArchive.getName(), EnvUtil.formatDurationTill(time)); Map mergedBuildMap = prepareBuildArgs(buildArgs, buildConfig); - // auto is now supported by docker, consider switching? BuildOptions opts = - new BuildOptions(buildConfig.getBuildOptions()) - .dockerfile(getDockerfileName(buildConfig)) - .forceRemove(cleanupMode.isRemove()) - .noCache(noCache) - .cacheFrom(buildConfig.getCacheFrom()) - .buildArgs(mergedBuildMap); - String newImageId = doBuildImage(imageName, dockerArchive, opts); - if (newImageId == null) { - throw new IllegalStateException("Failure in building image, unable to find image built with name " + imageName); - } - log.info("%s: Built image %s", imageConfig.getDescription(), newImageId); - SummaryUtil.setImageShaImageSummary(imageName, newImageId); - - if (oldImageId != null && !oldImageId.equals(newImageId)) { - try { - docker.removeImage(oldImageId, true); - log.info("%s: Removed old image %s", imageConfig.getDescription(), oldImageId); - } catch (DockerAccessException exp) { - if (cleanupMode == CleanupMode.TRY_TO_REMOVE) { - log.warn("%s: %s (old image)%s", imageConfig.getDescription(), exp.getMessage(), - (exp.getCause() != null ? " [" + exp.getCause().getMessage() + "]" : "")); - } else { - throw exp; - } - } - } + new BuildOptions(buildConfig.getBuildOptions()) + .dockerfile(getDockerfileName(buildConfig)) + .forceRemove(cleanupMode.isRemove()) + .noCache(noCache) + .cacheFrom(buildConfig.getCacheFrom()) + .buildArgs(mergedBuildMap); + String newImageId = buildNewImage(imageConfig, summaryService, imageName, dockerArchive, opts); + removeOldImage(imageConfig, oldImageId, cleanupMode, newImageId); } + private Map prepareBuildArgs(Map buildArgs, BuildConfiguration buildConfig) { ImmutableMap.Builder builder = ImmutableMap.builder().putAll(buildArgs); if (buildConfig.getArgs() != null) { @@ -245,7 +229,7 @@ private Map addBuildArgsFromDockerConfig() { return buildArgs; } - private void autoPullBaseImage(ImageConfiguration imageConfig, ImagePullManager imagePullManager, JKubeConfiguration configuration) + private void autoPullBaseImage(ImageConfiguration imageConfig, ImagePullManager imagePullManager, JKubeConfiguration configuration, SummaryService summaryService) throws IOException { BuildConfiguration buildConfig = imageConfig.getBuildConfiguration(); @@ -266,7 +250,7 @@ private void autoPullBaseImage(ImageConfiguration imageConfig, ImagePullManager } for (String fromImage : fromImages) { if (fromImage != null && !AssemblyManager.SCRATCH_IMAGE.equals(fromImage)) { - SummaryUtil.setBaseImageNameImageSummary(imageConfig.getName(), fromImage); + summaryService.setBaseImageNameImageSummary(imageConfig.getName(), fromImage); registryService.pullImageWithPolicy(fromImage, imagePullManager, configuration.getRegistryConfig(), buildConfig); } } @@ -297,6 +281,33 @@ private boolean checkForNocache(ImageConfiguration imageConfig) { } } + private void removeOldImage(ImageConfiguration imageConfig, String oldImageId, CleanupMode cleanupMode, String newImageId) throws DockerAccessException { + if (oldImageId != null && !oldImageId.equals(newImageId)) { + try { + docker.removeImage(oldImageId, true); + log.info("%s: Removed old image %s", imageConfig.getDescription(), oldImageId); + } catch (DockerAccessException exp) { + if (cleanupMode == CleanupMode.TRY_TO_REMOVE) { + log.warn("%s: %s (old image)%s", imageConfig.getDescription(), exp.getMessage(), + (exp.getCause() != null ? " [" + exp.getCause().getMessage() + "]" : "")); + } else { + throw exp; + } + } + } + } + + private String buildNewImage(ImageConfiguration imageConfig, SummaryService summaryService, String imageName, File dockerArchive, BuildOptions opts) throws DockerAccessException { + + String newImageId = doBuildImage(imageName, dockerArchive, opts); + if (newImageId == null) { + throw new IllegalStateException("Failure in building image, unable to find image built with name " + imageName); + } + log.info("%s: Built image %s", imageConfig.getDescription(), newImageId); + summaryService.setImageShaImageSummary(imageName, newImageId); + return newImageId; + } + private boolean isEmpty(String str) { return str == null || str.isEmpty(); } diff --git a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/RegistryService.java b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/RegistryService.java index 0e20880baf..1cc8b444ae 100644 --- a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/RegistryService.java +++ b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/RegistryService.java @@ -21,8 +21,8 @@ import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess; import org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.EnvUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.common.RegistryConfig; @@ -54,7 +54,7 @@ public class RegistryService { * @throws IOException exception */ public void pushImage(ImageConfiguration imageConfig, - int retries, RegistryConfig registryConfig, boolean skipTag) throws IOException { + int retries, RegistryConfig registryConfig, boolean skipTag, SummaryService summaryService) throws IOException { BuildConfiguration buildConfig = imageConfig.getBuildConfiguration(); String name = imageConfig.getName(); if (buildConfig != null) { @@ -65,7 +65,7 @@ public void pushImage(ImageConfiguration imageConfig, registryConfig.getRegistry()); - SummaryUtil.setPushRegistry(Optional.ofNullable(configuredRegistry).orElse("docker.io")); + summaryService.setPushRegistry(Optional.ofNullable(configuredRegistry).orElse("docker.io")); AuthConfig authConfig = createAuthConfig(true, new ImageName(name).getUser(), configuredRegistry, registryConfig); long start = System.currentTimeMillis(); diff --git a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/WatchService.java b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/WatchService.java index 9ac1add3f2..e7cfc5f8d5 100755 --- a/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/WatchService.java +++ b/jkube-kit/build/service/docker/src/main/java/org/eclipse/jkube/kit/build/service/docker/WatchService.java @@ -33,6 +33,7 @@ import org.eclipse.jkube.kit.build.service.docker.watch.WatchException; import org.eclipse.jkube.kit.common.AssemblyFileEntry; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.RunImageConfiguration; import org.eclipse.jkube.kit.config.image.WaitConfiguration; @@ -62,7 +63,7 @@ public WatchService(ArchiveService archiveService, BuildService buildService, Qu this.log = log; } - public synchronized void watch(WatchContext context, JKubeConfiguration buildContext, List images) + public synchronized void watch(WatchContext context, JKubeConfiguration buildContext, List images, SummaryService summaryService) throws IOException { // Important to be be a single threaded scheduler since watch jobs must run serialized @@ -71,39 +72,7 @@ public synchronized void watch(WatchContext context, JKubeConfiguration buildCon executor = Executors.newSingleThreadScheduledExecutor(); for (ImageConfiguration imageConfig : runService.getImagesConfigsInOrder(queryService, images)) { - - String imageId = queryService.getImageId(imageConfig.getName()); - String containerId = runService.lookupContainer(imageConfig.getName()); - - ImageWatcher watcher = new ImageWatcher(imageConfig, context, imageId, containerId); - long interval = watcher.getInterval(); - - WatchMode watchMode = watcher.getWatchMode(imageConfig); - log.info("Watching %s %s", imageConfig.getName(), (watchMode != null ? " using " + watchMode.getDescription() : "")); - - ArrayList tasks = new ArrayList<>(); - - if (imageConfig.getBuildConfiguration() != null && - imageConfig.getBuildConfiguration().getAssembly() != null) { - if (watcher.isCopy()) { - schedule(executor, createCopyWatchTask(watcher, context.getBuildContext()), interval); - tasks.add("copying artifacts"); - } - - if (watcher.isBuild()) { - schedule(executor, createBuildWatchTask(watcher, context.getBuildContext(), watchMode == WatchMode.both, buildContext), interval); - tasks.add("rebuilding"); - } - } - - if (watcher.isRun() && watcher.getContainerId() != null) { - schedule(executor, createRestartWatchTask(watcher), interval); - tasks.add("restarting"); - } - - if (!tasks.isEmpty()) { - log.info("%s: Watch for %s", imageConfig.getDescription(), String.join(" and ", tasks)); - } + watchImage(context, buildContext, summaryService, executor, imageConfig); } log.info("Waiting ..."); if (!context.isKeepRunning()) { @@ -167,7 +136,8 @@ void callPostExec(ImageWatcher watcher) throws IOException, WatchException { } Runnable createBuildWatchTask(final ImageWatcher watcher, - final JKubeConfiguration mojoParameters, final boolean doRestart, final JKubeConfiguration buildContext) + final JKubeConfiguration mojoParameters, final boolean doRestart, + final JKubeConfiguration buildContext, final SummaryService summaryService) throws IOException { final ImageConfiguration imageConfig = watcher.getImageConfiguration(); final AssemblyFiles files = archiveService.getAssemblyFiles(imageConfig, mojoParameters); @@ -186,7 +156,7 @@ Runnable createBuildWatchTask(final ImageWatcher watcher, log.info("%s: Customizing the image ...", imageConfig.getDescription()); watcher.getWatchContext().getImageCustomizer().execute(imageConfig); } - buildService.buildImage(imageConfig, null, buildContext); + buildService.buildImage(imageConfig, null, buildContext, summaryService); String name = imageConfig.getName(); watcher.setImageId(queryService.getImageId(name)); @@ -283,6 +253,41 @@ private String getPreStopCommand(ImageConfiguration imageConfig) { .orElse(null); } + private void watchImage(WatchContext context, JKubeConfiguration buildContext, SummaryService summaryService, ScheduledExecutorService executor, ImageConfiguration imageConfig) throws IOException { + String imageId = queryService.getImageId(imageConfig.getName()); + String containerId = runService.lookupContainer(imageConfig.getName()); + + ImageWatcher watcher = new ImageWatcher(imageConfig, context, imageId, containerId); + long interval = watcher.getInterval(); + + WatchMode watchMode = watcher.getWatchMode(imageConfig); + log.info("Watching %s %s", imageConfig.getName(), (watchMode != null ? " using " + watchMode.getDescription() : "")); + + ArrayList tasks = new ArrayList<>(); + + if (imageConfig.getBuildConfiguration() != null && + imageConfig.getBuildConfiguration().getAssembly() != null) { + if (watcher.isCopy()) { + schedule(executor, createCopyWatchTask(watcher, context.getBuildContext()), interval); + tasks.add("copying artifacts"); + } + + if (watcher.isBuild()) { + schedule(executor, createBuildWatchTask(watcher, context.getBuildContext(), watchMode == WatchMode.both, buildContext, summaryService), interval); + tasks.add("rebuilding"); + } + } + + if (watcher.isRun() && watcher.getContainerId() != null) { + schedule(executor, createRestartWatchTask(watcher), interval); + tasks.add("restarting"); + } + + if (!tasks.isEmpty()) { + log.info("%s: Watch for %s", imageConfig.getDescription(), String.join(" and ", tasks)); + } + } + // =============================================================================================================== // Helper class for holding state and parameter when watching images diff --git a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java index 27c191566c..f385e19f6b 100644 --- a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java +++ b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java @@ -17,6 +17,7 @@ import org.eclipse.jkube.kit.build.service.docker.access.DockerAccessException; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.junit.jupiter.api.BeforeEach; @@ -37,6 +38,7 @@ class BuildServiceTest { private DockerAccess mockedDockerAccess; private BuildService buildService; + private SummaryService summaryService; private ImageConfiguration imageConfiguration; private ImagePullManager mockedImagePullManager; private JKubeConfiguration mockedJKubeConfiguration; @@ -46,6 +48,7 @@ void setUp() { mockedDockerAccess = mock(DockerAccess.class, RETURNS_DEEP_STUBS); ArchiveService mockedArchiveService = mock(ArchiveService.class, RETURNS_DEEP_STUBS); RegistryService mockedRegistryService = mock(RegistryService.class, RETURNS_DEEP_STUBS); + summaryService = mock(SummaryService.class); KitLogger mockedLog = mock(KitLogger.SilentLogger.class, RETURNS_DEEP_STUBS); mockedImagePullManager = mock(ImagePullManager.class, RETURNS_DEEP_STUBS); mockedJKubeConfiguration = mock(JKubeConfiguration.class, RETURNS_DEEP_STUBS); @@ -66,7 +69,7 @@ void buildImage_whenValidImageConfigurationProvidedAndDockerDaemonReturnsValidId when(mockedDockerAccess.getImageId("image-name")).thenReturn("c8003cb6f5db"); // When - buildService.buildImage(imageConfiguration, mockedImagePullManager, mockedJKubeConfiguration); + buildService.buildImage(imageConfiguration, mockedImagePullManager, mockedJKubeConfiguration, summaryService); // Then verify(mockedDockerAccess, times(1)) @@ -79,7 +82,7 @@ void buildImage_whenValidImageConfigurationProvidedAndDockerDaemonReturnsNull_sh when(mockedDockerAccess.getImageId("image-name")).thenReturn(null); // When & Then assertThatIllegalStateException() - .isThrownBy(() -> buildService.buildImage(imageConfiguration, mockedImagePullManager, mockedJKubeConfiguration)) + .isThrownBy(() -> buildService.buildImage(imageConfiguration, mockedImagePullManager, mockedJKubeConfiguration, summaryService)) .withMessage("Failure in building image, unable to find image built with name image-name"); } diff --git a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/RegistryServiceTest.java b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/RegistryServiceTest.java index 9373364a18..432d5795d8 100644 --- a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/RegistryServiceTest.java +++ b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/RegistryServiceTest.java @@ -17,6 +17,7 @@ import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.RegistryConfig; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.junit.jupiter.api.BeforeEach; @@ -45,6 +46,7 @@ class RegistryServiceTest { private RegistryService registryService; private ImageConfiguration imageConfiguration; private RegistryConfig mockedRegistryConfig; + private SummaryService summaryService; @BeforeEach void setUp() { @@ -58,6 +60,7 @@ void setUp() { dockerAccess = mock(DockerAccess.class); queryService = mock(QueryService.class); mockedRegistryConfig = mock(RegistryConfig.class); + summaryService = mock(SummaryService.class); registryService = new RegistryService(dockerAccess, queryService, new KitLogger.SilentLogger()); when(mockedRegistryConfig.getRegistry()).thenReturn("example.com"); } @@ -117,7 +120,7 @@ void pullImageWithPolicy_pullPolicyAlwaysAndBuildConfiguration_shouldPull() thro @Test void pushImage_whenValidImageConfigurationProvidedWithSkipTag_shouldNotPushAdditionalTags() throws IOException { // When - registryService.pushImage(imageConfiguration, 1, mockedRegistryConfig, true); + registryService.pushImage(imageConfiguration, 1, mockedRegistryConfig, true, summaryService); // Then verify(dockerAccess, times(1)) @@ -129,7 +132,7 @@ void pushImage_whenValidImageConfigurationProvidedWithSkipTag_shouldNotPushAddit @Test void pushImage_whenValidImageConfigurationProvided_shouldPushApplicableTags() throws IOException { // When - registryService.pushImage(imageConfiguration, 1, mockedRegistryConfig, false); + registryService.pushImage(imageConfiguration, 1, mockedRegistryConfig, false, summaryService); // Then verify(dockerAccess, times(1)) diff --git a/jkube-kit/build/service/jib/src/main/java/org/eclipse/jkube/kit/service/jib/JibServiceUtil.java b/jkube-kit/build/service/jib/src/main/java/org/eclipse/jkube/kit/service/jib/JibServiceUtil.java index f4b055544f..9fcacbde06 100644 --- a/jkube-kit/build/service/jib/src/main/java/org/eclipse/jkube/kit/service/jib/JibServiceUtil.java +++ b/jkube-kit/build/service/jib/src/main/java/org/eclipse/jkube/kit/service/jib/JibServiceUtil.java @@ -35,7 +35,7 @@ import org.eclipse.jkube.kit.common.Assembly; import org.eclipse.jkube.kit.common.AssemblyFileEntry; import org.eclipse.jkube.kit.common.KitLogger; -import org.eclipse.jkube.kit.common.util.SummaryUtil; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.image.build.Arguments; @@ -117,21 +117,21 @@ public static void buildContainer(JibContainerBuilder jibContainerBuilder, TarIm } public static JibContainerBuilder containerFromImageConfiguration( - ImageConfiguration imageConfiguration, Credential pullRegistryCredential) throws InvalidImageReferenceException { - SummaryUtil.setBaseImageNameImageSummary(imageConfiguration.getName(), imageConfiguration.getBuildConfiguration().getFrom()); + ImageConfiguration imageConfiguration, Credential pullRegistryCredential, SummaryService summaryService) throws InvalidImageReferenceException { + summaryService.setBaseImageNameImageSummary(imageConfiguration.getName(), imageConfiguration.getBuildConfiguration().getFrom()); final JibContainerBuilder containerBuilder = Jib.from(getRegistryImage(getBaseImage(imageConfiguration), pullRegistryCredential)) .setFormat(ImageFormat.Docker); return populateContainerBuilderFromImageConfiguration(containerBuilder, imageConfiguration); } - public static String getFullImageName(ImageConfiguration imageConfiguration, String tag) { + public static String getFullImageName(ImageConfiguration imageConfiguration, String tag, SummaryService summaryService) { ImageName imageName; if (tag != null) { imageName = new ImageName(imageConfiguration.getName(), tag); } else { imageName = new ImageName(imageConfiguration.getName()); } - SummaryUtil.setPushRegistry(Optional.ofNullable(imageName.getRegistry()) + summaryService.setPushRegistry(Optional.ofNullable(imageName.getRegistry()) .orElse("docker.io")); return imageName.getFullName(); } @@ -144,12 +144,12 @@ public static String getFullImageName(ImageConfiguration imageConfiguration, Str * @param tarArchive tar archive built during build goal * @param log Logger */ - public static void jibPush(ImageConfiguration imageConfiguration, Credential pushCredentials, File tarArchive, KitLogger log) { + public static void jibPush(ImageConfiguration imageConfiguration, Credential pushCredentials, File tarArchive, KitLogger log, SummaryService summaryService) { BuildConfiguration buildImageConfiguration = imageConfiguration.getBuildConfiguration(); - String imageName = getFullImageName(imageConfiguration, null); + String imageName = getFullImageName(imageConfiguration, null, summaryService); try { for (String tag : getAllImageTags(buildImageConfiguration.getTags(), imageName)) { - String imageNameWithTag = getFullImageName(imageConfiguration, tag); + String imageNameWithTag = getFullImageName(imageConfiguration, tag, summaryService); log.info("Pushing image: %s", imageNameWithTag); pushImage(TarImage.at(tarArchive.toPath()), imageNameWithTag, pushCredentials, log); } diff --git a/jkube-kit/build/service/jib/src/test/java/org/eclipse/jkube/kit/service/jib/JibServiceUtilTest.java b/jkube-kit/build/service/jib/src/test/java/org/eclipse/jkube/kit/service/jib/JibServiceUtilTest.java index 80fd64f415..90e4ea7acd 100644 --- a/jkube-kit/build/service/jib/src/test/java/org/eclipse/jkube/kit/service/jib/JibServiceUtilTest.java +++ b/jkube-kit/build/service/jib/src/test/java/org/eclipse/jkube/kit/service/jib/JibServiceUtilTest.java @@ -30,6 +30,8 @@ import org.eclipse.jkube.kit.common.AssemblyFileEntry; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.Arguments; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; @@ -39,6 +41,7 @@ import com.google.cloud.tools.jib.api.buildplan.FileEntriesLayer; import com.google.cloud.tools.jib.api.buildplan.ImageFormat; import com.google.cloud.tools.jib.api.buildplan.Port; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.mockito.MockedConstruction; @@ -51,6 +54,12 @@ import static org.mockito.Mockito.verify; class JibServiceUtilTest { + private SummaryService summaryService; + + @BeforeEach + public void setUp() { + summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); + } @Test void testGetBaseImageWithNullBuildConfig() { @@ -77,7 +86,7 @@ void testContainerFromImageConfiguration() throws Exception { // Given ImageConfiguration imageConfiguration = getSampleImageConfiguration(); // When - JibContainerBuilder jibContainerBuilder = containerFromImageConfiguration(imageConfiguration, null); + JibContainerBuilder jibContainerBuilder = containerFromImageConfiguration(imageConfiguration, null, summaryService); // Then verify(jibContainerBuilder, times(1)).addLabel("foo", "bar"); verify(jibContainerBuilder, times(1)).setEntrypoint(Arrays.asList("java", "-jar", "foo.jar")); @@ -105,13 +114,13 @@ void testAppendOriginalImageNameTagIfApplicable() { @Test void testGetFullImageNameWithDefaultTag() { - assertThat(JibServiceUtil.getFullImageName(getSampleImageConfiguration(), null)) + assertThat(JibServiceUtil.getFullImageName(getSampleImageConfiguration(), null, summaryService)) .isEqualTo("test/test-project:latest"); } @Test void testGetFullImageNameWithProvidedTag() { - assertThat(JibServiceUtil.getFullImageName(getSampleImageConfiguration(), "0.0.1")) + assertThat(JibServiceUtil.getFullImageName(getSampleImageConfiguration(), "0.0.1", summaryService)) .isEqualTo("test/test-project:0.0.1"); } diff --git a/jkube-kit/common-maven/src/test/java/org/eclipse/jkube/kit/common/util/MavenUtilTest.java b/jkube-kit/common-maven/src/test/java/org/eclipse/jkube/kit/common/util/MavenUtilTest.java index 07d8b227d7..a0b2e73a0e 100644 --- a/jkube-kit/common-maven/src/test/java/org/eclipse/jkube/kit/common/util/MavenUtilTest.java +++ b/jkube-kit/common-maven/src/test/java/org/eclipse/jkube/kit/common/util/MavenUtilTest.java @@ -158,6 +158,32 @@ void testLoadedPomFromFile() throws Exception { assertThat(plugins.get(1).getExecutions()).isEqualTo(Arrays.asList("resource", "build", "helm")); } + @Test + void getLastExecutingGoal_whenSessionReturnsGoalsList_thenLastExecutingGoalReturned() { + // Given + MavenSession mavenSession = mock(MavenSession.class); + when(mavenSession.getGoals()).thenReturn(Arrays.asList("clean", "k8s:build", "k8s:resource")); + + // When + String lastExecutingGoal = MavenUtil.getLastExecutingGoal(mavenSession, "k8s:"); + + // Then + assertThat(lastExecutingGoal).isEqualTo("resource"); + } + + @Test + void getLastExecutingGoal_whenSessionReturnsEmptyList_thenNullReturned() { + // Given + MavenSession mavenSession = mock(MavenSession.class); + when(mavenSession.getGoals()).thenReturn(Collections.emptyList()); + + // When + String lastExecutingGoal = MavenUtil.getLastExecutingGoal(mavenSession, "k8s:"); + + // Then + assertThat(lastExecutingGoal).isNull(); + } + private MavenProject getMavenProject() { mavenProject = new MavenProject(); File baseDir = new File("test-project-base-dir"); diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java index 910a2e9393..318f214084 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/JKubeConfiguration.java @@ -52,6 +52,10 @@ public Properties getProperties() { return project.getProperties(); } + public File getBuildDirectory() { + return project.getBuildDirectory(); + } + public File inOutputDir(String path) { return inDir(getOutputDirectory(), path); } diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SummaryUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/service/SummaryService.java similarity index 67% rename from jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SummaryUtil.java rename to jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/service/SummaryService.java index 872c732764..ced64a180e 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SummaryUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/service/SummaryService.java @@ -11,7 +11,7 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -package org.eclipse.jkube.kit.common.util; +package org.eclipse.jkube.kit.common.service; import io.fabric8.kubernetes.client.utils.Serialization; import org.apache.commons.lang3.StringUtils; @@ -19,6 +19,7 @@ import org.eclipse.jkube.kit.common.summary.ImageSummary; import org.eclipse.jkube.kit.common.summary.KubernetesResourceSummary; import org.eclipse.jkube.kit.common.summary.Summary; +import org.eclipse.jkube.kit.common.util.FileUtil; import java.io.File; import java.io.FileWriter; @@ -34,71 +35,72 @@ import static org.eclipse.jkube.kit.common.util.FileUtil.createDirectory; -public class SummaryUtil { +public class SummaryService { private static final String SUMMARY_FILE_NAME = "summary.json"; private static final String DASHED_LINE = "-------------------------------"; private static final String LIST_ELEMENT = " - %s"; private static File summaryFile = null; - private static File summaryOutputDir = null; - private static KitLogger logger = null; + private final File summaryOutputDir; + private final KitLogger logger; + private final boolean summaryEnabled; - private SummaryUtil() { } - - public static void initSummary(File summaryOutputDirectory, KitLogger kitLogger) { - summaryOutputDir = summaryOutputDirectory; - logger = kitLogger; + public SummaryService(File summaryOutputDirectory, KitLogger kitLogger, boolean summaryEnabled) { + this.summaryOutputDir = summaryOutputDirectory; + this.logger = kitLogger; + this.summaryEnabled = summaryEnabled; } - public static void addGeneratedResourceFile(File resourceFilePath) { + + public void addGeneratedResourceFile(File resourceFilePath) { addToSummary(s -> { s.setGeneratedResourceFiles(createOrAddToExistingList(s.getGeneratedResourceFiles(), resourceFilePath)); return s; }); } - public static void addAppliedKubernetesResource(KubernetesResourceSummary kubernetesResource) { + public void addAppliedKubernetesResource(KubernetesResourceSummary kubernetesResource) { addToSummary(s -> { s.setAppliedKubernetesResources(createOrAddToExistingList(s.getAppliedKubernetesResources(), kubernetesResource)); return s; }); } - public static void addDeletedKubernetesResource(KubernetesResourceSummary kubernetesResource) { + public void addDeletedKubernetesResource(KubernetesResourceSummary kubernetesResource) { addToSummary(s -> { s.setDeletedKubernetesResources(createOrAddToExistingList(s.getDeletedKubernetesResources(), kubernetesResource)); return s; }); } - public static void addToGenerators(String generator) { + public void addToGenerators(String generator) { addToSummary(s -> { s.setGeneratorsApplied(createOrAddToExistingList(s.getGeneratorsApplied(), generator)); return s; }); } - public static void addToEnrichers(String enricher) { + public void addToEnrichers(String enricher) { addToSummary(s -> { s.setEnrichersApplied(createOrAddToExistingList(s.getEnrichersApplied(), enricher)); return s; }); } - public static void setSuccessful(boolean isSuccessful) { + public void setSuccessful(boolean isSuccessful) { addToSummary(s -> { s.setSuccessful(isSuccessful); return s; }); } - public static void setFailureCause(String failureCause) { + public void setFailureCause(String failureCause) { addToSummary(s -> { s.setFailureCause(failureCause); return s; }); } - public static void setDockerFileImageSummary(String imageName, String dockerFileLocation) { + public void setDockerFileImageSummary(String imageName, String dockerFileLocation) { addToSummary(s -> { s.setImageSummariesMap(createOrAddToExistingMap(s.getImageSummariesMap(), imageName, () -> ImageSummary.builder().build(), is -> { is.setDockerfilePath(dockerFileLocation); @@ -108,7 +110,7 @@ public static void setDockerFileImageSummary(String imageName, String dockerFile }); } - public static void setImageShaImageSummary(String imageName, String imageSha) { + public void setImageShaImageSummary(String imageName, String imageSha) { addToSummary(s -> { s.setImageSummariesMap(createOrAddToExistingMap(s.getImageSummariesMap(), imageName, () -> ImageSummary.builder().build(), is -> { is.setImageSha(imageSha); @@ -118,7 +120,7 @@ public static void setImageShaImageSummary(String imageName, String imageSha) { }); } - public static void setImageStreamUsedImageSummary(String imageName, String imageStreamUsed) { + public void setImageStreamUsedImageSummary(String imageName, String imageStreamUsed) { addToSummary(s -> { s.setImageSummariesMap(createOrAddToExistingMap(s.getImageSummariesMap(), imageName, () -> ImageSummary.builder().build(), is -> { is.setImageStreamUsed(imageStreamUsed); @@ -128,7 +130,7 @@ public static void setImageStreamUsedImageSummary(String imageName, String image }); } - public static void setBaseImageNameImageSummary(String imageName, String baseImage) { + public void setBaseImageNameImageSummary(String imageName, String baseImage) { addToSummary(s -> { s.setImageSummariesMap(createOrAddToExistingMap(s.getImageSummariesMap(), imageName, () -> ImageSummary.builder().build(), is -> { is.setBaseImageName(baseImage); @@ -138,108 +140,103 @@ public static void setBaseImageNameImageSummary(String imageName, String baseIma }); } - public static void setPushRegistry(String registry) { + public void setPushRegistry(String registry) { addToSummary(s -> { s.setPushRegistry(registry); return s; }); } - public static void setBuildStrategy(String buildStrategy) { + public void setBuildStrategy(String buildStrategy) { addToSummary(s -> { s.setBuildStrategy(buildStrategy); return s; }); } - public static void setAppliedClusterUrl(String targetClusterUrl) { + public void setAppliedClusterUrl(String targetClusterUrl) { addToSummary(s -> { s.setAppliedClusterUrl(targetClusterUrl); return s; }); } - public static void setUndeployedClusterUrl(String targetClusterUrl) { + public void setUndeployedClusterUrl(String targetClusterUrl) { addToSummary(s -> { s.setUndeployedClusterUrl(targetClusterUrl); return s; }); } - public static void setOpenShiftBuildConfigName(String buildConfigName) { + public void setOpenShiftBuildConfigName(String buildConfigName) { addToSummary(s -> { s.setOpenShiftBuildConfigName(buildConfigName); return s; }); } - public static void setHelmChartName(String chart) { + public void setHelmChartName(String chart) { addToSummary(s -> { s.setHelmChartName(chart); return s; }); } - public static void setHelmChartLocation(File chart) { + public void setHelmChartLocation(File chart) { addToSummary(s -> { s.setHelmChart(chart); return s; }); } - public static void setHelmRepository(String helmRepository) { + public void setHelmRepository(String helmRepository) { addToSummary(s -> { s.setHelmRepository(helmRepository); return s; }); } - public static void setHelmChartCompressedLocation(File chartCompressed) { + public void setHelmChartCompressedLocation(File chartCompressed) { addToSummary(s -> { s.setHelmChartCompressed(chartCompressed); return s; }); } - public static void setAggregateResourceFile(File aggregateResourceFile) { + public void setAggregateResourceFile(File aggregateResourceFile) { addToSummary(s -> { s.setAggregateResourceFile(aggregateResourceFile); return s; }); } - public static void clear() { + public void clear() { if (summaryFile != null && summaryFile.exists()) { try { Files.delete(summaryFile.toPath()); - summaryFile = null; } catch (IOException e) { - throw new IllegalStateException("Unable to delete summary file", e); + logger.verbose("Unable to delete summary file", e); } } } - public static void setFailureIfSummaryEnabledOrThrow(boolean summaryEnabled, String failureMessage, Supplier exceptionSupplier) throws T { - if (summaryEnabled) { - setSuccessful(false); - setFailureCause(failureMessage); - } else { - throw exceptionSupplier.get(); - } + public void setFailureAndCause(String failureMessage) { + setSuccessful(false); + setFailureCause(failureMessage); } - public static void printSummary(File baseDirectory, boolean summaryEnabled) { + public void printSummary(File baseDirectory) { Summary summaryInstance = loadSummaryFromFile(); if (summaryInstance != null && summaryEnabled) { - printBanner(logger); - printCommonSummary(summaryInstance, baseDirectory, logger); - printBuildSummary(summaryInstance, logger); - printPushSummary(summaryInstance, logger); - printResourceSummary(summaryInstance, baseDirectory, logger); - printApplySummary(summaryInstance, logger); - printUndeploySummary(summaryInstance, logger); - printHelmSummary(summaryInstance, baseDirectory, logger); - printHelmPushSummary(summaryInstance, logger); + printBanner(); + printCommonSummary(summaryInstance, baseDirectory); + printBuildSummary(summaryInstance); + printPushSummary(summaryInstance); + printResourceSummary(summaryInstance, baseDirectory); + printApplySummary(summaryInstance); + printUndeploySummary(summaryInstance); + printHelmSummary(summaryInstance, baseDirectory); + printHelmPushSummary(summaryInstance); logger.info(DASHED_LINE); if (summaryInstance.isSuccessful()) { logger.info("SUCCESS"); @@ -250,17 +247,17 @@ public static void printSummary(File baseDirectory, boolean summaryEnabled) { } } - private static void printCommonSummary(Summary summaryInstance, File baseDirectory, KitLogger logger) { + private void printCommonSummary(Summary summaryInstance, File baseDirectory) { if (summaryInstance.getImageSummariesMap() != null && !summaryInstance.getImageSummariesMap().isEmpty()) { logger.info("Container images:"); for (Map.Entry imageSummaryEntry : summaryInstance.getImageSummariesMap().entrySet()) { - printImageSummary(logger, baseDirectory, imageSummaryEntry.getKey(), imageSummaryEntry.getValue()); + printImageSummary(baseDirectory, imageSummaryEntry.getKey(), imageSummaryEntry.getValue()); } logger.info(""); } } - private static void printImageSummary(KitLogger logger, File baseDirectory, String imageName, ImageSummary imageSummary) { + private void printImageSummary(File baseDirectory, String imageName, ImageSummary imageSummary) { logger.info(LIST_ELEMENT, imageName); if (imageSummary.getBaseImageName() != null) { logger.info(" * Base image: %s", imageSummary.getBaseImageName()); @@ -276,7 +273,7 @@ private static void printImageSummary(KitLogger logger, File baseDirectory, Stri } } - private static void printBanner(KitLogger logger) { + private void printBanner() { logger.info(" __ / / //_/ / / / _ )/ __/"); logger.info("/ // / ,< / /_/ / _ / _/ "); logger.info("\\___/_/|_|\\____/____/___/ \n"); @@ -285,7 +282,7 @@ private static void printBanner(KitLogger logger) { logger.info(DASHED_LINE); } - private static void printBuildSummary(Summary summary, KitLogger logger) { + private void printBuildSummary(Summary summary) { if (summary.getBuildStrategy() != null) { logger.info("Build Strategy : %s", summary.getBuildStrategy()); } @@ -298,7 +295,7 @@ private static void printBuildSummary(Summary summary, KitLogger logger) { logger.info(""); } - private static void printResourceSummary(Summary summary, File baseDir, KitLogger logger) { + private void printResourceSummary(Summary summary, File baseDir) { if (summary.getGeneratedResourceFiles() != null && !summary.getGeneratedResourceFiles().isEmpty()) { if (summary.getEnrichersApplied() != null && summary.getEnrichersApplied().size() < 20) { logger.info("Enrichers applied: [%s]", String.join(",", summary.getEnrichersApplied())); @@ -308,7 +305,7 @@ private static void printResourceSummary(Summary summary, File baseDir, KitLogge .map(File::getAbsolutePath) .map(p -> FileUtil.getRelativeFilePath(baseDir.getAbsolutePath(), p)) .collect(Collectors.toList()); - logList(logger, generatedFilesResourcePaths); + logList(generatedFilesResourcePaths); } if (summary.getAggregateResourceFile() != null) { logger.info(LIST_ELEMENT, FileUtil.getRelativeFilePath(baseDir.getAbsolutePath(), summary.getAggregateResourceFile().getAbsolutePath())); @@ -316,23 +313,23 @@ private static void printResourceSummary(Summary summary, File baseDir, KitLogge logger.info(""); } - private static void printApplySummary(Summary summary, KitLogger logger) { + private void printApplySummary(Summary summary) { if (StringUtils.isNotBlank(summary.getAppliedClusterUrl())) { logger.info("Applied resources from %s", summary.getAppliedClusterUrl()); - printKubernetesResourceSummary(summary.getAppliedKubernetesResources(), logger); + printKubernetesResourceSummary(summary.getAppliedKubernetesResources()); logger.info(""); } } - private static void printUndeploySummary(Summary summary, KitLogger logger) { + private void printUndeploySummary(Summary summary) { if (StringUtils.isNotBlank(summary.getUndeployedClusterUrl())) { logger.info("Undeployed resources from %s", summary.getUndeployedClusterUrl()); - printKubernetesResourceSummary(summary.getDeletedKubernetesResources(), logger); + printKubernetesResourceSummary(summary.getDeletedKubernetesResources()); logger.info(""); } } - private static void printKubernetesResourceSummary(List kubernetesResourceSummaries, KitLogger logger) { + private void printKubernetesResourceSummary(List kubernetesResourceSummaries) { if (kubernetesResourceSummaries != null && !kubernetesResourceSummaries.isEmpty()) { for (KubernetesResourceSummary kubernetesResourceSummary : kubernetesResourceSummaries) { logger.info(LIST_ELEMENT, kubernetesResourceSummary.getResourceName()); @@ -346,13 +343,13 @@ private static void printKubernetesResourceSummary(List list) { + private void logList(List list) { for (String item : list) { logger.info(LIST_ELEMENT, item); } } - private static void addToSummary(UnaryOperator summaryConsumer) { - if (summaryOutputDir != null && summaryOutputDir.exists()) { + private void addToSummary(UnaryOperator summaryConsumer) { + if (summaryOutputDir != null) { + if (!summaryOutputDir.exists() && !summaryOutputDir.mkdir()) { + logger.debug("Failure in creating Summary output directory %s", summaryOutputDir.getAbsolutePath()); + return; + } Summary summary = loadSummaryFromFile(); if (summary == null) { summary = new Summary(); @@ -387,7 +388,7 @@ private static void addToSummary(UnaryOperator summaryConsumer) { } } - private static Map createOrAddToExistingMap(Map orignalMap, K key, Supplier emptySupplier, UnaryOperator valueConsumer) { + private Map createOrAddToExistingMap(Map orignalMap, K key, Supplier emptySupplier, UnaryOperator valueConsumer) { if (orignalMap == null) { orignalMap = new HashMap<>(); } @@ -396,7 +397,7 @@ private static Map createOrAddToExistingMap(Map orignalMap, K return orignalMap; } - private static List createOrAddToExistingList(List currentList, T item) { + private List createOrAddToExistingList(List currentList, T item) { if (currentList == null) { currentList = new ArrayList<>(); } @@ -406,41 +407,42 @@ private static List createOrAddToExistingList(List currentList, T item return currentList; } - private static synchronized Summary loadSummaryFromFile() { + private synchronized Summary loadSummaryFromFile() { try { - if (!isValidSummaryFile(summaryFile)) { + if (!isValidSummaryFile()) { summaryFile = createSummaryFile(); summaryFile.deleteOnExit(); - return null; + } else { + return Serialization.jsonMapper().readValue(summaryFile, Summary.class); } - return Serialization.jsonMapper().readValue(summaryFile, Summary.class); } catch (IOException ioException) { - throw new IllegalStateException("Failure in loading Summary file: ", ioException); + logger.verbose("Failure in loading Summary file: ", ioException); } + return null; } - private static File createSummaryFile() throws IOException { + private File createSummaryFile() throws IOException { if (!summaryOutputDir.exists()) { createDirectory(summaryOutputDir); } - File summaryFile = new File(summaryOutputDir, SUMMARY_FILE_NAME); - if (summaryFile.createNewFile()) { + File newSummaryFile = new File(summaryOutputDir, SUMMARY_FILE_NAME); + if (newSummaryFile.createNewFile()) { logger.verbose("Created summary file"); } - return summaryFile; + return newSummaryFile; } - private static void writeSummaryToFile(Summary summary) { - if (isValidSummaryFile(summaryFile)) { + private void writeSummaryToFile(Summary summary) { + if (isValidSummaryFile()) { try (FileWriter fileWriter = new FileWriter(summaryFile)) { fileWriter.write(Serialization.jsonMapper().writeValueAsString(summary)); } catch (IOException ioException) { - throw new IllegalStateException("Failure in writing to Summary file: ", ioException); + logger.verbose("Failure in writing to Summary file: ", ioException); } } } - private static boolean isValidSummaryFile(File summaryFile) { + private static boolean isValidSummaryFile() { return summaryFile != null && StringUtils.isNotBlank(summaryFile.getAbsolutePath()) && summaryFile.getAbsolutePath().contains(SUMMARY_FILE_NAME) && diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeConfigurationTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeConfigurationTest.java index 2e1ac10c5e..8cfbf6ba2f 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeConfigurationTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/JKubeConfigurationTest.java @@ -39,6 +39,17 @@ void getBaseDir_withJavaProject_shouldReturnJavaProjectBaseDirectory() { assertThat(result).isEqualTo(new File("base-directory")); } + @Test + void getBuildDirectory_withJavaProject_shouldReturnJavaProjectBuildDirectory() { + // Given + final JKubeConfiguration configuration = JKubeConfiguration.builder().project(JavaProject.builder() + .buildDirectory(new File("build-directory")).build()).build(); + // When + final File result = configuration.getBuildDirectory(); + // Then + assertThat(result).isEqualTo(new File("build-directory")); + } + @Test void getProperties_withJavaProject_shouldReturnJavaProjectProperties() { // Given diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryUtilTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/service/SummaryServiceTest.java similarity index 61% rename from jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryUtilTest.java rename to jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/service/SummaryServiceTest.java index 32675ef556..4c26d41f24 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryUtilTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/service/SummaryServiceTest.java @@ -11,31 +11,31 @@ * Contributors: * Red Hat, Inc. - initial API and implementation */ -package org.eclipse.jkube.kit.common; +package org.eclipse.jkube.kit.common.service; +import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.summary.KubernetesResourceSummary; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.io.File; -import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -class SummaryUtilTest { +class SummaryServiceTest { private KitLogger logger; @TempDir private File temporaryFolder; + private SummaryService summaryService; @BeforeEach public void setUp() { logger = spy(new KitLogger.SilentLogger()); - SummaryUtil.initSummary(temporaryFolder, logger); + summaryService = new SummaryService(temporaryFolder, logger, true); } @Test @@ -44,7 +44,7 @@ void printSummary_whenInvoked_shouldPrintSummary() { initializeSummary(); // When - SummaryUtil.printSummary(temporaryFolder, true); + summaryService.printSummary(temporaryFolder); // Then verifySummaryPrintedOnce(); @@ -53,11 +53,11 @@ void printSummary_whenInvoked_shouldPrintSummary() { @Test void printSummary_whenFailure_shouldPrintFailureAndCause() { // Given - SummaryUtil.setSuccessful(false); - SummaryUtil.setFailureCause("failure in pulling image"); + summaryService.setSuccessful(false); + summaryService.setFailureCause("failure in pulling image"); // When - SummaryUtil.printSummary(temporaryFolder, true); + summaryService.printSummary(temporaryFolder); // Then verify(logger).error("FAILURE [%s]", "failure in pulling image"); @@ -65,95 +65,101 @@ void printSummary_whenFailure_shouldPrintFailureAndCause() { @Test void printSummary_whenSummaryEnabledFalse_shouldNotPrintAnything() { - // Given + When - SummaryUtil.printSummary(temporaryFolder, false); + // Given + summaryService = new SummaryService(temporaryFolder, logger, false); + // When + summaryService.printSummary(temporaryFolder); // Then verify(logger, times(0)).info(anyString()); } @Test - void setFailureIfSummaryEnabledOrThrow_whenSummaryEnabled_shouldLogFailureAndCause() { + void setFailureAndCause_whenSummaryEnabled_shouldLogFailureAndCause() { // Given - SummaryUtil.setFailureIfSummaryEnabledOrThrow(true, "failed to execute", () -> new IllegalStateException("failure")); + summaryService.setFailureAndCause("failed to execute"); // When - SummaryUtil.printSummary(temporaryFolder, true); + summaryService.printSummary(temporaryFolder); // Then verify(logger).error("FAILURE [%s]", "failed to execute"); } @Test - void setFailureIfSummaryEnabledOrThrow_whenSummaryDisabled_shouldLogThrowException() { - // When + Then - assertThatIllegalStateException() - .isThrownBy(() -> SummaryUtil.setFailureIfSummaryEnabledOrThrow(false, "failed", () -> new IllegalStateException("failure"))) - .withMessage("failure"); + void setFailureAndCause_whenSummaryDisabled_shouldLogNothing() { + // Given + summaryService = new SummaryService(temporaryFolder, logger, false); + + // When + summaryService.setFailureAndCause( "failed"); + summaryService.printSummary(temporaryFolder); + + // Then verify(logger, times(0)).error(anyString(), anyString()); } @Test void clear_whenInvoked_shouldDeleteSummaryFile() { // Given - SummaryUtil.setSuccessful(true); + summaryService.setSuccessful(true); // When - SummaryUtil.clear(); + summaryService.clear(); // Then verify(logger, times(0)).info(anyString()); } private void initializeSummary() { - SummaryUtil.setBuildStrategy("Local Docker"); - SummaryUtil.addToGenerators("java-exec"); - SummaryUtil.setDockerFileImageSummary("quay.io/example/test:latest", new File(temporaryFolder, "src/main/docker/Dockerfile").getAbsolutePath()); - SummaryUtil.setBaseImageNameImageSummary("quay.io/example/test:latest", "quay.io/jkube/java:latest"); - SummaryUtil.setImageShaImageSummary("quay.io/example/test:latest", "def3"); - SummaryUtil.setImageStreamUsedImageSummary("quay.io/example/test:latest", "test"); - SummaryUtil.setPushRegistry("quay.io"); - SummaryUtil.setOpenShiftBuildConfigName("test"); - SummaryUtil.addGeneratedResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes/test-deployment.yml")); - SummaryUtil.addGeneratedResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes/test-service.yml")); - SummaryUtil.setAggregateResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes.yml")); - SummaryUtil.addToEnrichers("jkube-controller"); - SummaryUtil.addToEnrichers("jkube-service"); - SummaryUtil.addAppliedKubernetesResource(KubernetesResourceSummary.builder() + summaryService.setBuildStrategy("Local Docker"); + summaryService.addToGenerators("java-exec"); + summaryService.setDockerFileImageSummary("quay.io/example/test:latest", new File(temporaryFolder, "src/main/docker/Dockerfile").getAbsolutePath()); + summaryService.setBaseImageNameImageSummary("quay.io/example/test:latest", "quay.io/jkube/java:latest"); + summaryService.setImageShaImageSummary("quay.io/example/test:latest", "def3"); + summaryService.setImageStreamUsedImageSummary("quay.io/example/test:latest", "test"); + summaryService.setPushRegistry("quay.io"); + summaryService.setOpenShiftBuildConfigName("test"); + summaryService.addGeneratedResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes/test-deployment.yml")); + summaryService.addGeneratedResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes/test-service.yml")); + summaryService.setAggregateResourceFile(new File(temporaryFolder, "target/classes/META-INF/jkube/kubernetes.yml")); + summaryService.addToEnrichers("jkube-controller"); + summaryService.addToEnrichers("jkube-service"); + summaryService.addAppliedKubernetesResource(KubernetesResourceSummary.builder() .kind("Deployment") .group("apps") .version("v1") .namespace("test-ns") .resourceName("test") .build()); - SummaryUtil.addAppliedKubernetesResource(KubernetesResourceSummary.builder() + summaryService.addAppliedKubernetesResource(KubernetesResourceSummary.builder() .kind("Service") .group("v1") .version("v1") .namespace("test-ns") .resourceName("test") .build()); - SummaryUtil.setHelmChartName("test"); - SummaryUtil.setHelmChartCompressedLocation(new File(temporaryFolder, "target/test.tar.gz")); - SummaryUtil.setHelmChartLocation(new File(temporaryFolder, "target/jkube/helm/test/kubernetes")); - SummaryUtil.setHelmRepository("localhost:8001/api/charts"); - SummaryUtil.addDeletedKubernetesResource(KubernetesResourceSummary.builder() + summaryService.setHelmChartName("test"); + summaryService.setHelmChartCompressedLocation(new File(temporaryFolder, "target/test.tar.gz")); + summaryService.setHelmChartLocation(new File(temporaryFolder, "target/jkube/helm/test/kubernetes")); + summaryService.setHelmRepository("localhost:8001/api/charts"); + summaryService.addDeletedKubernetesResource(KubernetesResourceSummary.builder() .kind("Deployment") .group("apps") .version("v1") .namespace("test-ns") .resourceName("test") .build()); - SummaryUtil.addDeletedKubernetesResource(KubernetesResourceSummary.builder() + summaryService.addDeletedKubernetesResource(KubernetesResourceSummary.builder() .kind("Service") .group("v1") .version("v1") .namespace("test-ns") .resourceName("test") .build()); - SummaryUtil.setAppliedClusterUrl("https://192.168.39.75:8443/"); - SummaryUtil.setUndeployedClusterUrl("https://192.168.39.75:8443/"); - SummaryUtil.setSuccessful(true); + summaryService.setAppliedClusterUrl("https://192.168.39.75:8443/"); + summaryService.setUndeployedClusterUrl("https://192.168.39.75:8443/"); + summaryService.setSuccessful(true); } private void verifySummaryPrintedOnce() { diff --git a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ResourceService.java b/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ResourceService.java index d8def86348..f58356b82e 100644 --- a/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ResourceService.java +++ b/jkube-kit/config/resource/src/main/java/org/eclipse/jkube/kit/config/resource/ResourceService.java @@ -17,6 +17,7 @@ import java.io.IOException; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceClassifier; import io.fabric8.kubernetes.api.model.KubernetesList; @@ -26,7 +27,7 @@ public interface ResourceService { KubernetesList generateResources(PlatformMode platformMode, EnricherManager enricherManager, KitLogger log) throws IOException; - File writeResources(KubernetesList resources, ResourceClassifier classifier, KitLogger log) throws IOException; + File writeResources(KubernetesList resources, ResourceClassifier classifier, KitLogger log, SummaryService summaryService) throws IOException; @FunctionalInterface interface ResourceFileProcessor { diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/ApplyService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/ApplyService.java index 46a19a5a17..7c01200d31 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/ApplyService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/ApplyService.java @@ -31,12 +31,12 @@ import io.fabric8.kubernetes.client.dsl.base.PatchContext; import io.fabric8.kubernetes.client.dsl.base.PatchType; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.summary.KubernetesResourceSummary; import org.eclipse.jkube.kit.common.util.FileUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.common.util.UserConfigurationCompare; import org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil; @@ -116,13 +116,15 @@ public class ApplyService { private boolean rollingUpgradePreserveScale = true; private boolean recreateMode; private final PatchService patchService; + private final SummaryService summaryService; // This map is to track projects created. private static final Set projectsCreated = new HashSet<>(); - public ApplyService(KubernetesClient kubernetesClient, KitLogger log) { + public ApplyService(KubernetesClient kubernetesClient, KitLogger log, SummaryService summaryService) { this.kubernetesClient = kubernetesClient; this.patchService = new PatchService(kubernetesClient, log); this.log = log; + this.summaryService = summaryService; } /** @@ -1367,7 +1369,7 @@ public void setRollingUpgradePreserveScale(boolean rollingUpgradePreserveScale) public void applyEntities(String fileName, Collection entities, KitLogger serviceLogger, long serviceUrlWaitTimeSeconds) { - SummaryUtil.setAppliedClusterUrl(kubernetesClient.getMasterUrl().toString()); + summaryService.setAppliedClusterUrl(kubernetesClient.getMasterUrl().toString()); applyStandardEntities(fileName, getK8sListWithNamespaceFirst(entities)); } @@ -1389,7 +1391,7 @@ private void applyStandardEntities(String fileName, List entities) } private void addToAppliedResourcesSummary(HasMetadata h, String applicableNamespace) { - SummaryUtil.addAppliedKubernetesResource(KubernetesResourceSummary.builder() + summaryService.addAppliedKubernetesResource(KubernetesResourceSummary.builder() .group(trimGroup(h.getApiVersion())) .version(trimVersion(h.getApiVersion())) .namespace(applicableNamespace) diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java index 6a2e8ed705..bc8c3b3188 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/JKubeServiceHub.java @@ -25,6 +25,7 @@ import org.eclipse.jkube.kit.common.service.MigrateService; import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.LazyBuilder; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -66,14 +67,16 @@ public class JKubeServiceHub implements Closeable { private LazyBuilder helmService; private LazyBuilder clusterAccessLazyBuilder; private LazyBuilder kubernetesClientLazyBuilder; + private LazyBuilder summaryService; private final boolean offline; + private final boolean summaryEnabled; @Builder public JKubeServiceHub( ClusterAccess clusterAccess, RuntimeMode platformMode, KitLogger log, DockerServiceHub dockerServiceHub, JKubeConfiguration configuration, BuildServiceConfig buildServiceConfig, - LazyBuilder resourceService, boolean offline) { + LazyBuilder resourceService, boolean offline, boolean summaryEnabled) { this.clusterAccess = clusterAccess; this.platformMode = platformMode; this.log = log; @@ -82,6 +85,7 @@ public JKubeServiceHub( this.buildServiceConfig = buildServiceConfig; this.resourceService = resourceService; this.offline = offline; + this.summaryEnabled = summaryEnabled; init(); } @@ -103,9 +107,10 @@ private void init() { private void initLazyBuilders() { clusterAccessLazyBuilder = new LazyBuilder<>(this::initClusterAccessIfNecessary); kubernetesClientLazyBuilder = new LazyBuilder<>(() -> getClusterAccess().createDefaultClient()); + summaryService = new LazyBuilder<>(() -> new SummaryService(configuration.getBuildDirectory(), log, summaryEnabled)); buildServiceManager = new LazyBuilder<>(() -> new BuildServiceManager(this)); pluginManager = new LazyBuilder<>(() -> new PluginManager(this)); - applyService = new LazyBuilder<>(() -> new ApplyService(getClient(), log)); + applyService = new LazyBuilder<>(() -> new ApplyService(getClient(), log, getSummaryService())); portForwardService = new LazyBuilder<>(() -> { getClient(); return new PortForwardService(log); @@ -120,7 +125,7 @@ private void initLazyBuilders() { return new KubernetesUndeployService(this, log); }); migrateService = new LazyBuilder<>(() -> new MigrateService(getConfiguration().getBasedir(), log)); - helmService = new LazyBuilder<>(() -> new HelmService(getConfiguration(), log)); + helmService = new LazyBuilder<>(() -> new HelmService(getConfiguration(), log, getSummaryService())); } private ClusterAccess initClusterAccessIfNecessary() { @@ -181,4 +186,8 @@ public KubernetesClient getClient() { public ClusterAccess getClusterAccess() { return clusterAccessLazyBuilder.get(); } + + public SummaryService getSummaryService() { + return summaryService.get(); + } } diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildService.java index dddde14390..470a17c099 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildService.java @@ -18,7 +18,7 @@ import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.JKubeConfiguration; -import org.eclipse.jkube.kit.common.util.SummaryUtil; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.RegistryConfig; import org.eclipse.jkube.kit.config.resource.RuntimeMode; @@ -37,6 +37,7 @@ public class DockerBuildService extends AbstractImageBuildService { private final BuildServiceConfig buildServiceConfig; private final JKubeConfiguration jKubeConfiguration; private final DockerServiceHub dockerServices; + private final SummaryService summaryService; public DockerBuildService(JKubeServiceHub jKubeServiceHub) { super(jKubeServiceHub); @@ -47,21 +48,19 @@ public DockerBuildService(JKubeServiceHub jKubeServiceHub) { "JKubeConfiguration is required"); this.dockerServices = Objects.requireNonNull(jKubeServiceHub.getDockerServiceHub(), "Docker Service Hub is required"); + this.summaryService = jKubeServiceHub.getSummaryService(); } @Override public boolean isApplicable() { - if (runtimeMode == RuntimeMode.KUBERNETES) { - SummaryUtil.setBuildStrategy("Local Docker"); - return true; - } - return false; + return runtimeMode == RuntimeMode.KUBERNETES; } @Override public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeServiceException { try { - dockerServices.getBuildService().buildImage(imageConfig, buildServiceConfig.getImagePullManager(), jKubeConfiguration); + summaryService.setBuildStrategy("Local Docker"); + dockerServices.getBuildService().buildImage(imageConfig, buildServiceConfig.getImagePullManager(), jKubeConfiguration, summaryService); // Assume we always want to tag dockerServices.getBuildService().tagImage(imageConfig.getName(), imageConfig); @@ -73,7 +72,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService @Override protected void pushSingleImage(ImageConfiguration imageConfiguration, int retries, RegistryConfig registryConfig, boolean skipTag) throws JKubeServiceException { try { - dockerServices.getRegistryService().pushImage(imageConfiguration, retries, registryConfig, skipTag); + dockerServices.getRegistryService().pushImage(imageConfiguration, retries, registryConfig, skipTag, summaryService); } catch (IOException ex) { throw new JKubeServiceException("Error while trying to push the image: " + ex.getMessage(), ex); } diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildService.java index 470d1c58f1..335763cc43 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildService.java @@ -25,8 +25,8 @@ import org.eclipse.jkube.kit.common.AssemblyFileEntry; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.EnvUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.common.RegistryConfig; @@ -59,6 +59,7 @@ public class JibBuildService extends AbstractImageBuildService { private final KitLogger log; private final BuildServiceConfig buildServiceConfig; private final JKubeConfiguration configuration; + private final SummaryService summaryService; public JibBuildService(JKubeServiceHub jKubeServiceHub) { super(jKubeServiceHub); @@ -67,20 +68,19 @@ public JibBuildService(JKubeServiceHub jKubeServiceHub) { "BuildServiceConfig is required"); this.configuration = Objects.requireNonNull(jKubeServiceHub.getConfiguration(), "JKubeConfiguration is required"); + this.summaryService = Objects.requireNonNull(jKubeServiceHub.getSummaryService(), + "SummaryService is required"); } @Override public boolean isApplicable() { - if (buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib) { - SummaryUtil.setBuildStrategy("Local Jib"); - return true; - } - return false; + return buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib; } @Override public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeServiceException { try { + summaryService.setBuildStrategy("Local Jib"); log.info("[[B]]JIB[[B]] image build started"); if (imageConfig.getBuildConfiguration().isDockerFileMode()) { throw new JKubeServiceException("Dockerfile mode is not supported with JIB build strategy"); @@ -89,7 +89,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService BuildDirs buildDirs = new BuildDirs(imageConfig.getName(), configuration); final Credential pullRegistryCredential = getRegistryCredentials( configuration.getRegistryConfig(), false, imageConfig, log); - final JibContainerBuilder containerBuilder = containerFromImageConfiguration(imageConfig, pullRegistryCredential); + final JibContainerBuilder containerBuilder = containerFromImageConfiguration(imageConfig, pullRegistryCredential, summaryService); final Map> layers = AssemblyManager.getInstance() .copyFilesToFinalTarballDirectory(configuration, buildDirs, @@ -101,7 +101,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService // files should be added using the AssemblyFileEntry list. AssemblyManager, should provide // a common way to achieve this so that both the tar builder and any other builder could get a hold of // archive customizers, file entries, etc. - File dockerTarArchive = getAssemblyTarArchive(imageConfig, configuration, log); + File dockerTarArchive = getAssemblyTarArchive(imageConfig, configuration, log, summaryService); JibServiceUtil.buildContainer(containerBuilder, TarImage.at(dockerTarArchive.toPath()).named(imageConfig.getName()), log); log.info(" %s successfully built", dockerTarArchive.getAbsolutePath()); @@ -121,7 +121,8 @@ protected void pushSingleImage(ImageConfiguration imageConfiguration, int retrie imageConfiguration, getRegistryCredentials(registryConfig, true, imageConfiguration, log), getBuildTarArchive(imageConfiguration, configuration), - log + log, + summaryService ); } catch (Exception ex) { throw new JKubeServiceException("Error when push JIB image", ex); @@ -142,11 +143,11 @@ static ImageConfiguration prependRegistry(ImageConfiguration imageConfiguration, return imageConfiguration; } - static File getAssemblyTarArchive(ImageConfiguration imageConfig, JKubeConfiguration configuration, KitLogger log) throws IOException { + static File getAssemblyTarArchive(ImageConfiguration imageConfig, JKubeConfiguration configuration, KitLogger log, SummaryService summaryService) throws IOException { log.info("Preparing assembly files"); final String targetImage = imageConfig.getName(); return AssemblyManager.getInstance() - .createDockerTarArchive(targetImage, configuration, imageConfig.getBuildConfiguration(), log, null); + .createDockerTarArchive(targetImage, configuration, imageConfig.getBuildConfiguration(), log, null, summaryService); } static Credential getRegistryCredentials( diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java index 0415075ea7..d8ed4478c6 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployService.java @@ -28,7 +28,6 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.summary.KubernetesResourceSummary; import org.eclipse.jkube.kit.common.util.KubernetesHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.kit.config.service.UndeployService; @@ -67,7 +66,7 @@ public void undeploy(List resourceDirs, ResourceConfig resourceConfig, Fil logger.warn("No such generated manifests found for this project, ignoring."); return; } - SummaryUtil.setUndeployedClusterUrl(jKubeServiceHub.getClient().getMasterUrl().toString()); + jKubeServiceHub.getSummaryService().setUndeployedClusterUrl(jKubeServiceHub.getClient().getMasterUrl().toString()); List undeployEntities = getK8sListWithNamespaceFirst(entities); Collections.reverse(undeployEntities); undeployCustomResources(resourceConfig.getNamespace(), fallbackNamespace, undeployEntities); @@ -123,7 +122,7 @@ private void deleteCustomResource(GenericKubernetesResource customResource, Stri } private void addToUndeployedResourcesSummary(String namespace, HasMetadata h) { - SummaryUtil.addDeletedKubernetesResource(KubernetesResourceSummary.builder() + jKubeServiceHub.getSummaryService().addDeletedKubernetesResource(KubernetesResourceSummary.builder() .group(trimGroup(h.getApiVersion())) .version(trimVersion(h.getApiVersion())) .namespace(namespace) diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtil.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtil.java new file mode 100644 index 0000000000..30ede6c1eb --- /dev/null +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtil.java @@ -0,0 +1,40 @@ +/** + * 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.service.kubernetes; + +import org.eclipse.jkube.kit.config.service.JKubeServiceHub; + +public class SummaryServiceUtil { + private SummaryServiceUtil() { } + + public static void printSummary(JKubeServiceHub jKubeServiceHub) { + if (jKubeServiceHub != null) { + jKubeServiceHub.getSummaryService().printSummary(jKubeServiceHub.getConfiguration().getBasedir()); + jKubeServiceHub.getSummaryService().clear(); + } + } + + public static void printSummaryIfLastExecuting(JKubeServiceHub jKubeServiceHub, String current, String lastExecuting) { + if (lastExecuting != null && lastExecuting.equals(current)) { + printSummary(jKubeServiceHub); + } + } + + public static void handleExceptionAndSummary(JKubeServiceHub jKubeServiceHub, Exception exception) { + if (jKubeServiceHub != null) { + jKubeServiceHub.getSummaryService().setFailureAndCause(exception.getMessage()); + printSummary(jKubeServiceHub); + } + } +} diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtils.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtils.java index fa1ea5b2f0..686a08cd68 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtils.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtils.java @@ -27,7 +27,6 @@ import org.eclipse.jkube.kit.build.api.assembly.ArchiverCustomizer; import org.eclipse.jkube.kit.common.util.IoUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; @@ -63,7 +62,7 @@ protected static File createBuildArchive(JKubeServiceHub jKubeServiceHub, ImageC final ArchiverCustomizer customizer = createS2IArchiveCustomizer(jKubeServiceHub.getBuildServiceConfig(), imageConfig); try { return jKubeServiceHub.getDockerServiceHub().getArchiveService() - .createDockerBuildArchive(imageConfig, jKubeServiceHub.getConfiguration(), customizer); + .createDockerBuildArchive(imageConfig, jKubeServiceHub.getConfiguration(), customizer, jKubeServiceHub.getSummaryService()); } catch (IOException e) { throw new JKubeServiceException("Unable to create the build archive", e); } @@ -124,7 +123,7 @@ protected static BuildStrategy createBuildStrategy( final String fromNamespace = getMapValueWithDefault(fromExt, JKubeBuildStrategy.SourceStrategy.namespace, IMAGE_STREAM_TAG.equals(fromKind) ? "openshift" : null); if (osBuildStrategy == JKubeBuildStrategy.docker) { - SummaryUtil.setBuildStrategy("Cluster Docker"); + jKubeServiceHub.getSummaryService().setBuildStrategy("Cluster Docker"); BuildStrategy buildStrategy = new BuildStrategyBuilder() .withType("Docker") .withNewDockerStrategy() @@ -143,7 +142,7 @@ protected static BuildStrategy createBuildStrategy( } return buildStrategy; } else if (osBuildStrategy == JKubeBuildStrategy.s2i) { - SummaryUtil.setBuildStrategy("Cluster S2I"); + jKubeServiceHub.getSummaryService().setBuildStrategy("Cluster S2I"); BuildStrategy buildStrategy = new BuildStrategyBuilder() .withType("Source") .withNewSourceStrategy() diff --git a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java index 33ecfc0e48..226d63d391 100644 --- a/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java +++ b/jkube-kit/config/service/src/main/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftBuildService.java @@ -34,7 +34,6 @@ import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.common.RegistryConfig; @@ -152,8 +151,8 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService // Create a file with generated image streams addImageStreamToFile(getImageStreamFile(), imageName, client); - SummaryUtil.setBaseImageNameImageSummary(imageConfig.getName(), imageConfig.getBuildConfiguration().getFrom()); - SummaryUtil.setImageStreamUsedImageSummary(imageConfig.getName(), resolveImageStreamName(imageName)); + jKubeServiceHub.getSummaryService().setBaseImageNameImageSummary(imageConfig.getName(), imageConfig.getBuildConfiguration().getFrom()); + jKubeServiceHub.getSummaryService().setImageStreamUsedImageSummary(imageConfig.getName(), resolveImageStreamName(imageName)); createAdditionalTags(imageConfig, imageName); } else { @@ -209,7 +208,7 @@ protected String updateOrCreateBuildConfig(BuildServiceConfig config, OpenShiftC // Fetch existing build config BuildConfig buildConfig = client.buildConfigs().inNamespace(applicableOpenShiftNamespace).withName(buildName).get(); - SummaryUtil.setOpenShiftBuildConfigName(buildName); + jKubeServiceHub.getSummaryService().setOpenShiftBuildConfigName(buildName); if (buildConfig != null) { // lets verify the BC BuildConfigSpec spec = OpenShiftBuildServiceUtils.getBuildConfigSpec(buildConfig); diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java index 8d465eef14..d228677380 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/ApplyServiceTest.java @@ -35,6 +35,7 @@ import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer; import io.fabric8.openshift.client.OpenShiftClient; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.service.openshift.WebServerEventCollector; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; @@ -67,6 +68,8 @@ class ApplyServiceTest { @Mocked private KitLogger log; + @Mocked + private SummaryService summaryService; KubernetesMockServer mockServer; OpenShiftClient client; @@ -75,7 +78,7 @@ class ApplyServiceTest { @BeforeEach void setUp() { - applyService = new ApplyService(client, log); + applyService = new ApplyService(client, log, summaryService); applyService.setNamespace("default"); } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubBuildServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubBuildServiceTest.java index 942988110d..ee086638bc 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubBuildServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/JKubeServiceHubBuildServiceTest.java @@ -13,6 +13,7 @@ */ package org.eclipse.jkube.kit.config.service; +import java.io.File; import java.util.stream.Stream; import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; @@ -33,6 +34,7 @@ import static org.junit.jupiter.params.provider.Arguments.arguments; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class JKubeServiceHubBuildServiceTest { @@ -55,9 +57,11 @@ void getBuildService(RuntimeMode runtimeMode, JKubeBuildStrategy buildStrategy, Class buildServiceClass) { // Given final BuildServiceConfig config = BuildServiceConfig.builder().jKubeBuildStrategy(buildStrategy).build(); + final JKubeConfiguration jKubeConfiguration = mock(JKubeConfiguration.class); + when(jKubeConfiguration.getBuildDirectory()).thenReturn(new File("target")); final JKubeServiceHub jKubeServiceHub = new JKubeServiceHub(null, runtimeMode, new KitLogger.StdoutLogger(), - mock(DockerServiceHub.class, RETURNS_DEEP_STUBS), new JKubeConfiguration(), config, new LazyBuilder<>(() -> null), - true); + mock(DockerServiceHub.class, RETURNS_DEEP_STUBS), jKubeConfiguration, config, new LazyBuilder<>(() -> null), + true, false); // When final BuildService result = jKubeServiceHub.getBuildService(); // Then diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildServiceTest.java index 710dc0d3e3..eb187d3065 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/DockerBuildServiceTest.java @@ -73,7 +73,7 @@ void build_withInvalidConfiguration_shouldNotBuildAndTag() throws Exception { new DockerBuildService(mockedJKubeServiceHub).build(image); // Then verify(mockedDockerBuildService, times(0)) - .buildImage(eq(image), any(), any()); + .buildImage(eq(image), any(), any(), any()); verify(mockedDockerBuildService, times(0)) .tagImage(anyString(), eq(image)); } @@ -84,7 +84,7 @@ void build_withValidConfiguration_shouldBuildAndTag() throws Exception { new DockerBuildService(mockedJKubeServiceHub).build(image); // Then verify(mockedDockerBuildService, times(1)) - .buildImage(eq(image), any(), any()); + .buildImage(eq(image), any(), any(), any()); verify(mockedDockerBuildService, times(1)) .tagImage("image-name", image); } @@ -104,7 +104,7 @@ void build_withImageBuildConfigurationSkipEnabled_shouldNotBuildAndTag() throws new DockerBuildService(mockedJKubeServiceHub).build(imageWithSkipEnabled); // Then verify(mockedDockerBuildService, times(0)) - .buildImage(eq(image), any(), any()); + .buildImage(eq(image), any(), any(), any()); verify(mockedDockerBuildService, times(0)) .tagImage(anyString(), eq(image)); } @@ -112,7 +112,7 @@ void build_withImageBuildConfigurationSkipEnabled_shouldNotBuildAndTag() throws @Test void build_withFailure_shouldThrowException() throws Exception { // Given - doThrow(new IOException("Mock IO error")).when(mockedDockerBuildService).buildImage(eq(image), any(), any()); + doThrow(new IOException("Mock IO error")).when(mockedDockerBuildService).buildImage(eq(image), any(), any(), any()); // When + Then assertThatExceptionOfType(JKubeServiceException.class) .isThrownBy(() -> new DockerBuildService(mockedJKubeServiceHub).build(image)) @@ -125,7 +125,7 @@ void push_withDefaults_shouldPush() throws Exception { new DockerBuildService(mockedJKubeServiceHub).push(Collections.emptyList(), 0, null, false); // Then verify(mockedJKubeServiceHub.getDockerServiceHub().getRegistryService(), times(0)) - .pushImage(any(), eq(0), isNull(), eq(false)); + .pushImage(any(), eq(0), isNull(), eq(false), any()); } @Test @@ -134,6 +134,6 @@ void push_withImageBuildConfigurationSkipEnabled_shouldNotPush() throws Exceptio new DockerBuildService(mockedJKubeServiceHub).build(imageWithSkipEnabled); // Then verify(mockedJKubeServiceHub.getDockerServiceHub().getRegistryService(), times(0)) - .pushImage(any(), eq(0), isNull(), eq(false)); + .pushImage(any(), eq(0), isNull(), eq(false), any()); } } diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildServiceTest.java index 4ead5d86d8..74466f9cc0 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/JibBuildServiceTest.java @@ -157,7 +157,7 @@ void getAssemblyTarArchive() throws IOException { // Given File projectBaseDir = Files.createDirectory(temporaryFolder.resolve("test")).toFile(); // When - File tarArchive = JibBuildService.getAssemblyTarArchive(imageConfiguration, createJKubeConfiguration(projectBaseDir), mockedLogger); + File tarArchive = JibBuildService.getAssemblyTarArchive(imageConfiguration, createJKubeConfiguration(projectBaseDir), mockedLogger, mockedServiceHub.getSummaryService()); // Then assertThat(tarArchive).isNotNull() .isEqualTo(projectBaseDir.toPath().resolve("target").resolve("test").resolve("testimage").resolve("0.0.1") @@ -178,7 +178,7 @@ void pushWithNoConfigurations() throws Exception { // When new JibBuildService(mockedServiceHub).push(Collections.emptyList(), 1, null, false); // Then - jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(any(), any(), any(), eq(mockedLogger)), times(0)); + jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(any(), any(), any(), eq(mockedLogger), any()), times(0)); } @Test @@ -187,7 +187,7 @@ void pushWithConfiguration() throws Exception { // When new JibBuildService(mockedServiceHub).push(Collections.singletonList(imageConfiguration), 1, registryConfig, false); // Then - jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(eq(imageConfiguration), eq(Credential.from("testuserpush", "testpass")), any(), eq(mockedLogger)), times(1)); + jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(eq(imageConfiguration), eq(Credential.from("testuserpush", "testpass")), any(), eq(mockedLogger), any()), times(1)); } } @@ -204,7 +204,7 @@ void push_withImageBuildConfigurationSkipTrue_shouldNotPushImage() throws JKubeS // When new JibBuildService(mockedServiceHub).push(Collections.singletonList(imageConfiguration), 1, registryConfig, false); // Then - jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(any(), any(), any(), any()), times(0)); + jibServiceUtilMockedStatic.verify(() -> JibServiceUtil.jibPush(any(), any(), any(), any(), any()), times(0)); } @Test diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtilTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtilTest.java new file mode 100644 index 0000000000..fe145c58ce --- /dev/null +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/SummaryServiceUtilTest.java @@ -0,0 +1,107 @@ +/** + * 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.service.kubernetes; + +import org.eclipse.jkube.kit.common.JKubeConfiguration; +import org.eclipse.jkube.kit.common.service.SummaryService; +import org.eclipse.jkube.kit.config.service.JKubeServiceHub; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.io.IOException; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class SummaryServiceUtilTest { + private JKubeServiceHub mockedJKubeServiceHub; + private SummaryService mockedSummaryService; + + @BeforeEach + public void setUp() { + JKubeConfiguration mockedJKubeConfiguration = mock(JKubeConfiguration.class); + when(mockedJKubeConfiguration.getBasedir()).thenReturn(new File("test")); + mockedJKubeServiceHub = mock(JKubeServiceHub.class); + mockedSummaryService = mock(SummaryService.class); + when(mockedJKubeServiceHub.getSummaryService()).thenReturn(mockedSummaryService); + when(mockedJKubeServiceHub.getConfiguration()).thenReturn(mockedJKubeConfiguration); + } + + @Test + void printSummary_whenNullJKubeServiceHub_thenDoesNothing() { + // Given + When + SummaryServiceUtil.printSummary(null); + + // Then + verify(mockedJKubeServiceHub, times(0)).getSummaryService(); + } + + @Test + void printSummary_whenJKubeServiceHub_thenPrintsSummary() { + // Given + When + SummaryServiceUtil.printSummary(mockedJKubeServiceHub); + + // Then + verifySummaryPrinted(2); + } + + @Test + void printSummaryIfLastExecuting_whenLastExecutingNull_thenPrintsNothing() { + // Given + When + SummaryServiceUtil.printSummaryIfLastExecuting(mockedJKubeServiceHub, "resource", null); + + // Then + verify(mockedJKubeServiceHub, times(0)).getSummaryService(); + } + + @Test + void printSummaryIfLastExecuting_whenLastExecutingAndCurrentDifferent_thenPrintsNothing() { + // Given + When + SummaryServiceUtil.printSummaryIfLastExecuting(mockedJKubeServiceHub, "resource", "apply"); + + // Then + verify(mockedJKubeServiceHub, times(0)).getSummaryService(); + } + + @Test + void printSummaryIfLastExecuting_whenLastExecutingAndCurrentSame_thenPrintsSummary() { + // Given + When + SummaryServiceUtil.printSummaryIfLastExecuting(mockedJKubeServiceHub, "resource", "resource"); + + // Then + verifySummaryPrinted(2); + } + + @Test + void handleExceptionAndSummary_whenInvoked_thenSetsFailureAndPrintsSummary() { + // Given + When + SummaryServiceUtil.handleExceptionAndSummary(mockedJKubeServiceHub, new IOException("failure")); + + // Then + verifySummaryPrinted(3); + verify(mockedSummaryService).setFailureAndCause("failure"); + } + + + private void verifySummaryPrinted(int summaryServiceInvocations) { + verify(mockedJKubeServiceHub, times(summaryServiceInvocations)).getSummaryService(); + verify(mockedSummaryService).printSummary(any()); + verify(mockedSummaryService).clear(); + } + +} diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java index 27fedbf0e6..e3e94e2d85 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceTest.java @@ -120,7 +120,7 @@ void build_withImageBuildConfigurationSkipEnabled_shouldNotBuildImage() throws J // Then verify(mockedArchiveService, times(0)) - .createDockerBuildArchive(any(), any(), any()); + .createDockerBuildArchive(any(), any(), any(), any()); } @Test diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtilsTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtilsTest.java index 281e49366e..6a06642afc 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtilsTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenShiftBuildServiceUtilsTest.java @@ -93,7 +93,7 @@ void tearDown() { void createBuildArchive_withIOExceptionOnCreateDockerBuildArchive_shouldThrowException() throws Exception { // Given when(jKubeServiceHub.getDockerServiceHub().getArchiveService().createDockerBuildArchive( - any(ImageConfiguration.class), any(JKubeConfiguration.class), any(ArchiverCustomizer.class))) + any(ImageConfiguration.class), any(JKubeConfiguration.class), any(ArchiverCustomizer.class), any())) .thenThrow(new IOException("Mocked Exception")); // When + Then assertThatExceptionOfType(JKubeServiceException.class) @@ -249,7 +249,7 @@ void checkTarPackage() throws Exception { final ArgumentCaptor customizer = ArgumentCaptor.forClass(ArchiverCustomizer.class); verify(jKubeServiceHub.getDockerServiceHub().getArchiveService(), times(1)) - .createDockerBuildArchive(any(ImageConfiguration.class), any(JKubeConfiguration.class), customizer.capture()); + .createDockerBuildArchive(any(ImageConfiguration.class), any(JKubeConfiguration.class), customizer.capture(), any()); customizer.getValue().customize(tarArchiver); final ArgumentCaptor path = ArgumentCaptor.forClass(String.class); diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java index 2ce8f99fca..d65c9d3723 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginManagerTest.java @@ -35,7 +35,7 @@ class PluginManagerTest { @BeforeEach void setUp() { jKubeServiceHub = new JKubeServiceHub(null, RuntimeMode.KUBERNETES, new KitLogger.StdoutLogger(), - null, new JKubeConfiguration(), new BuildServiceConfig(), new LazyBuilder<>(() -> null), true); + null, new JKubeConfiguration(), new BuildServiceConfig(), new LazyBuilder<>(() -> null), true, false); } @Test diff --git a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java index c4bf559b3d..2ecf832c3b 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/plugins/PluginServiceTest.java @@ -57,7 +57,7 @@ void setUp() { .outputDirectory(temporaryFolder) .build()) .build(), - new BuildServiceConfig(), new LazyBuilder<>(() -> null), true); + new BuildServiceConfig(), new LazyBuilder<>(() -> null), true, false); } @Test diff --git a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/EnricherContext.java b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/EnricherContext.java index 49d0de554b..a811685279 100644 --- a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/EnricherContext.java +++ b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/EnricherContext.java @@ -22,6 +22,7 @@ import org.eclipse.jkube.kit.common.Dependency; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.GroupArtifactVersion; import org.eclipse.jkube.kit.enricher.api.model.Configuration; import org.eclipse.jkube.kit.common.util.ProjectClassLoaders; @@ -135,4 +136,5 @@ default Optional getDependencyVersion(String groupId, String artifactId) * @return the Handler Hub instance. */ HandlerHub getHandlerHub(); + SummaryService getSummaryService(); } diff --git a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/JKubeEnricherContext.java b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/JKubeEnricherContext.java index b29947d3ea..2613330581 100644 --- a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/JKubeEnricherContext.java +++ b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/JKubeEnricherContext.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Singular; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.RegistryServerConfiguration; import org.eclipse.jkube.kit.common.JavaProject; @@ -73,13 +74,15 @@ public class JKubeEnricherContext implements EnricherContext { private HandlerHub handlerHub; @Getter(AccessLevel.NONE) private JKubeBuildStrategy jKubeBuildStrategy; + private SummaryService summaryService; @Builder(toBuilder = true) public JKubeEnricherContext( @Singular List settings, @Singular Map processingInstructions, JavaProject project, KitLogger log, - ResourceConfig resources, @Singular List images, ProcessorConfig processorConfig, JKubeBuildStrategy jKubeBuildStrategy) { + ResourceConfig resources, @Singular List images, ProcessorConfig processorConfig, + JKubeBuildStrategy jKubeBuildStrategy, SummaryService summaryService) { this.settings = settings; this.processingInstructions = processingInstructions; this.project = project; @@ -88,6 +91,7 @@ public JKubeEnricherContext( this.images = images; this.processorConfig = processorConfig; this.handlerHub = new HandlerHub(getGav(), getProperties()); + this.summaryService = summaryService; this.configuration = Configuration.builder() .images(images) .resource(resources) diff --git a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtil.java b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtil.java index 63587fb86d..26d64eaaf2 100644 --- a/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtil.java +++ b/jkube-kit/enricher/api/src/main/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtil.java @@ -37,10 +37,10 @@ import io.fabric8.kubernetes.client.utils.Serialization; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.KindFilenameMapperUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.MapUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.resource.GroupArtifactVersion; @@ -412,16 +412,18 @@ public static void validateKubernetesMasterUrl(URL masterUrl) { } } - public static void handleKubernetesClientException(KubernetesClientException e, KitLogger logger, boolean summaryEnabled) { + public static IllegalStateException handleKubernetesClientException(KubernetesClientException e, KitLogger logger, SummaryService summaryService) { Throwable cause = e.getCause(); if (cause instanceof UnknownHostException) { logger.error( "Could not connect to kubernetes cluster!"); logger.error( "Connection error: %s", cause); String message = "Could not connect to kubernetes cluster. Are you sure if you're connected to a remote cluster via `kubectl`? Error: " + cause; - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, message, () -> new IllegalStateException(message, e)); + summaryService.setFailureAndCause(message); + return new IllegalStateException(message, e); } else { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, e.getMessage(), () -> new IllegalStateException(e.getMessage(), e)); + summaryService.setFailureAndCause(e.getMessage()); + return new IllegalStateException(e.getMessage(), e); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ConfigMapEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ConfigMapEnricher.java index 51561aca67..8597584545 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ConfigMapEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ConfigMapEnricher.java @@ -30,7 +30,6 @@ import java.util.Set; import java.util.stream.Stream; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.ConfigMapEntry; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; @@ -69,7 +68,7 @@ public void visit(ConfigMapBuilder element) { final Map annotations = element.buildMetadata().getAnnotations(); if (annotations != null) { try { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); addConfigMapFromAnnotations(annotations, element); } catch (IOException e) { throw new IllegalArgumentException(e); @@ -151,7 +150,7 @@ private void addConfigMapFromResourceConfigurations(KubernetesListBuilder builde if ((configMap.getData() != null && !configMap.getData().isEmpty()) || (configMap.getBinaryData() != null && !configMap.getBinaryData().isEmpty())) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.addToConfigMapItems(configMap); } } catch (IOException e) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java index a0b7b63c93..da9906340c 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ContainerEnvJavaOptionsMergeEnricher.java @@ -19,7 +19,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -60,7 +59,7 @@ public ContainerEnvJavaOptionsMergeEnricher(JKubeEnricherContext enricherContext @Override public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { if (!asBoolean(getConfig(Config.DISABLE)) && hasImageConfiguration()) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new ContainerEnvJavaOptionsMergeVisitor(getImages())); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ControllerViaPluginConfigurationEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ControllerViaPluginConfigurationEnricher.java index 17a92c0dab..da7aa78ab6 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ControllerViaPluginConfigurationEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ControllerViaPluginConfigurationEnricher.java @@ -18,7 +18,6 @@ import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; @@ -84,7 +83,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { final List images = getImages(); // Check if at least a replica set is added. If not add a default one if (KubernetesResourceUtil.checkForKind(builder, POD_CONTROLLER_KINDS)) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); // At least one image must be present, otherwise the resulting config will be invalid if (KubernetesResourceUtil.checkForKind(builder, "StatefulSet")) { final StatefulSetSpec spec = statefulSetHandler.get(config, images).getSpec(); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DebugEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DebugEnricher.java index 0bc71d875c..22891847dd 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DebugEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DebugEnricher.java @@ -31,7 +31,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -69,7 +68,7 @@ public DebugEnricher(JKubeEnricherContext buildContext) { @Override public void create(PlatformMode platformMode, KubernetesListBuilder builder) { if (isDebugEnabled()) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); int count = 0; List items = builder.buildItems(); if (items != null) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricher.java index 5db1dbdcc2..b9952b8492 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricher.java @@ -28,7 +28,6 @@ import io.fabric8.kubernetes.api.model.batch.v1.Job; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; @@ -120,7 +119,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { .getHandlerFor(fromType(getConfig(Config.TYPE))); final HasMetadata resource = ch.get(config, images); log.info("Adding a default %s", resource.getKind()); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.addToItems(resource); setProcessingInstruction(FABRIC8_GENERATED_CONTAINERS, getContainersFromPodSpec(ch.getPodTemplateSpec(config, images))); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultMetadataEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultMetadataEnricher.java index 300932e6ac..ad8bfcf69e 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultMetadataEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultMetadataEnricher.java @@ -13,7 +13,6 @@ */ package org.eclipse.jkube.enricher.generic; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -71,7 +70,7 @@ private void enrichLabelsAndAnnotations(KubernetesListBuilder builder) { } private void visit(KubernetesListBuilder builder, MetadataVisitor[] visitors) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); for (MetadataVisitor visitor : visitors) { builder.accept(visitor); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricher.java index 402e277e63..28730d87b8 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricher.java @@ -25,7 +25,6 @@ import lombok.Getter; import org.apache.commons.lang3.StringUtils; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -100,7 +99,7 @@ public void visit(ObjectMetaBuilder metaBuilder) { boolean forceModifyNamespace = Boolean.parseBoolean(getConfig(Config.FORCE)); if (StringUtils.isBlank(metaBuilder.getNamespace()) || forceModifyNamespace) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); metaBuilder.withNamespace(getNamespaceName()).build(); } } @@ -147,7 +146,7 @@ private void addNewNamespaceToBuilderIfProvided(PlatformMode platformMode, Strin private void addNamespaceToBuilder(PlatformMode platformMode, String newNamespaceToCreate, KubernetesListBuilder builder, String type) { HasMetadata namespaceOrProject = getNamespaceOrProject(platformMode, type, newNamespaceToCreate); if (namespaceOrProject != null) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.addToItems(namespaceOrProject); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricher.java index 8ca02f5f9b..e3b194800c 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricher.java @@ -27,7 +27,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.apache.commons.lang3.StringUtils; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; @@ -128,7 +127,7 @@ public DefaultServiceEnricher(JKubeEnricherContext buildContext) { public void create(PlatformMode platformMode, KubernetesListBuilder builder) { final ResourceConfig xmlConfig = getConfiguration().getResource(); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); if (Optional.ofNullable(xmlConfig).map(ResourceConfig::getServices).map(c -> !c.isEmpty()).orElse(false)) { // Add Services configured via XML addServices(builder, xmlConfig.getServices()); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DependencyEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DependencyEnricher.java index 2a8b9ce748..db4fdfa7b1 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DependencyEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DependencyEnricher.java @@ -22,7 +22,6 @@ import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.Dependency; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -89,7 +88,7 @@ private void addArtifactsWithYaml(Set artifactSet, String dependencyYaml) t File file = artifact.getFile(); try { URI uri = new URI("jar:" + file.toURI() + "!/" + dependencyYaml); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); artifactSet.add(uri); } catch (URISyntaxException e) { getLog().debug("Failed to create URL for %s: %s", file, e); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricher.java index 7b69de2a57..c013f9830a 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricher.java @@ -15,7 +15,6 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.api.model.Configuration; import org.eclipse.jkube.kit.enricher.api.util.SecretConstants; @@ -65,7 +64,7 @@ protected Map generateData(String dockerId) { JsonObject ret = new JsonObject(); ret.add(dockerId, params); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); return Collections.singletonMap( SecretConstants.DOCKER_DATA_KEY, encode(ret.toString())); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/FileDataSecretEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/FileDataSecretEnricher.java index 27635165ce..4d1865b499 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/FileDataSecretEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/FileDataSecretEnricher.java @@ -17,7 +17,6 @@ import io.fabric8.kubernetes.api.model.KubernetesListBuilder; import io.fabric8.kubernetes.api.model.SecretBuilder; import org.eclipse.jkube.kit.common.util.Base64Util; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -57,7 +56,7 @@ public void visit(SecretBuilder element) { try { if (annotations != null && !annotations.isEmpty()) { final Map secretAnnotations = createSecretFromAnnotations(annotations); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); element.addToData(secretAnnotations); } } catch (IOException e) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/GitEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/GitEnricher.java index 60c09556b9..65f98aae0c 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/GitEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/GitEnricher.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder; import io.fabric8.openshift.api.model.DeploymentConfigBuilder; import org.eclipse.jkube.kit.common.util.GitUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.JKubeAnnotations; import org.eclipse.jkube.kit.config.resource.OpenShiftAnnotations; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -65,7 +64,7 @@ private Map getAnnotations(PlatformMode platformMode) { log.warn("Could not detect any git remote"); } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); annotations.putAll(getAnnotations(platformMode, gitRemoteUrl, repository.getBranch(), GitUtil.getGitCommitId(repository))); } return annotations; diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImageEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImageEnricher.java index c3d6d50b25..4269863934 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImageEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImageEnricher.java @@ -40,7 +40,6 @@ import io.fabric8.openshift.api.model.DeploymentConfigSpecFluent; import lombok.AllArgsConstructor; import lombok.Getter; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -205,7 +204,7 @@ public void visit(PodTemplateSpecBuilder templateBuilder) { if (containers == null) { containers = new ArrayList<>(); } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); mergeImageConfigurationWithContainerSpec(containers); podSpec.withContainers(containers).endSpec(); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricher.java index af9002b1e7..168c8eab81 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricher.java @@ -17,7 +17,6 @@ import io.fabric8.kubernetes.api.model.ContainerBuilder; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; import org.apache.commons.lang3.StringUtils; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.EnricherContext; @@ -31,7 +30,7 @@ public ImagePullPolicyEnricher(EnricherContext context) { public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { String imagePullPolicy = getValueFromConfig(JKUBE_ENFORCED_IMAGE_PULL_POLICY, null); if (StringUtils.isNotBlank(imagePullPolicy)) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(ContainerBuilder containerBuilder) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/IngressEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/IngressEnricher.java index 7f7ca39c9b..bdf6142d9e 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/IngressEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/IngressEnricher.java @@ -24,7 +24,6 @@ import org.eclipse.jkube.enricher.generic.ingress.ExtensionsV1beta1IngressConverter; import org.eclipse.jkube.enricher.generic.ingress.NetworkingV1IngressGenerator; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.IngressConfig; import org.eclipse.jkube.kit.config.resource.IngressRuleConfig; import org.eclipse.jkube.kit.config.resource.IngressTlsConfig; @@ -82,7 +81,7 @@ public void visit(ServiceBuilder serviceBuilder) { } HasMetadata generatedIngress = generateIngressWithConfiguredApiVersion(serviceBuilder); if (generatedIngress != null) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); listBuilder.addToItems(generatedIngress); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenIssueManagementEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenIssueManagementEnricher.java index 673ab0c8cc..ee3096cd7b 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenIssueManagementEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenIssueManagementEnricher.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder; import io.fabric8.openshift.api.model.DeploymentConfigBuilder; import org.eclipse.jkube.kit.common.JavaProject; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.JKubeAnnotations; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -120,7 +119,7 @@ private Map getAnnotations() { String system = rootProject.getIssueManagementSystem(); String url = rootProject.getIssueManagementUrl(); if (StringUtils.isNotEmpty(system) && StringUtils.isNotEmpty(url)) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); annotations.put(JKubeAnnotations.ISSUE_SYSTEM.value(), system); annotations.put(JKubeAnnotations.ISSUE_TRACKER_URL.value(), url); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenScmEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenScmEnricher.java index 854c440009..9cc64daabd 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenScmEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/MavenScmEnricher.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.batch.v1.JobBuilder; import io.fabric8.openshift.api.model.DeploymentConfigBuilder; import org.eclipse.jkube.kit.common.JavaProject; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.JKubeAnnotations; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -63,7 +62,7 @@ private Map getAnnotations() { String url = rootProject.getScmUrl(); String tag = rootProject.getScmTag(); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); if (StringUtils.isNotEmpty(tag)) { annotations.put(JKubeAnnotations.SCM_TAG.value(), tag); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/NameEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/NameEnricher.java index 8731f054e5..0a5374e5a4 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/NameEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/NameEnricher.java @@ -15,7 +15,6 @@ import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -51,7 +50,7 @@ private enum Config implements Configs.Config { public void create(PlatformMode platformMode, KubernetesListBuilder builder) { final String configuredName = getConfig(Config.NAME); final String defaultName = JKubeProjectUtil.createDefaultResourceName(getContext().getGav().getSanitizedArtifactId()); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(ObjectMetaBuilder resource) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricher.java index 6527abfd1f..4292f0ffae 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricher.java @@ -18,7 +18,6 @@ import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.PodTemplateSpec; import org.eclipse.jkube.kit.common.util.MapUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.EnricherContext; @@ -48,7 +47,7 @@ public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { template.setMetadata(new ObjectMeta()); } final ObjectMeta templateMetadata = template.getMetadata(); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); templateMetadata.setAnnotations(MapUtil.mergeMaps(templateMetadata.getAnnotations(), item.getMetadata().getAnnotations())); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PortNameEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PortNameEnricher.java index a94508417e..760dfe8296 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PortNameEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/PortNameEnricher.java @@ -16,7 +16,6 @@ import io.fabric8.kubernetes.api.builder.TypedVisitor; import io.fabric8.kubernetes.api.model.ContainerPortBuilder; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -57,7 +56,7 @@ public void visit(ContainerPortBuilder portBuilder) { // If port is given but no name, then try to detect the name if (port != null && StringUtils.isBlank(portBuilder.getName())) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); addPortName(portBuilder, port); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ProjectLabelEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ProjectLabelEnricher.java index ee1540f6f3..8d1dc0a32a 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ProjectLabelEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ProjectLabelEnricher.java @@ -19,7 +19,6 @@ import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.MapUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.GroupArtifactVersion; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -84,7 +83,7 @@ public ProjectLabelEnricher(JKubeEnricherContext buildContext) { @Override public void create(PlatformMode platformMode, KubernetesListBuilder builder) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(ServiceBuilder serviceBuilder) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricher.java index 439c40dcdd..5a41d8b11d 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricher.java @@ -14,7 +14,6 @@ package org.eclipse.jkube.enricher.generic; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.EnricherContext; @@ -35,7 +34,7 @@ public ReplicaCountEnricher(EnricherContext context) { public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { Integer replicas = Configs.asInteger(getValueFromConfig(JKUBE_ENFORCED_REPLICAS, null)); if (replicas != null) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); getContext().getHandlerHub().getControllerHandlers() .forEach(controller -> controller.get().overrideReplicas(builder, replicas)); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/RevisionHistoryEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/RevisionHistoryEnricher.java index 0f4f784db2..ee284c4c28 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/RevisionHistoryEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/RevisionHistoryEnricher.java @@ -19,7 +19,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -55,7 +54,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { log.info("Adding revision history limit to %s", maxRevisionHistories); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(io.fabric8.kubernetes.api.model.apps.DeploymentBuilder item) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/SecretEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/SecretEnricher.java index d1e20b8962..bca2af605d 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/SecretEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/SecretEnricher.java @@ -20,7 +20,6 @@ import io.fabric8.kubernetes.api.model.Secret; import io.fabric8.kubernetes.api.model.SecretBuilder; import org.eclipse.jkube.kit.common.util.Base64Util; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.SecretConfig; @@ -65,7 +64,7 @@ public void visit(SecretBuilder secretBuilder) { } // remove the annotation key annotation.remove(getAnnotationKey()); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); secretBuilder.addToData(data); } } @@ -124,7 +123,7 @@ private void addSecretsFromXmlConfiguration(KubernetesListBuilder builder) { Secret secret = new SecretBuilder().withData(data).withMetadata(metadata).withType(type).build(); if(!secretToIndexMap.containsKey(secretConfig.getName())) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.addToSecretItems(i, secret); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricher.java index 520a447d38..2120341069 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricher.java @@ -22,7 +22,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.ServiceAccountConfig; @@ -69,7 +68,7 @@ public void create(PlatformMode mode, KubernetesListBuilder builder) { private List createServiceAccountFromResourceConfig(ResourceConfig resourceConfig) { List serviceAccounts = new ArrayList<>(); if(resourceConfig != null && resourceConfig.getServiceAccounts() != null && !Boolean.parseBoolean(getConfig(Config.SKIP_CREATE))) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); for(ServiceAccountConfig serviceAccountConfig : resourceConfig.getServiceAccounts()) { if(serviceAccountConfig.getName() != null) { serviceAccounts.add(createServiceAccount(serviceAccountConfig.getName())); @@ -90,7 +89,7 @@ public void visit(DeploymentBuilder deploymentBuilder) { serviceAccounts.add(createServiceAccount(serviceAccountName)); } if(deploymentToSaPair.containsKey(deploymentBuilder.buildMetadata().getName())) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); deploymentBuilder.editSpec() .editTemplate() .editSpec() diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/TriggersAnnotationEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/TriggersAnnotationEnricher.java index 300cac8e8f..32c95f0353 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/TriggersAnnotationEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/TriggersAnnotationEnricher.java @@ -34,7 +34,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -147,7 +146,7 @@ public void visit(ContainerBuilder cb) { .build(); trigger.setAdditionalProperty("fieldPath", "spec.template.spec.containers[?(@.name==\"" + containerName + "\")].image"); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); triggerList.add(trigger); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/VolumePermissionEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/VolumePermissionEnricher.java index a5b47e91cc..f12c7a6ac5 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/VolumePermissionEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/VolumePermissionEnricher.java @@ -24,7 +24,6 @@ import io.fabric8.kubernetes.api.model.PodSpec; import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder; import io.fabric8.kubernetes.api.model.Quantity; -import io.fabric8.kubernetes.api.model.ResourceRequirements; import io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder; import io.fabric8.kubernetes.api.model.Volume; import io.fabric8.kubernetes.api.model.VolumeMount; @@ -32,7 +31,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -101,7 +99,7 @@ public void visit(PodTemplateSpecBuilder builder) { log.verbose("Adding init container for changing persistent volumes access mode to %s", getConfig(Config.PERMISSION)); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); if (!initContainerHandler.hasInitContainer(builder, ENRICHER_NAME)) { initContainerHandler.appendInitContainer(builder, createPvInitContainer(podSpec)); } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/AutoTLSEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/AutoTLSEnricher.java index fddc1d3131..8de2bec43d 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/AutoTLSEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/AutoTLSEnricher.java @@ -26,7 +26,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -84,7 +83,7 @@ public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { return; } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(PodTemplateSpecBuilder builder) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricher.java index 36dc81718f..fb39df1af8 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricher.java @@ -27,7 +27,6 @@ import io.fabric8.openshift.api.model.DeploymentStrategy; import io.fabric8.openshift.api.model.DeploymentStrategyBuilder; import org.eclipse.jkube.enricher.generic.DefaultControllerEnricher; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.EnricherConfig; @@ -52,7 +51,7 @@ public DeploymentConfigEnricher(JKubeEnricherContext context) { public void create(PlatformMode platformMode, KubernetesListBuilder builder) { if (isApplicable(platformMode)) { for(HasMetadata item : builder.buildItems()) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); if(item instanceof Deployment) { DeploymentConfig deploymentConfig = convertFromAppsV1Deployment(item); removeItemFromKubernetesBuilder(builder, item); diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ImageChangeTriggerEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ImageChangeTriggerEnricher.java index da53f36d2a..08478efb20 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ImageChangeTriggerEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ImageChangeTriggerEnricher.java @@ -22,7 +22,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -64,7 +63,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { if(platformMode.equals(PlatformMode.kubernetes)) return; - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.accept(new TypedVisitor() { @Override public void visit(DeploymentConfigSpecBuilder builder) { diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricher.java index 424f410495..a65a20a8c1 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricher.java @@ -22,7 +22,6 @@ import io.fabric8.openshift.api.model.ProjectSpec; import io.fabric8.openshift.api.model.ProjectStatus; import io.fabric8.openshift.api.model.ProjectStatusBuilder; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -44,7 +43,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { if(item instanceof Namespace) { Project project = convertToProject((Namespace) item); removeItemFromKubernetesBuilder(builder, item); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); builder.addToItems(project); } } diff --git a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricher.java b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricher.java index 47c596ce92..ac47f2ce4e 100644 --- a/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricher.java +++ b/jkube-kit/enricher/generic/src/main/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricher.java @@ -17,7 +17,6 @@ import io.fabric8.openshift.api.model.RouteSpec; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.util.FileUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; @@ -82,7 +81,7 @@ public void create(PlatformMode platformMode, final KubernetesListBuilder listBu } if(platformMode == PlatformMode.openshift && isGenerateRoute()) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); listBuilder.accept(new TypedVisitor() { @Override diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherCreateTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherCreateTest.java index e7f20dacfc..9ff0016012 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherCreateTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherCreateTest.java @@ -21,6 +21,7 @@ import io.fabric8.kubernetes.api.model.batch.v1.Job; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; @@ -30,6 +31,7 @@ import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -43,8 +45,10 @@ public class DefaultControllerEnricherCreateTest { @Before public void setUp() throws Exception { properties = new Properties(); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); buildContext = JKubeEnricherContext.builder() .log(new KitLogger.SilentLogger()) + .summaryService(summaryService) .resources(ResourceConfig.builder().build()) .image(ImageConfiguration.builder().build()) .project(JavaProject.builder() diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherTest.java index 70584beb96..52de2c7420 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultControllerEnricherTest.java @@ -21,6 +21,7 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentSpec; import org.assertj.core.api.InstanceOfAssertFactories; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.JavaProject; @@ -31,6 +32,7 @@ import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -51,9 +53,11 @@ public class DefaultControllerEnricherTest { public void setUp() throws Exception { config = new HashMap<>(); properties = new Properties(); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); context = JKubeEnricherContext.builder() .processorConfig(new ProcessorConfig(null, null, config)) .log(new KitLogger.SilentLogger()) + .summaryService(summaryService) .image(ImageConfiguration.builder() .name("helloworld") .build(BuildConfiguration.builder() diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricherTest.java index 42c839d26d..d32d3c2b97 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultNamespaceEnricherTest.java @@ -17,6 +17,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.EnricherContext; @@ -35,14 +36,17 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; public class DefaultNamespaceEnricherTest { private EnricherContext context; public void setExpectations(Properties properties, ResourceConfig resourceConfig) { + SummaryService summaryService = mock(SummaryService.class); context = JKubeEnricherContext.builder() .log(new KitLogger.SilentLogger()) + .summaryService(summaryService) .resources(resourceConfig) .project(JavaProject.builder() .properties(properties) diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherAddMissingPartsTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherAddMissingPartsTest.java index b82b61875a..fe6965c814 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherAddMissingPartsTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherAddMissingPartsTest.java @@ -13,11 +13,13 @@ */ package org.eclipse.jkube.enricher.generic; +import java.io.File; import java.util.Arrays; import java.util.Properties; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -38,6 +40,7 @@ public class DefaultServiceEnricherAddMissingPartsTest { @Before public void setUp() { properties = new Properties(); + KitLogger logger = new KitLogger.SilentLogger(); final JKubeEnricherContext context = JKubeEnricherContext.builder() .image(ImageConfiguration.builder() .name("test-image") @@ -48,7 +51,8 @@ public void setUp() { .groupId("group-id") .artifactId("artifact-id") .build()) - .log(new KitLogger.SilentLogger()) + .log(logger) + .summaryService(new SummaryService(new File("target"), logger, false)) .build(); enricher = new DefaultServiceEnricher(context); } diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DependencyEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DependencyEnricherTest.java index 699dceed84..589a54bf8a 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DependencyEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DependencyEnricherTest.java @@ -19,6 +19,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.Dependency; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.api.model.KindAndName; @@ -48,6 +49,7 @@ public class DependencyEnricherTest { @Before public void setUp() { + KitLogger logger = new KitLogger.SilentLogger(); context = JKubeEnricherContext.builder() .project(JavaProject.builder() .name("the-project") @@ -57,7 +59,8 @@ public void setUp() { .file(new File(getClass().getResource(ARTIFACT_FILE_PATH).getFile())) .build())) .build()) - .log(new KitLogger.SilentLogger()) + .log(logger) + .summaryService(new SummaryService(new File("target"), logger, false)) .build(); } @Test diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricherTest.java index 82501e7e36..e828dae4bc 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DockerRegistrySecretEnricherTest.java @@ -23,6 +23,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.RegistryServerConfiguration; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.api.util.SecretConstants; @@ -30,6 +31,7 @@ import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -46,9 +48,11 @@ public class DockerRegistrySecretEnricherTest { @Before public void setupExpectations() { + KitLogger kitLogger = new KitLogger.SilentLogger(); context = JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(kitLogger) .project(JavaProject.builder().build()) + .summaryService(new SummaryService(new File("target"), kitLogger, false)) .setting(RegistryServerConfiguration.builder() .configuration(new HashMap<>()) .id("docker.io") diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricherTest.java index 98920b2f02..7324a476ae 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ImagePullPolicyEnricherTest.java @@ -13,7 +13,6 @@ */ package org.eclipse.jkube.enricher.generic; - import io.fabric8.kubernetes.api.model.Container; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; @@ -42,10 +41,12 @@ import org.assertj.core.api.ObjectAssert; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.junit.Test; +import java.io.File; import java.util.List; import java.util.Properties; @@ -323,7 +324,9 @@ private void assertStatefulSetImagePullPolicy(List buildItems, Stri } private JKubeEnricherContext createNewJKubeEnricherContextWithProperties(Properties properties) { + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); return JKubeEnricherContext.builder() + .summaryService(summaryService) .log(new KitLogger.SilentLogger()) .project(JavaProject.builder() .properties(properties) diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/IngressEnricherBehavioralTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/IngressEnricherBehavioralTest.java index 22edd756df..9e59c7e23f 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/IngressEnricherBehavioralTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/IngressEnricherBehavioralTest.java @@ -19,12 +19,14 @@ import io.fabric8.kubernetes.api.model.networking.v1.IngressBuilder; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -36,11 +38,13 @@ public class IngressEnricherBehavioralTest { @Before public void setUp() throws Exception { + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); context = JKubeEnricherContext.builder() .project(JavaProject.builder() .properties(new Properties()) .build()) .resources(ResourceConfig.builder().build()) + .summaryService(summaryService) .log(new KitLogger.SilentLogger()) .build(); klb = new KubernetesListBuilder(); diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricherTest.java index 9b4d755c39..9868399316 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/PodAnnotationEnricherTest.java @@ -28,12 +28,15 @@ import io.fabric8.openshift.api.model.DeploymentConfigBuilder; import io.fabric8.openshift.api.model.DeploymentConfigSpec; import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.EnricherContext; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -46,10 +49,12 @@ public class PodAnnotationEnricherTest { public void setUp() { Properties properties = new Properties(); klb = new KubernetesListBuilder(); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); EnricherContext context = JKubeEnricherContext.builder() .project(JavaProject.builder() .properties(properties) .build()) + .summaryService(summaryService) .build(); podAnnotationEnricher = new PodAnnotationEnricher(context); } diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricherTest.java index e9404dbc2e..7c9ab2402e 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ReplicaCountEnricherTest.java @@ -13,6 +13,7 @@ */ package org.eclipse.jkube.enricher.generic; +import java.io.File; import java.util.Arrays; import java.util.List; import java.util.Properties; @@ -26,6 +27,7 @@ import io.fabric8.openshift.api.model.DeploymentConfigSpec; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.enricher.api.EnricherContext; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.junit.Before; @@ -54,11 +56,13 @@ public class ReplicaCountEnricherTest { public void setUpEnricher() { final Properties properties = new Properties(); properties.setProperty("jkube.replicas", "" + EXPECTED_REPLICAS); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); context = JKubeEnricherContext.builder() .log(new KitLogger.SilentLogger()) .project(JavaProject.builder() .properties(properties) .build()) + .summaryService(summaryService) .build(); enricher = new ReplicaCountEnricher(context); } diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricherTest.java index ad9f787846..c2c63ba176 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/ServiceAccountEnricherTest.java @@ -20,6 +20,8 @@ import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; import org.assertj.core.api.InstanceOfAssertFactories; import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.ServiceAccountConfig; @@ -27,6 +29,7 @@ import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -40,6 +43,7 @@ public void setUp() { .properties(new Properties()) .build()) .resources(ResourceConfig.builder().build()) + .summaryService(new SummaryService(new File("target"), new KitLogger.SilentLogger(), false)) .build(); } diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricherTest.java index 4fe4ab8dd5..1bc5f3c310 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/DeploymentConfigEnricherTest.java @@ -13,11 +13,13 @@ */ package org.eclipse.jkube.enricher.generic.openshift; +import java.io.File; import java.util.Properties; import java.util.function.Consumer; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -38,11 +40,13 @@ public class DeploymentConfigEnricherTest { @Before public void setUp() throws Exception { + KitLogger logger = new KitLogger.SilentLogger(); context = JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(logger) .project(JavaProject.builder() .properties(new Properties()) .build()) + .summaryService(new SummaryService(new File("target"), logger, false)) .build(); deploymentConfigEnricher = new DeploymentConfigEnricher(context); kubernetesListBuilder = new KubernetesListBuilder(); diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricherTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricherTest.java index 3c5395ba78..8830a25a85 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricherTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/ProjectEnricherTest.java @@ -26,6 +26,7 @@ import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; public class ProjectEnricherTest { @@ -34,7 +35,7 @@ public class ProjectEnricherTest { @Before public void setExpectations() { - context = mock(JKubeEnricherContext.class); + context = mock(JKubeEnricherContext.class, RETURNS_DEEP_STUBS); } @Test public void create_whenKubernetesListHasNamespace_thenNamespaceConvertedToProject() { diff --git a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricherBehavioralTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricherBehavioralTest.java index db0b3b31fc..6cc6172200 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricherBehavioralTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/openshift/RouteEnricherBehavioralTest.java @@ -18,12 +18,14 @@ import io.fabric8.kubernetes.api.model.Service; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.junit.Before; import org.junit.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -35,12 +37,14 @@ public class RouteEnricherBehavioralTest { @Before public void setUp() throws Exception { + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); context = JKubeEnricherContext.builder() .project(JavaProject.builder() .properties(new Properties()) .build()) .resources(ResourceConfig.builder().build()) .log(new KitLogger.SilentLogger()) + .summaryService(summaryService) .build(); klb = new KubernetesListBuilder(); } diff --git a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/DockerHealthCheckEnricher.java b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/DockerHealthCheckEnricher.java index 4634451263..004512adca 100644 --- a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/DockerHealthCheckEnricher.java +++ b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/DockerHealthCheckEnricher.java @@ -18,7 +18,6 @@ import io.fabric8.kubernetes.api.model.ExecAction; import io.fabric8.kubernetes.api.model.Probe; import io.fabric8.kubernetes.api.model.ProbeBuilder; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.HealthCheckConfiguration; import org.eclipse.jkube.kit.config.image.build.HealthCheckMode; @@ -60,7 +59,7 @@ private Probe getProbe(ContainerBuilder container) { private Probe getProbe(ImageConfiguration image) { if (hasHealthCheck(image)) { HealthCheckConfiguration health = image.getBuildConfiguration().getHealthCheck(); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); return new ProbeBuilder() .withExec(new ExecAction(health.getCmd().asStrings())) .withTimeoutSeconds(durationSeconds(health.getTimeout()).orElse(null)) diff --git a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/KarafHealthCheckEnricher.java b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/KarafHealthCheckEnricher.java index 9906580f9f..ad0618311d 100644 --- a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/KarafHealthCheckEnricher.java +++ b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/KarafHealthCheckEnricher.java @@ -18,7 +18,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import java.util.List; @@ -92,7 +91,7 @@ private Probe discoverKarafProbe(String path, int initialDelay) { for (String featureValue : features) { if ("jkube-karaf-checks".equals(featureValue)) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); return new ProbeBuilder().withNewHttpGet().withNewPort(DEFAULT_HEALTH_CHECK_PORT).withPath(path).endHttpGet() .withSuccessThreshold(getSuccessThreshold()) .withFailureThreshold(getFailureThreshold()) @@ -103,7 +102,7 @@ private Probe discoverKarafProbe(String path, int initialDelay) { String featureValue = (String) feature; if ("jkube-karaf-checks".equals(featureValue)) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); return new ProbeBuilder().withNewHttpGet().withNewPort(DEFAULT_HEALTH_CHECK_PORT).withPath(path).endHttpGet() .withSuccessThreshold(getSuccessThreshold()) .withFailureThreshold(getFailureThreshold()) diff --git a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/PrometheusEnricher.java b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/PrometheusEnricher.java index 7f99ed35fe..2df712dfda 100644 --- a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/PrometheusEnricher.java +++ b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/PrometheusEnricher.java @@ -19,7 +19,6 @@ import java.util.stream.Collectors; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -68,7 +67,7 @@ public void visit(ServiceBuilder serviceBuilder) { annotations.put(ANNOTATION_PROMETHEUS_PORT, prometheusPort); annotations.put(ANNOTATION_PROMETHEUS_SCRAPE, "true"); annotations.put(ANNOTATION_PROMETHEUS_PATH, getConfig(Config.PROMETHEUS_PATH)); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); log.verbose("Adding prometheus.io annotations: %s", annotations.entrySet() .stream() diff --git a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/ServiceDiscoveryEnricher.java b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/ServiceDiscoveryEnricher.java index 4ef9da5483..394aa35fe4 100644 --- a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/ServiceDiscoveryEnricher.java +++ b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/ServiceDiscoveryEnricher.java @@ -20,7 +20,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.BaseEnricher; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -138,7 +137,7 @@ protected void addAnnotations(ServiceBuilder serviceBuilder) { annotations.put(PREFIX + "/" + ANNOTATION_DESCRIPTION_PATH, resolvedDescriptionPath); } annotations.forEach((key, value) -> log.info("Add %s annotation: \"%s\" : \"%s\"", PREFIX, key, value)); - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); serviceBuilder.editMetadata().addToAnnotations(annotations).and().buildMetadata(); } } diff --git a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/WebAppHealthCheckEnricher.java b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/WebAppHealthCheckEnricher.java index a8334e511c..37c14d7d20 100644 --- a/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/WebAppHealthCheckEnricher.java +++ b/jkube-kit/enricher/specific/src/main/java/org/eclipse/jkube/kit/enricher/specific/WebAppHealthCheckEnricher.java @@ -18,7 +18,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.apache.commons.lang3.StringUtils; @@ -63,7 +62,7 @@ private Probe getProbe(boolean readiness) { return null; } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); Integer port = getPort(); String scheme = getScheme().toUpperCase(); String path = getPath(); diff --git a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/GeneratorManager.java b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/GeneratorManager.java index 8a0ccee537..7c1b59a946 100644 --- a/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/GeneratorManager.java +++ b/jkube-kit/generator/api/src/main/java/org/eclipse/jkube/generator/api/GeneratorManager.java @@ -16,9 +16,9 @@ import java.util.List; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ClassUtil; import org.eclipse.jkube.kit.common.util.PluginServiceFactory; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; /** @@ -37,7 +37,7 @@ private GeneratorManager() { } public static List generate(List imageConfigs, - GeneratorContext genCtx, boolean prePackagePhase) { + GeneratorContext genCtx, boolean prePackagePhase, SummaryService summaryService) { final PluginServiceFactory pluginFactory = new PluginServiceFactory<>(genCtx); if (genCtx.isUseProjectClasspath()) { @@ -54,7 +54,7 @@ public static List generate(List imageCo log.verbose(" - %s", generator.getName()); if (generator.isApplicable(ret)) { log.info("Running generator %s", generator.getName()); - SummaryUtil.addToGenerators(generator.getName()); + summaryService.addToGenerators(generator.getName()); ret = generator.customize(ret, prePackagePhase); } } diff --git a/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/GeneratorManagerTest.java b/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/GeneratorManagerTest.java index 0ba881ef1f..071c2549ff 100644 --- a/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/GeneratorManagerTest.java +++ b/jkube-kit/generator/api/src/test/java/org/eclipse/jkube/generator/api/GeneratorManagerTest.java @@ -13,11 +13,13 @@ */ package org.eclipse.jkube.generator.api; +import java.io.File; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; import org.junit.jupiter.api.BeforeEach; @@ -31,6 +33,7 @@ class GeneratorManagerTest { private KitLogger logger; + private SummaryService summaryService; private GeneratorContext generatorContext; @@ -39,6 +42,7 @@ void setUp() { logger = spy(new KitLogger.SilentLogger()); final ProcessorConfig processorConfig = new ProcessorConfig(); processorConfig.setIncludes(Collections.singletonList("fake-generator")); + summaryService = new SummaryService(new File("target"), logger, false); generatorContext = GeneratorContext.builder() .config(processorConfig) .logger(logger) @@ -51,7 +55,7 @@ void generate_withTestGenerator_shouldProcessImages() { final List images = Collections.singletonList(new ImageConfiguration()); // When final List result = GeneratorManager - .generate(images, generatorContext, false); + .generate(images, generatorContext, false, summaryService); // Then assertThat(result) .isNotSameAs(images) diff --git a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java index a563f3c3b4..bc14b17222 100644 --- a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java @@ -16,7 +16,6 @@ import java.util.Collections; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -86,7 +85,7 @@ private Probe buildProbe(Integer initialDelaySeconds, Integer periodSeconds){ return null; } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); final String firstImagePort = getImages().stream().findFirst() .map(ImageConfiguration::getBuild).map(BuildConfiguration::getPorts) .orElse(Collections.emptyList()).stream() diff --git a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java index b64d09ce78..970ffdc97d 100644 --- a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java @@ -19,6 +19,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.Plugin; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -51,6 +52,7 @@ void setUp() { .outputDirectory(new File("target")) .build(); klb = new KubernetesListBuilder(); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); klb.addToItems(new ServiceBuilder() .withNewMetadata().withName("make-it-real").endMetadata() .build()); @@ -58,6 +60,7 @@ void setUp() { .log(new KitLogger.SilentLogger()) .processorConfig(new ProcessorConfig()) .project(project) + .summaryService(summaryService) .build(); } diff --git a/jkube-kit/jkube-kit-openliberty/src/main/java/org/eclipse/jkube/openliberty/enricher/OpenLibertyHealthCheckEnricher.java b/jkube-kit/jkube-kit-openliberty/src/main/java/org/eclipse/jkube/openliberty/enricher/OpenLibertyHealthCheckEnricher.java index 247f4e0431..e07291d530 100644 --- a/jkube-kit/jkube-kit-openliberty/src/main/java/org/eclipse/jkube/openliberty/enricher/OpenLibertyHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-openliberty/src/main/java/org/eclipse/jkube/openliberty/enricher/OpenLibertyHealthCheckEnricher.java @@ -18,7 +18,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; @@ -83,7 +82,7 @@ protected Probe getStartupProbe() { private Probe discoverOpenLibertyHealthCheck(String path, int initialDelay, int failureThreshold, int successThreshold, int periodSeconds) { if (hasMicroProfileDependency(getContext().getProject()) && isMicroProfileHealthEnabled(getContext().getProject())) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); return new ProbeBuilder() .withNewHttpGet() .withNewPort(asInteger(getConfig(Config.PORT))) diff --git a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java index f92762c9b3..d875c23587 100644 --- a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java @@ -17,7 +17,6 @@ import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.common.JavaProject; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; import org.eclipse.jkube.quarkus.QuarkusUtils; @@ -86,7 +85,7 @@ private Probe discoverQuarkusHealthCheck(int initialDelay, Function configs, Collection configs, String namespace, Collection resources, PlatformMode mode) throws Exception { + public void watch(List configs, String namespace, Collection resources, PlatformMode mode, SummaryService summaryService) { final NamespacedKubernetesClient kubernetes; if (namespace != null) { kubernetes = getContext().getJKubeServiceHub().getClient().adapt(NamespacedKubernetesClient.class).inNamespace(namespace); diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java index 726e3cdeb8..9345c17a94 100644 --- a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java @@ -18,7 +18,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.common.util.ThorntailUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; @@ -69,7 +68,7 @@ private Probe discoverThorntailHealthCheck(int initialDelay) { if (getContext().hasDependency(IO_THORNTAIL, "monitor") || getContext().hasDependency(IO_THORNTAIL, "microprofile-health")) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); Integer port = getPort(); // scheme must be in upper case in k8s String scheme = getScheme().toUpperCase(); diff --git a/jkube-kit/jkube-kit-vertx/src/main/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricher.java b/jkube-kit/jkube-kit-vertx/src/main/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricher.java index 87106e233d..65403ccb5b 100644 --- a/jkube-kit/jkube-kit-vertx/src/main/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-vertx/src/main/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricher.java @@ -20,7 +20,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; @@ -128,7 +127,7 @@ private Probe discoverVertxHealthCheck(boolean readiness) { if (!isApplicable()) { return null; } - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); // We don't allow to set the HOST, because it should rather be configured in the HTTP header (Host header) // cf. https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ String type = getStringValue(Config.TYPE, readiness).orElse("http").toUpperCase(); diff --git a/jkube-kit/jkube-kit-vertx/src/test/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricherTest.java b/jkube-kit/jkube-kit-vertx/src/test/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricherTest.java index e9f3183931..7c2c7d3599 100644 --- a/jkube-kit/jkube-kit-vertx/src/test/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-vertx/src/test/java/org/eclipse/jkube/vertx/enricher/VertxHealthCheckEnricherTest.java @@ -13,6 +13,7 @@ */ package org.eclipse.jkube.vertx.enricher; +import java.io.File; import java.util.AbstractMap; import java.util.Collections; import java.util.HashMap; @@ -27,6 +28,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.Plugin; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -61,12 +63,14 @@ void setUp() { plexusMavenConfig = new TreeMap<>(); jKubePluginConfiguration = new HashMap<>(); properties = new Properties(); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); final ProcessorConfig processorConfig = new ProcessorConfig(); processorConfig.setConfig(Collections.singletonMap("jkube-healthcheck-vertx", plexusMavenConfig)); context = JKubeEnricherContext.builder() .log(new KitLogger.SilentLogger()) .processorConfig(processorConfig) .project(createNewJavaProjectWithVertxPlugin("io.reactiverse", "vertx-maven-plugin")) + .summaryService(summaryService) .build(); } diff --git a/jkube-kit/jkube-kit-wildfly-jar/src/main/java/org/eclipse/jkube/wildfly/jar/enricher/WildflyJARHealthCheckEnricher.java b/jkube-kit/jkube-kit-wildfly-jar/src/main/java/org/eclipse/jkube/wildfly/jar/enricher/WildflyJARHealthCheckEnricher.java index 678706d438..afa45d6e3a 100644 --- a/jkube-kit/jkube-kit-wildfly-jar/src/main/java/org/eclipse/jkube/wildfly/jar/enricher/WildflyJARHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-wildfly-jar/src/main/java/org/eclipse/jkube/wildfly/jar/enricher/WildflyJARHealthCheckEnricher.java @@ -25,7 +25,6 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.Plugin; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; @@ -95,7 +94,7 @@ protected Probe getStartupProbe() { private Probe discoverWildflyJARHealthCheck(Config path, Config initialDelay) { if (isAvailable()) { - SummaryUtil.addToEnrichers(getName()); + getContext().getSummaryService().addToEnrichers(getName()); int port = asInt(getConfig(Config.PORT)); if (port <= 0) { return null; diff --git a/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java b/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java index 2757f7c147..abd3b98fab 100644 --- a/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java +++ b/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java @@ -32,13 +32,12 @@ import org.eclipse.jkube.kit.common.RegistryConfig; import org.eclipse.jkube.kit.common.RegistryServerConfiguration; import org.eclipse.jkube.kit.common.ResourceFileType; -import org.eclipse.jkube.kit.common.summary.Summary; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.FileUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import com.google.common.collect.Streams; @@ -66,10 +65,12 @@ public class HelmService { private final JKubeConfiguration jKubeConfiguration; private final KitLogger logger; + private final SummaryService summaryService; - public HelmService(JKubeConfiguration jKubeConfiguration, KitLogger logger) { + public HelmService(JKubeConfiguration jKubeConfiguration, KitLogger logger, SummaryService summaryService) { this.jKubeConfiguration = jKubeConfiguration; this.logger = logger; + this.summaryService = summaryService; } /** @@ -108,12 +109,12 @@ public void generateHelmCharts(HelmConfig helmConfig) throws IOException { logger.debug("Creating Helm configuration Tarball: '%s'", tarballFile.getAbsolutePath()); final Consumer prependNameAsDirectory = tae -> tae.setName(String.format("%s/%s", helmConfig.getChart(), tae.getName())); - SummaryUtil.setHelmChartName(helmConfig.getChart()); - SummaryUtil.setHelmChartLocation(outputDir); + summaryService.setHelmChartName(helmConfig.getChart()); + summaryService.setHelmChartLocation(outputDir); File helmTarball = JKubeTarArchiver.createTarBall( tarballFile, outputDir, FileUtil.listFilesAndDirsRecursivelyInDirectory(outputDir), Collections.emptyMap(), ArchiveCompression.fromFileName(tarballFile.getName()), null, prependNameAsDirectory); - SummaryUtil.setHelmChartCompressedLocation(helmTarball); + summaryService.setHelmChartCompressedLocation(helmTarball); Optional.ofNullable(helmConfig.getGeneratedChartListeners()).orElse(Collections.emptyList()) .forEach(listener -> listener.chartFileGenerated(helmConfig, helmType, tarballFile)); } @@ -141,7 +142,7 @@ public void uploadHelmChart(HelmConfig helm) throws BadUploadException, IOExcept .orElse(s -> s); setAuthentication(helmRepository, logger, registryServerConfigurations, passwordDecryptor); uploadHelmChart(helm, helmRepository); - SummaryUtil.setHelmRepository(helmRepository.getName()); + summaryService.setHelmRepository(helmRepository.getName()); } else { String error = "No repository or invalid repository configured for upload"; logger.error(error); diff --git a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceIT.java b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceIT.java index 60ab2915e4..4f25f47db0 100644 --- a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceIT.java +++ b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceIT.java @@ -27,6 +27,7 @@ import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.assertj.ArchiveAssertions; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceUtil; import com.fasterxml.jackson.databind.ObjectMapper; @@ -51,7 +52,7 @@ class HelmServiceIT { @BeforeEach void setUp(@TempDir Path temporaryFolder) throws Exception { mapper = new ObjectMapper(new YAMLFactory()); - helmService = new HelmService(new JKubeConfiguration(), new KitLogger.SilentLogger()); + helmService = new HelmService(new JKubeConfiguration(), new KitLogger.SilentLogger(), new SummaryService(temporaryFolder.toFile(), new KitLogger.SilentLogger(), false)); helmOutputDir = Files.createDirectory(temporaryFolder.resolve("helm-output")).toFile(); helmConfig = new HelmConfig(); helmConfig.setSourceDir(new File(HelmServiceIT.class.getResource("/it/sources").toURI()).getAbsolutePath()); diff --git a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java index 0aa99d8119..862c7b1990 100644 --- a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java +++ b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java @@ -25,6 +25,7 @@ import org.eclipse.jkube.kit.common.RegistryConfig; import org.eclipse.jkube.kit.common.RegistryServerConfiguration; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.resource.helm.HelmConfig.HelmType; import org.junit.jupiter.api.AfterEach; @@ -57,7 +58,8 @@ void setUp() { helmConfig = HelmConfig.builder(); jKubeConfiguration = JKubeConfiguration.builder() .registryConfig(RegistryConfig.builder().settings(new ArrayList<>()).build()).build(); - helmService = new HelmService(jKubeConfiguration, new KitLogger.SilentLogger()); + SummaryService summaryService = mock(SummaryService.class); + helmService = new HelmService(jKubeConfiguration, new KitLogger.SilentLogger(), summaryService); } @AfterEach diff --git a/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/DefaultResourceService.java b/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/DefaultResourceService.java index fc81503f28..0b78c6f668 100644 --- a/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/DefaultResourceService.java +++ b/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/DefaultResourceService.java @@ -22,9 +22,9 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; import org.eclipse.jkube.kit.common.util.ResourceClassifier; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.common.util.ValidationUtil; import org.eclipse.jkube.kit.config.resource.EnricherManager; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -63,19 +63,19 @@ public KubernetesList generateResources(PlatformMode platformMode, EnricherManag } @Override - public File writeResources(KubernetesList resources, ResourceClassifier classifier, KitLogger log) throws IOException { + public File writeResources(KubernetesList resources, ResourceClassifier classifier, KitLogger log, SummaryService summaryService) throws IOException { final File targetDir = resourceServiceConfig.getTargetDir(); final ResourceFileType resourceFileType = resourceServiceConfig.getResourceFileType(); // write kubernetes.yml / openshift.yml File resourceFileBase = new File(targetDir, classifier.getValue()); - File file = writeResourcesIndividualAndComposite(resources, resourceFileBase, resourceFileType, log); + File file = writeResourcesIndividualAndComposite(resources, resourceFileBase, resourceFileType, log, summaryService); // Resolve template placeholders if (resourceServiceConfig.isInterpolateTemplateParameters()) { interpolateTemplateVariables(resources, file); } - SummaryUtil.setAggregateResourceFile(file); + summaryService.setAggregateResourceFile(file); return file; } diff --git a/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/WriteUtil.java b/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/WriteUtil.java index f3b68b722f..59c7bd9f5a 100644 --- a/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/WriteUtil.java +++ b/jkube-kit/resource/service/src/main/java/org/eclipse/jkube/kit/resource/service/WriteUtil.java @@ -21,9 +21,9 @@ import org.apache.commons.lang3.StringUtils; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import java.io.File; @@ -41,7 +41,7 @@ class WriteUtil { private WriteUtil(){ } static File writeResourcesIndividualAndComposite( - KubernetesList resources, File resourceFileBase, ResourceFileType resourceFileType, KitLogger log) throws IOException { + KubernetesList resources, File resourceFileBase, ResourceFileType resourceFileType, KitLogger log, SummaryService summaryService) throws IOException { resources.getItems().sort(COMPARATOR); // entity is object which will be sent to writeResource for openshift.yml @@ -62,12 +62,12 @@ static File writeResourcesIndividualAndComposite( // write separate files, one for each resource item // resources passed to writeIndividualResources is also new one. - writeIndividualResources(resources, resourceFileBase, resourceFileType, log); + writeIndividualResources(resources, resourceFileBase, resourceFileType, log, summaryService); return file; } private static void writeIndividualResources( - KubernetesList resources, File targetDir, ResourceFileType resourceFileType, KitLogger log) throws IOException { + KubernetesList resources, File targetDir, ResourceFileType resourceFileType, KitLogger log, SummaryService summaryService) throws IOException { final Map generatedFiles = new HashMap<>(); for (HasMetadata item : resources.getItems()) { String name = KubernetesHelper.getName(item); @@ -83,7 +83,7 @@ private static void writeIndividualResources( // Here we are writing individual file for all the resources. File itemTarget = new File(targetDir, fileName); - SummaryUtil.addGeneratedResourceFile(Optional.ofNullable(resourceFileType) + summaryService.addGeneratedResourceFile(Optional.ofNullable(resourceFileType) .map(r -> r.addExtensionIfMissing(itemTarget)) .orElse(itemTarget)); writeResource(itemTarget, item, resourceFileType); diff --git a/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/DefaultResourceServiceTest.java b/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/DefaultResourceServiceTest.java index 6bb357233d..93f89aba5e 100644 --- a/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/DefaultResourceServiceTest.java +++ b/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/DefaultResourceServiceTest.java @@ -26,6 +26,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceClassifier; import org.eclipse.jkube.kit.config.resource.EnricherManager; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -53,11 +54,13 @@ class DefaultResourceServiceTest { private File targetDir; private ResourceServiceConfig resourceServiceConfig; private DefaultResourceService defaultResourceService; + private SummaryService summaryService; @BeforeEach void init(@TempDir Path temporaryFolder) throws IOException { enricherManager = mock(EnricherManager.class); kitLogger = new KitLogger.SilentLogger(); + summaryService = mock(SummaryService.class); targetDir = Files.createDirectory(temporaryFolder.resolve("target")).toFile(); resourceServiceConfig = ResourceServiceConfig.builder() .interpolateTemplateParameters(true) @@ -114,9 +117,9 @@ void writeResources() throws IOException { MockedStatic templateUtil = mockStatic(TemplateUtil.class) ) { // When - defaultResourceService.writeResources(null, ResourceClassifier.KUBERNETES, kitLogger); + defaultResourceService.writeResources(null, ResourceClassifier.KUBERNETES, kitLogger, summaryService); // Then - writeUtil.verify(() -> WriteUtil.writeResourcesIndividualAndComposite(isNull(), eq(new File(targetDir, "kubernetes")), eq(ResourceFileType.yaml), eq(kitLogger)), times(1)); + writeUtil.verify(() -> WriteUtil.writeResourcesIndividualAndComposite(isNull(), eq(new File(targetDir, "kubernetes")), eq(ResourceFileType.yaml), eq(kitLogger), eq(summaryService)), times(1)); templateUtil.verify(() -> TemplateUtil.interpolateTemplateVariables(isNull(), any()), times(1)); } } diff --git a/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/WriteUtilTest.java b/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/WriteUtilTest.java index ce21b52b31..52d72ffdc7 100644 --- a/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/WriteUtilTest.java +++ b/jkube-kit/resource/service/src/test/java/org/eclipse/jkube/kit/resource/service/WriteUtilTest.java @@ -20,6 +20,7 @@ import io.fabric8.kubernetes.api.model.GenericKubernetesResource; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceUtil; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; @@ -36,6 +37,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.times; @@ -48,18 +50,22 @@ class WriteUtilTest { private KubernetesListBuilder klb; private File resourceFileBase; + private SummaryService summaryService; @BeforeEach void initGlobalVariables() { log = new KitLogger.SilentLogger(); + summaryService = mock(SummaryService.class); resourceUtil = mockStatic(ResourceUtil.class); klb = new KubernetesListBuilder(); resourceFileBase = temporaryFolder; } + @AfterEach public void close() { resourceUtil.close(); } + @Test void writeResource() throws IOException { // Given @@ -88,7 +94,7 @@ void writeResourceThrowsException() throws IOException { @Test void writeResourcesIndividualAndCompositeWithNoResourcesShouldOnlyWriteComposite() throws IOException { // When - WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log); + WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log, summaryService); // Then verifyResourceUtilSave(resourceFileBase); } @@ -102,7 +108,7 @@ void writeResourcesIndividualAndCompositeWithResourcesShouldWriteAll() throws IO new SecretBuilder().withNewMetadata().withName(" ").withClusterName("skipped (blank name)").endMetadata().build() ); // When - WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log); + WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log, summaryService); // Then verifyResourceUtilSave(resourceFileBase); verifyResourceUtilSave(new File(resourceFileBase, "cm-1-configmap")); @@ -120,7 +126,7 @@ void writeResourcesIndividualAndComposite_withResourcesWithSameName_shouldWriteA genericCustomResource("CustomResourceOfKind3") ); // When - WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log); + WriteUtil.writeResourcesIndividualAndComposite(klb.build(), resourceFileBase, null, log, summaryService); // Then verifyResourceUtilSave(resourceFileBase); verifyResourceUtilSave(new File(resourceFileBase, "cm-1-configmap")); diff --git a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/Watcher.java b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/Watcher.java index 869dd3c3ac..1cf5114480 100644 --- a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/Watcher.java +++ b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/Watcher.java @@ -17,6 +17,7 @@ import java.util.List; import org.eclipse.jkube.kit.common.Named; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -41,8 +42,9 @@ public interface Watcher extends Named { * @param namespace namespace in which resources are deployed * @param resources list of resources applied * @param mode {@link PlatformMode} + * @param summaryService {@link SummaryService} * @throws Exception in case of any failure */ - void watch(List configs, String namespace, Collection resources, PlatformMode mode) throws Exception; + void watch(List configs, String namespace, Collection resources, PlatformMode mode, SummaryService summaryService); } diff --git a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherManager.java b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherManager.java index 1456e54dfa..5dda173db2 100644 --- a/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherManager.java +++ b/jkube-kit/watcher/api/src/main/java/org/eclipse/jkube/watcher/api/WatcherManager.java @@ -73,6 +73,6 @@ public static void watch(List ret, String namespace, Collect } log.info("Running watcher %s", chosen.getName()); - chosen.watch(ret, namespace, resources, mode); + chosen.watch(ret, namespace, resources, mode, watcherCtx.getJKubeServiceHub().getSummaryService()); } } diff --git a/jkube-kit/watcher/api/src/test/java/org/eclipse/jkube/watcher/api/WatcherManagerTest.java b/jkube-kit/watcher/api/src/test/java/org/eclipse/jkube/watcher/api/WatcherManagerTest.java index a394a403c1..da35144944 100644 --- a/jkube-kit/watcher/api/src/test/java/org/eclipse/jkube/watcher/api/WatcherManagerTest.java +++ b/jkube-kit/watcher/api/src/test/java/org/eclipse/jkube/watcher/api/WatcherManagerTest.java @@ -18,6 +18,7 @@ import java.util.List; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; @@ -85,7 +86,7 @@ public boolean isApplicable(List configs, Collection configs, String namespace, Collection resources, PlatformMode mode) { + public void watch(List configs, String namespace, Collection resources, PlatformMode mode, SummaryService summaryService) { configs.forEach(ic -> ic.setName("processed-by-test")); } } diff --git a/jkube-kit/watcher/standard/src/main/java/org/eclipse/jkube/watcher/standard/DockerImageWatcher.java b/jkube-kit/watcher/standard/src/main/java/org/eclipse/jkube/watcher/standard/DockerImageWatcher.java index 275806c0af..d6de6d8674 100644 --- a/jkube-kit/watcher/standard/src/main/java/org/eclipse/jkube/watcher/standard/DockerImageWatcher.java +++ b/jkube-kit/watcher/standard/src/main/java/org/eclipse/jkube/watcher/standard/DockerImageWatcher.java @@ -30,6 +30,7 @@ import org.eclipse.jkube.kit.build.service.docker.watch.WatchContext; import org.eclipse.jkube.kit.build.service.docker.watch.WatchException; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; import org.eclipse.jkube.kit.config.access.ClusterAccess; @@ -72,7 +73,7 @@ public boolean isApplicable(List configs, Collection configs, String namespace, final Collection resources, PlatformMode mode) { + public void watch(List configs, String namespace, final Collection resources, PlatformMode mode, SummaryService summaryService) { WatchContext watchContext = getContext().getWatchContext(); @@ -85,7 +86,7 @@ public void watch(List configs, String namespace, final Coll DockerServiceHub hub = getContext().getJKubeServiceHub().getDockerServiceHub(); try { - hub.getWatchService().watch(watchContext, getContext().getBuildContext(), configs); + hub.getWatchService().watch(watchContext, getContext().getBuildContext(), configs, getContext().getJKubeServiceHub().getSummaryService()); } catch (Exception ex) { throw new RuntimeException("Error while watching", ex); } diff --git a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java index 97e8fb6e8a..56920bde27 100644 --- a/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java +++ b/jkube-kit/watcher/standard/src/test/java/org/eclipse/jkube/watcher/standard/DockerImageWatcherTest.java @@ -26,6 +26,7 @@ import org.eclipse.jkube.kit.build.service.docker.watch.ExecTask; import org.eclipse.jkube.kit.build.service.docker.watch.WatchContext; import org.eclipse.jkube.kit.common.JKubeConfiguration; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.watcher.api.WatcherContext; @@ -47,6 +48,8 @@ class DockerImageWatcherTest { private WatcherContext watcherContext; @Mocked private WatchService watchService; + @Mocked + private SummaryService summaryService; private DockerImageWatcher dockerImageWatcher; private WatchContext watchContext; @@ -61,7 +64,7 @@ void setUp() { // @formatter:on new MockUp() { @Mock - void watch(WatchContext context, JKubeConfiguration buildContext, List images) { + void watch(WatchContext context, JKubeConfiguration buildContext, List images, SummaryService summaryService) { watchContext = context; } }; @@ -70,7 +73,7 @@ void watch(WatchContext context, JKubeConfiguration buildContext, List new MojoExecutionException(exp.getMessage())); + handleExceptionAndSummary(jkubeServiceHub, exp); + throw new MojoExecutionException(exp.getMessage()); } catch (MojoExecutionException exp) { logException(exp); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, exp.getMessage(), () -> exp); - } finally { - Optional.ofNullable(jkubeServiceHub).ifPresent(JKubeServiceHub::close); + handleExceptionAndSummary(jkubeServiceHub, exp); + throw exp; } } finally { - String lastExecutingGoal = MavenUtil.getLastExecutingGoal(session, getLogPrefix().trim()); - if (lastExecutingGoal != null && lastExecutingGoal.equals(mojoExecution.getGoal())) { - SummaryUtil.printSummary(javaProject.getBaseDirectory(), summaryEnabled); - SummaryUtil.clear(); - } + printSummaryIfLastExecuting(jkubeServiceHub, mojoExecution.getGoal(), + MavenUtil.getLastExecutingGoal(session, getLogPrefix().trim())); + Optional.ofNullable(jkubeServiceHub).ifPresent(JKubeServiceHub::close); Ansi.setEnabled(ansiRestore); } } @@ -626,7 +625,7 @@ public List customizeConfig(List configs log.info("Building Docker image in [[B]]Kubernetes[[B]] mode"); } try { - return GeneratorManager.generate(configs, generatorContextBuilder().build(), false); + return GeneratorManager.generate(configs, generatorContextBuilder().build(), false, jkubeServiceHub.getSummaryService()); } catch (DependencyResolutionRequiredException de) { throw new IllegalArgumentException("Instructed to use project classpath, but cannot. Continuing build if we can: ", de); } @@ -653,6 +652,7 @@ public EnricherContext getEnricherContext() throws DependencyResolutionRequiredE .images(getResolvedImages()) .resources(resources) .log(log) + .summaryService(jkubeServiceHub.getSummaryService()) .build(); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java index 710b4f0789..82ee88da88 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractJKubeMojo.java @@ -13,6 +13,7 @@ */ package org.eclipse.jkube.maven.plugin.mojo.build; +import io.fabric8.kubernetes.client.KubernetesClientException; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.plugins.annotations.Component; import org.eclipse.jkube.kit.common.JavaProject; @@ -21,7 +22,6 @@ import org.eclipse.jkube.kit.common.util.AnsiLogger; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.common.util.MavenUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -39,6 +39,7 @@ import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; +import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import org.eclipse.jkube.maven.plugin.mojo.KitLoggerProvider; import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; @@ -47,6 +48,9 @@ import java.util.Optional; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.updateResourceConfigNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummaryIfLastExecuting; public abstract class AbstractJKubeMojo extends AbstractMojo implements KitLoggerProvider { @@ -118,13 +122,14 @@ public void execute() throws MojoExecutionException, MojoFailureException { } executeInternal(); } catch (DependencyResolutionRequiredException e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, e.getMessage(), () -> new MojoFailureException(e.getMessage())); + handleExceptionAndSummary(jkubeServiceHub, e); + throw new MojoFailureException(e.getMessage()); + } catch (KubernetesClientException kubernetesClientException) { + IllegalStateException illegalStateException = KubernetesResourceUtil.handleKubernetesClientException(kubernetesClientException, this.log, jkubeServiceHub.getSummaryService()); + printSummary(jkubeServiceHub); + throw illegalStateException; } finally { - String lastExecutingGoal = MavenUtil.getLastExecutingGoal(session, getLogPrefix().trim()); - if (lastExecutingGoal != null && lastExecutingGoal.equals(mojoExecution.getGoal())) { - SummaryUtil.printSummary(javaProject.getBaseDirectory(), summaryEnabled); - SummaryUtil.clear(); - } + printSummaryIfLastExecuting(jkubeServiceHub, mojoExecution.getGoal(), MavenUtil.getLastExecutingGoal(session, getLogPrefix().trim())); } } @@ -134,8 +139,7 @@ protected void init() throws DependencyResolutionRequiredException { javaProject = MavenUtil.convertMavenProjectToJKubeProject(project, session); jkubeServiceHub = initJKubeServiceHubBuilder(javaProject).build(); resources = updateResourceConfigNamespace(namespace, resources); - SummaryUtil.initSummary(javaProject.getBuildDirectory(), log); - SummaryUtil.setSuccessful(true); + jkubeServiceHub.getSummaryService().setSuccessful(true); } protected boolean shouldSkip() { @@ -192,6 +196,7 @@ protected JKubeServiceHub.JKubeServiceHubBuilder initJKubeServiceHubBuilder(Java .build()) .clusterAccess(clusterAccess) .offline(offline) + .summaryEnabled(summaryEnabled) .platformMode(getRuntimeMode()); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java index a204225fe3..b059f9a8a5 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojo.java @@ -22,7 +22,6 @@ import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.service.ApplyService; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import org.eclipse.jkube.maven.plugin.mojo.ManifestProvider; @@ -39,6 +38,8 @@ import org.apache.maven.project.MavenProject; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.resolveFallbackNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummary; /** * Base class for goals which deploy the generated artifacts into the Kubernetes cluster @@ -158,7 +159,7 @@ public File getKubernetesManifest() { public void executeInternal() throws MojoExecutionException { try (KubernetesClient kubernetes = jkubeServiceHub.getClient()) { applyService = jkubeServiceHub.getApplyService(); - initServices(kubernetes); + initServices(); URL masterUrl = kubernetes.getMasterUrl(); final File manifest = getManifest(kubernetes); @@ -188,20 +189,21 @@ public void executeInternal() throws MojoExecutionException { applyEntities(kubernetes, manifest.getName(), entities); log.info("[[B]]HINT:[[B]] Use the command `%s get pods -w` to watch your pods start up", clusterAccess.isOpenShift() ? "oc" : "kubectl"); } catch (KubernetesClientException e) { - KubernetesResourceUtil.handleKubernetesClientException(e, this.log, summaryEnabled); - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); + IllegalStateException illegalStateException = KubernetesResourceUtil.handleKubernetesClientException(e, this.log, jkubeServiceHub.getSummaryService()); + printSummary(jkubeServiceHub); + throw illegalStateException; } catch (Exception e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, e.getMessage(), () -> new MojoExecutionException(e.getMessage(), e)); + handleExceptionAndSummary(jkubeServiceHub, e); + throw new MojoExecutionException(e.getMessage(), e); } } - protected void applyEntities(final KubernetesClient kubernetes, String fileName, final Collection entities) throws InterruptedException { + protected void applyEntities(final KubernetesClient kubernetes, String fileName, final Collection entities) { KitLogger serviceLogger = createLogger("[[G]][SVC][[G]] [[s]]"); applyService.applyEntities(fileName, entities, serviceLogger, serviceUrlWaitTimeSeconds); } - protected void initServices(KubernetesClient kubernetes) { + protected void initServices() { log.debug("No services required in ApplyMojo"); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojo.java index bc3c1edcdb..922cc8462d 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojo.java @@ -17,7 +17,6 @@ import java.io.IOException; import java.util.Collections; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.resource.helm.HelmConfig; import org.apache.maven.plugin.MojoExecutionException; @@ -27,6 +26,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProjectHelper; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.resource.helm.HelmServiceUtil.initHelmConfig; /** @@ -66,7 +66,8 @@ public void executeInternal() throws MojoExecutionException { .build(); jkubeServiceHub.getHelmService().generateHelmCharts(helm); } catch (IOException exception) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, exception.getMessage(), () -> new MojoExecutionException(exception.getMessage())); + handleExceptionAndSummary(jkubeServiceHub, exception); + throw new MojoExecutionException(exception.getMessage()); } } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojo.java index 254725ff71..6893ebcdda 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojo.java @@ -17,9 +17,9 @@ import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.resource.helm.HelmServiceUtil.initHelmPushConfig; @Mojo(name = "helm-push", defaultPhase = LifecyclePhase.INSTALL, requiresDependencyResolution = ResolutionScope.COMPILE) @@ -39,7 +39,8 @@ public void executeInternal() throws MojoExecutionException { jkubeServiceHub.getHelmService().uploadHelmChart(helm); } catch (Exception exp) { getKitLogger().error("Error performing helm push", exp); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, exp.getMessage(), () -> new MojoExecutionException(exp.getMessage(), exp)); + handleExceptionAndSummary(jkubeServiceHub, exp); + throw new MojoExecutionException(exp.getMessage(), exp); } } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/PushMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/PushMojo.java index 93cc97e4e0..9dd28eb026 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/PushMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/PushMojo.java @@ -18,7 +18,8 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; -import org.eclipse.jkube.kit.common.util.SummaryUtil; + +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; /** * Uploads the built Docker images to a Docker registry @@ -59,7 +60,8 @@ public void executeInternal() throws MojoExecutionException { try { jkubeServiceHub.getBuildService().push(getResolvedImages(), retries, getRegistryConfig(pushRegistry), skipTag); } catch (Exception ex) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, ex.getMessage(), () -> new MojoExecutionException(ex.getMessage(), ex)); + handleExceptionAndSummary(jkubeServiceHub, ex); + throw new MojoExecutionException(ex.getMessage(), ex); } } } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java index d819ea469a..0e0675c703 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojo.java @@ -32,7 +32,6 @@ import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.ResourceClassifier; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.common.util.validator.ResourceValidator; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; @@ -64,6 +63,7 @@ import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp; import static org.eclipse.jkube.kit.common.util.DekorateUtil.DEFAULT_RESOURCE_LOCATION; import static org.eclipse.jkube.kit.common.util.DekorateUtil.useDekorate; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil.updateKindFilenameMappings; import static org.eclipse.jkube.maven.plugin.mojo.build.BuildMojo.CONTEXT_KEY_BUILD_TIMESTAMP; @@ -215,12 +215,13 @@ public void executeInternal() throws MojoExecutionException, MojoFailureExceptio final KubernetesList resourceList = generateResources(); final File resourceClassifierDir = new File(this.targetDir, resourceClassifier.getValue()); validateIfRequired(resourceClassifierDir, resourceClassifier); - final File artifact = jkubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, log); + final File artifact = jkubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, log, jkubeServiceHub.getSummaryService()); // Attach it to the Maven reactor so that it will also get deployed projectHelper.attachArtifact(project, this.resourceFileType.getArtifactType(), resourceClassifier.getValue(), artifact); } } catch (IOException e) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, e.getMessage(), () -> new MojoExecutionException("Failed to generate kubernetes descriptor", e)); + handleExceptionAndSummary(jkubeServiceHub, e); + throw new MojoExecutionException("Failed to generate kubernetes descriptor", e); } } @@ -303,6 +304,7 @@ private KubernetesList generateResources() .settings(MavenUtil.getRegistryServerFromMavenSettings(settings)) .resources(resources) .images(resolvedImages) + .summaryService(jkubeServiceHub.getSummaryService()) .log(log); DefaultEnricherManager enricherManager = new DefaultEnricherManager(ctxBuilder.build(), @@ -340,7 +342,7 @@ private List getResolvedImages(List imag .strategy(JKubeBuildStrategy.docker) .useProjectClasspath(useProjectClasspath) .build(); - return GeneratorManager.generate(configs, ctx, true); + return GeneratorManager.generate(configs, ctx, true, jkubeServiceHub.getSummaryService()); } catch (Exception e) { throw new IllegalArgumentException("Cannot extract generator: " + e, e); } diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojo.java index eb39dd5bbb..2bf3e29a16 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojo.java @@ -19,7 +19,6 @@ import java.util.List; import org.eclipse.jkube.kit.common.util.ResourceUtil; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.maven.plugin.mojo.ManifestProvider; import org.eclipse.jkube.maven.plugin.mojo.build.AbstractJKubeMojo; @@ -29,6 +28,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; import static org.eclipse.jkube.maven.plugin.mojo.build.ApplyMojo.DEFAULT_KUBERNETES_MANIFEST; /** @@ -71,7 +71,8 @@ public final void executeInternal() throws MojoExecutionException { try { undeploy(); } catch (IOException ex) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, ex.getMessage(), () -> new MojoExecutionException(ex.getMessage(), ex)); + handleExceptionAndSummary(jkubeServiceHub, ex); + throw new MojoExecutionException(ex.getMessage(), ex); } } 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 dcc9b49c2d..0bc9c07a1a 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 @@ -28,7 +28,6 @@ import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.common.JKubeConfiguration; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; import org.eclipse.jkube.kit.profile.ProfileUtil; @@ -52,6 +51,8 @@ import static org.eclipse.jkube.kit.common.util.BuildReferenceDateUtil.getBuildTimestamp; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.applicableNamespace; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.handleExceptionAndSummary; +import static org.eclipse.jkube.kit.config.service.kubernetes.SummaryServiceUtil.printSummary; import static org.eclipse.jkube.maven.plugin.mojo.build.ApplyMojo.DEFAULT_KUBERNETES_MANIFEST; @@ -113,11 +114,12 @@ public void executeInternal() throws MojoExecutionException { context); } catch (KubernetesClientException ex) { - KubernetesResourceUtil.handleKubernetesClientException(ex, this.log, summaryEnabled); + IllegalStateException exception = KubernetesResourceUtil.handleKubernetesClientException(ex, this.log, jkubeServiceHub.getSummaryService()); + printSummary(jkubeServiceHub); + throw exception; } catch (Exception ex) { - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, - ex.getMessage(), - () -> new MojoExecutionException("An error has occurred while while trying to watch the resources", ex)); + handleExceptionAndSummary(jkubeServiceHub, ex); + throw new MojoExecutionException("An error has occurred while while trying to watch the resources", ex); } } diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoFailureScenariosTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoFailureScenariosTest.java new file mode 100644 index 0000000000..0cdc461dd1 --- /dev/null +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoFailureScenariosTest.java @@ -0,0 +1,109 @@ +/** + * 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.maven.plugin.mojo.build; + +import io.fabric8.kubernetes.client.KubernetesClientException; +import io.fabric8.openshift.client.NamespacedOpenShiftClient; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.settings.Settings; +import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.util.KubernetesHelper; +import org.eclipse.jkube.kit.config.service.ApplyService; +import org.eclipse.jkube.kit.config.service.JKubeServiceHub; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.MockedStatic; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; + +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyCollection; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; + +class ApplyMojoFailureScenariosTest { + + private JKubeServiceHub mockedJKubeServiceHub; + private MockedStatic kubernetesHelperMockedStatic; + private File kubernetesManifestFile; + private ApplyService mockedApplyService; + + private ApplyMojo applyMojo; + + @BeforeEach + void setUp(@TempDir Path temporaryFolder) throws IOException { + mockedApplyService = mock(ApplyService.class); + kubernetesHelperMockedStatic = mockStatic(KubernetesHelper.class); + kubernetesHelperMockedStatic.when(KubernetesHelper::getDefaultNamespace).thenReturn("default"); + kubernetesManifestFile = Files.createFile(temporaryFolder.resolve("kubernetes.yml")).toFile(); + NamespacedOpenShiftClient defaultKubernetesClient = mock(NamespacedOpenShiftClient.class); + when(defaultKubernetesClient.adapt(any())).thenReturn(defaultKubernetesClient); + when(defaultKubernetesClient.getMasterUrl()).thenReturn(URI.create("https://www.example.com").toURL()); + mockedJKubeServiceHub = mock(JKubeServiceHub.class, RETURNS_DEEP_STUBS); + when(mockedJKubeServiceHub.getApplyService()).thenReturn(mockedApplyService); + when(mockedJKubeServiceHub.getClient()).thenReturn(defaultKubernetesClient); + // @formatter:off + applyMojo = new ApplyMojo() {{ + jkubeServiceHub = mockedJKubeServiceHub; + settings = mock(Settings.class); + kubernetesManifest = kubernetesManifestFile; + log = new KitLogger.SilentLogger(); + }}; + // @formatter:on + } + + @AfterEach + void tearDown() { + kubernetesHelperMockedStatic.close(); + applyMojo = null; + } + + @Test + void executeInternal_whenApplyServiceFailsToApplyManifests_thenThrowException() { + // Given + doThrow(new KubernetesClientException("kubernetes failure")) + .when(mockedApplyService).applyEntities(anyString(), anyCollection(), any(), anyLong()); + + // When + Then + assertThatIllegalStateException() + .isThrownBy(() -> applyMojo.executeInternal()) + .withMessage("kubernetes failure"); + } + + @Test + void executeInternal_whenManifestLoadFailure_thenThrowException() { + // Given + kubernetesHelperMockedStatic.when(() -> KubernetesHelper.loadResources(any())) + .thenThrow(new IOException("failure in loading manifests")); + + // When + Then + assertThatExceptionOfType(MojoExecutionException.class) + .isThrownBy(() -> applyMojo.executeInternal()) + .withMessage("failure in loading manifests"); + } + +} diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java index 68ed7218ac..bc6f682995 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ApplyMojoTest.java @@ -25,6 +25,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecution; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.ApplyService; @@ -63,11 +64,12 @@ class ApplyMojoTest { @BeforeEach void setUp(@TempDir Path temporaryFolder) throws IOException { + SummaryService summaryService = mock(SummaryService.class); jKubeServiceHubMockedConstruction = mockConstruction(JKubeServiceHub.class, withSettings().defaultAnswer(RETURNS_DEEP_STUBS), (mock, context) -> { when(mock.getClient()).thenReturn(defaultKubernetesClient); when(mock.getClusterAccess().createDefaultClient()).thenReturn(defaultKubernetesClient); - when(mock.getApplyService()).thenReturn(new ApplyService(defaultKubernetesClient, new KitLogger.SilentLogger())); + when(mock.getApplyService()).thenReturn(new ApplyService(defaultKubernetesClient, new KitLogger.SilentLogger(), summaryService)); }); clusterAccessMockedConstruction = mockConstruction(ClusterAccess.class, (mock, context) -> when(mock.getNamespace()).thenAnswer(invocation -> kubeConfigNamespace)); diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/BuildMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/BuildMojoTest.java index 8fcc9ee9ab..d641c54f43 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/BuildMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/BuildMojoTest.java @@ -13,37 +13,167 @@ */ package org.eclipse.jkube.maven.plugin.mojo.build; -import mockit.Expectations; -import mockit.Mocked; +import org.apache.maven.artifact.DependencyResolutionRequiredException; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.eclipse.jkube.kit.build.service.docker.DockerAccessFactory; +import org.eclipse.jkube.kit.build.service.docker.access.DockerAccess; +import org.eclipse.jkube.kit.build.service.docker.config.handler.ImageConfigResolver; +import org.eclipse.jkube.kit.common.JKubeConfiguration; +import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.service.SummaryService; +import org.eclipse.jkube.kit.common.util.MavenUtil; +import org.eclipse.jkube.kit.config.image.ImageConfiguration; +import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.resource.OpenshiftBuildConfig; import org.eclipse.jkube.kit.config.resource.ResourceConfig; +import org.eclipse.jkube.kit.config.service.BuildService; import org.eclipse.jkube.kit.config.service.BuildServiceConfig; +import org.eclipse.jkube.kit.config.service.JKubeServiceException; +import org.eclipse.jkube.kit.config.service.JKubeServiceHub; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockConstruction; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; class BuildMojoTest { - @Mocked - private MavenProject mavenProject; + private DockerAccessFactory mockedDockerAccessFactory; + private MavenProject mockedMavenProject; + private Settings mockedMavenSettings; + private BuildMojo buildMojo; + private BuildService mockedBuildService; + private List imageConfigurationList; + private MockedStatic mavenUtilMockedStatic; + private MockedConstruction jKubeServiceHubMockedConstruction; + @TempDir + private File temporaryFolder; @BeforeEach void setUp() { - // @formatter:off - new Expectations(){{ - mavenProject.getBuild().getDirectory(); result = "target"; + imageConfigurationList = Collections.singletonList(ImageConfiguration.builder() + .name("test/foo:latest") + .build(BuildConfiguration.builder() + .from("test/base:latest") + .build()) + .build()); + mockedDockerAccessFactory = mock(DockerAccessFactory.class); + ImageConfigResolver mockedImageConfigResolver = mock(ImageConfigResolver.class); + MojoExecution mockedMojoExecution = mock(MojoExecution.class); + MavenSession mockedMavenSession = mock(MavenSession.class); + JavaProject mockedJavaProject = mock(JavaProject.class); + JKubeConfiguration mockedJKubeConfiguration = mock(JKubeConfiguration.class); + SummaryService mockedSummaryService = mock(SummaryService.class); + mockedMavenProject = mock(MavenProject.class, RETURNS_DEEP_STUBS); + mockedMavenSettings = mock(Settings.class, RETURNS_DEEP_STUBS); + mockedBuildService = mock(BuildService.class); + mavenUtilMockedStatic = mockStatic(MavenUtil.class); + jKubeServiceHubMockedConstruction = mockConstruction(JKubeServiceHub.class, (mock, ctx) -> { + when(mock.getBuildService()).thenReturn(mockedBuildService); + when(mock.getConfiguration()).thenReturn(mockedJKubeConfiguration); + when(mock.getSummaryService()).thenReturn(mockedSummaryService); + }); + mavenUtilMockedStatic.when(() -> MavenUtil.convertMavenProjectToJKubeProject(any(), any())) + .thenReturn(mockedJavaProject); + when(mockedDockerAccessFactory.createDockerAccess(any())).thenReturn(mock(DockerAccess.class)); + when(mockedMavenProject.getPackaging()).thenReturn("jar"); + when(mockedMavenProject.getBuild().getDirectory()).thenReturn(temporaryFolder.getAbsolutePath()); + when(mockedJKubeConfiguration.getProject()).thenReturn(mockedJavaProject); + when(mockedJavaProject.getProperties()).thenReturn(new Properties()); + buildMojo = new BuildMojo() {{ + dockerAccessFactory = mockedDockerAccessFactory; + imageConfigResolver = mockedImageConfigResolver; + project = mockedMavenProject; + settings = mockedMavenSettings; + session = mockedMavenSession; + mojoExecution = mockedMojoExecution; }}; - // @formatter:on + } + + @AfterEach + void tearDown() { + mavenUtilMockedStatic.close(); + jKubeServiceHubMockedConstruction.close(); + } + + @Test + void execute_withImageConfiguration_shouldDelegateToBuildService() throws Exception { + // Given + buildMojo.resolvedImages = imageConfigurationList; + + // When + buildMojo.execute(); + + // Then + assertThat(jKubeServiceHubMockedConstruction.constructed()).isNotEmpty(); + verify(mockedBuildService).build(any()); + verify(mockedBuildService).postProcess(); + } + + @Test + void execute_withPomPackagingAndSkipBuildPom_shouldDoNothing() throws Exception { + // Given + buildMojo.resolvedImages = imageConfigurationList; + buildMojo.skipBuildPom = true; + when(mockedMavenProject.getPackaging()).thenReturn("pom"); + + // When + buildMojo.execute(); + + // Then + verify(mockedBuildService, times(0)).build(any()); + } + + @Test + void execute_whenBuildServiceFails_thenThrowException() throws Exception { + // Given + doThrow(new JKubeServiceException("failure in build")) + .when(mockedBuildService).build(any()); + + // When + Then + assertThatExceptionOfType(MojoExecutionException.class) + .isThrownBy(() -> buildMojo.execute()) + .withMessage("Failed to execute the build"); + } + + @Test + void execute_whenFailureInInitializingProject_thenThrowException() { + // Given + DependencyResolutionRequiredException dependencyResolutionRequiredException = mock(DependencyResolutionRequiredException.class); + when(dependencyResolutionRequiredException.getMessage()).thenReturn("Attempted to access the artifact foo; which has not yet been resolved"); + mavenUtilMockedStatic.when(() -> MavenUtil.convertMavenProjectToJKubeProject(any(), any())) + .thenThrow(dependencyResolutionRequiredException); + + // When + Then + assertThatExceptionOfType(MojoExecutionException.class) + .isThrownBy(() -> buildMojo.execute()) + .withMessage("Attempted to access the artifact foo; which has not yet been resolved"); } @Test void buildServiceConfigBuilder_shouldReturnNonNullResourceConfigIfConfigured() { // Given - BuildMojo buildMojo = new BuildMojo(); - buildMojo.project = mavenProject; buildMojo.resources = ResourceConfig.builder() .openshiftBuildConfig(OpenshiftBuildConfig.builder() .limit("cpu", "200m") diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojoTest.java index 48bc0cb0f7..f63a6af4e4 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmMojoTest.java @@ -22,7 +22,9 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.settings.Settings; +import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.Maintainer; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.eclipse.jkube.kit.resource.helm.HelmConfig; @@ -74,6 +76,7 @@ void setUp() throws Exception { // @formatter:off new Expectations() {{ jKubeServiceHub.getHelmService(); result = helmService; + jKubeServiceHub.getSummaryService(); result = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); mavenProject.getProperties(); result = new Properties(); mavenProject.getBuild().getOutputDirectory(); result = "target/classes"; mavenProject.getBuild().getDirectory(); result = "target"; diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojoTest.java index 180edf46fd..ab0bb75759 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/ResourceMojoTest.java @@ -48,7 +48,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; @@ -140,7 +139,7 @@ void executeInternal_whenInvoked_shouldDelegateResourceGenerationToResourceServi .isEqualTo("jkube/test-project"); verify(mockedJKubeServiceHub, times(2)).getResourceService(); verify(mockedResourceService, times(1)).generateResources(eq(PlatformMode.kubernetes), any(), any()); - verify(mockedResourceService, times(1)).writeResources(any(), eq(ResourceClassifier.KUBERNETES), any()); + verify(mockedResourceService, times(1)).writeResources(any(), eq(ResourceClassifier.KUBERNETES), any(), any()); } @Test @@ -155,7 +154,7 @@ void executeInternal_whenSkipTrue_shouldDoNothing() throws MojoExecutionExceptio assertThat(defaultEnricherManagerMockedConstruction.constructed()).isEmpty(); verify(mockedJKubeServiceHub, times(0)).getResourceService(); verify(mockedResourceService, times(0)).generateResources(any(), any(), any()); - verify(mockedResourceService, times(0)).writeResources(any(), any(), any()); + verify(mockedResourceService, times(0)).writeResources(any(), any(), any(), any()); } @Test @@ -170,6 +169,6 @@ void executeInternal_whenSkipResourceTrue_shouldDoNothing() throws MojoExecution assertThat(defaultEnricherManagerMockedConstruction.constructed()).isEmpty(); verify(mockedJKubeServiceHub, times(0)).getResourceService(); verify(mockedResourceService, times(0)).generateResources(any(), any(), any()); - verify(mockedResourceService, times(0)).writeResources(any(), any(), any()); + verify(mockedResourceService, times(0)).writeResources(any(), any(), any(), any()); } } diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojoTest.java index ce46242bd7..6c4e15b65e 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/UndeployMojoTest.java @@ -21,6 +21,7 @@ import java.util.Properties; import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.MojoExecutionException; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -36,11 +37,12 @@ import org.junit.jupiter.api.io.TempDir; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @SuppressWarnings("unused") class UndeployMojoTest { @Mocked - private JKubeServiceHub jKubeServiceHub; + private JKubeServiceHub mockedJKubeServiceHub; @Mocked private MavenUtil mavenUtil; @Mocked @@ -65,6 +67,7 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { settings = mavenSettings; log = new KitLogger.SilentLogger(); mojoExecution = mockedMojoExecution; + jkubeServiceHub = mockedJKubeServiceHub; }}; new Expectations() {{ mavenProject.getProperties(); result = new Properties(); @@ -112,10 +115,26 @@ void execute_withCustomProperties() throws Exception { .hasFieldOrPropertyWithValue("namespace", "custom-namespace"); } + @Test + void execute_whenUndeployServiceFails_thenExceptionThrown() throws Exception { + // Given + // @formatter:off + new Expectations() {{ + mockedJKubeServiceHub.getUndeployService().undeploy(Collections.singletonList(mockResourceDir), withNotNull(), mockManifest); + result = new IOException("failure"); + }}; + // @formatter:on + + // When + assertThatExceptionOfType(MojoExecutionException.class) + .isThrownBy(() -> undeployMojo.execute()) + .withMessage("failure"); + } + private void assertUndeployServiceUndeployWasCalled() throws Exception { // @formatter:off new Verifications() {{ - jKubeServiceHub.getUndeployService().undeploy(Collections.singletonList(mockResourceDir), withNotNull(), mockManifest); + mockedJKubeServiceHub.getUndeployService().undeploy(Collections.singletonList(mockResourceDir), withNotNull(), mockManifest); times = 1; }}; // @formatter:on @@ -124,7 +143,7 @@ private void assertUndeployServiceUndeployWasCalled() throws Exception { private void assertUndeployServiceUndeployWasNotCalled() { // @formatter:off new Verifications() {{ - jKubeServiceHub.getUndeployService(); + mockedJKubeServiceHub.getUndeployService(); times = 0; }}; // @formatter:on diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java index 90d64b9ac1..4aa703b370 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/WatchMojoTest.java @@ -22,6 +22,7 @@ import org.eclipse.jkube.kit.build.service.docker.config.handler.ImageConfigResolver; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.ApplyService; @@ -72,8 +73,9 @@ void setUp(@TempDir File temporaryFolder) throws IOException { mockedJavaProject = mock(JavaProject.class); mockedClusterAccess = mock(ClusterAccess.class); watcherManagerMockedStatic = mockStatic(WatcherManager.class); + SummaryService mockedSummaryService = mock(SummaryService.class); - when(mockedJKubeServiceHub.getApplyService()).thenReturn(new ApplyService(mockKubernetesClient, new KitLogger.SilentLogger())); + when(mockedJKubeServiceHub.getApplyService()).thenReturn(new ApplyService(mockKubernetesClient, new KitLogger.SilentLogger(), mockedSummaryService)); when(mockedJavaProject.getProperties()).thenReturn(new Properties()); when(mavenProject.getArtifactId()).thenReturn("artifact-id"); when(mavenProject.getVersion()).thenReturn("1337");