From 6a5284e88a6984c64f4b989f3d0586e1ca9462a8 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 | 26 ++- .../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 | 159 +++++++++---- .../plugin/task/KubernetesPushTaskTest.java | 85 ++++--- .../task/KubernetesUndeployTaskTest.java | 82 ++++--- .../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} | 217 ++++++++++-------- .../jkube/kit/common/summary/Summary.java | 2 + .../kit/common/JKubeConfigurationTest.java | 11 + .../SummaryServiceTest.java} | 113 +++++---- .../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 | 6 +- .../kit/config/service/DebugServiceTest.java | 5 +- .../JKubeServiceHubBuildServiceTest.java | 8 +- .../kubernetes/DockerBuildServiceTest.java | 12 +- .../kubernetes/JibBuildServiceTest.java | 8 +- .../KubernetesUndeployServiceTest.java | 7 +- .../kubernetes/SummaryServiceUtilTest.java | 107 +++++++++ .../openshift/OpenShiftBuildServiceTest.java | 2 +- .../OpenShiftBuildServiceUtilsTest.java | 4 +- .../OpenshiftUndeployServiceTest.java | 7 +- .../service/plugins/PluginManagerTest.java | 2 +- .../service/plugins/PluginServiceTest.java | 2 +- .../doc/src/main/asciidoc/inc/_summary.adoc | 2 +- .../kit/enricher/api/EnricherContext.java | 2 + .../enricher/api/JKubeEnricherContext.java | 6 +- .../api/util/KubernetesResourceUtil.java | 10 +- .../api/util/KubernetesResourceUtilTest.java | 24 +- .../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 | 3 +- .../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 +- ...ultServiceEnricherExternalServiceTest.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 | 43 ---- .../enricher/QuarkusHealthCheckEnricher.java | 3 +- .../QuarkusHealthCheckEnricherTest.java | 3 + .../SpringBootHealthCheckEnricher.java | 3 +- .../springboot/watcher/SpringBootWatcher.java | 3 +- ...ingBootHealthCheckEnricherTestSupport.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 | 15 +- .../plugin/mojo/build/AbstractDockerMojo.java | 28 +-- .../plugin/mojo/build/AbstractJKubeMojo.java | 25 +- .../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 | 144 +++++++++++- .../maven/plugin/mojo/build/HelmMojoTest.java | 17 +- .../plugin/mojo/build/HelmPushMojoTest.java | 10 +- .../plugin/mojo/build/ResourceMojoTest.java | 9 +- .../mojo/develop/RemoteDevMojoTest.java | 9 + .../plugin/mojo/develop/UndeployMojoTest.java | 55 +++-- .../plugin/mojo/develop/WatchMojoTest.java | 4 +- 153 files changed, 1521 insertions(+), 757 deletions(-) rename jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/{util/SummaryUtil.java => service/SummaryService.java} (60%) rename jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/{SummaryUtilTest.java => service/SummaryServiceTest.java} (55%) 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..ff75eb6617 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,9 @@ 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); + jKubeServiceHub.getSummaryService().setActionType("Tasks"); + jKubeServiceHub.getSummaryService().addToActions(getName()); try { resolvedImages = resolveImages(imageConfigResolver); final JKubeEnricherContext context = JKubeEnricherContext.builder() @@ -103,6 +103,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 +124,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 +154,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 33dfef5ad7..ee5212ba7d 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 @@ -18,6 +18,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -32,6 +33,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; @@ -42,6 +44,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.jupiter.api.BeforeEach; @@ -320,6 +323,35 @@ void canBeResolved_DeprecatedAndNullResolutionAlternativesAndResolvable_shouldRe assertThat(result).isTrue(); } + @Test + void getLastExecutingTask_whenTasksReturnedEmpty_shouldReturnNull() { + // Given + When + String task = GradleUtil.getLastExecutingTask(project, Collections.emptyMap()); + + // Then + assertThat(task).isNull(); + } + + @Test + 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 77c6cb55e1..e3ee36aa35 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,14 +32,19 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException; 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; @@ -48,7 +55,6 @@ class KubernetesApplyTaskTest { private final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); private MockedConstruction clusterAccessMockedConstruction; - private MockedConstruction applyServiceMockedConstruction; private TestKubernetesExtension extension; @BeforeEach @@ -60,7 +66,6 @@ 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; @@ -68,7 +73,6 @@ void setUp() throws IOException { @AfterEach void tearDown() { - applyServiceMockedConstruction.close(); clusterAccessMockedConstruction.close(); } @@ -97,58 +101,121 @@ void runTask_withNoManifest_shouldThrowException() { @Test 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 + void configureApplySerVvice_withManifest_shouldSetDefaults() throws Exception { + 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 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 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 + 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 + 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 c2f4c9de98..5d2bbb7cf7 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 @@ -33,12 +33,14 @@ import org.junit.jupiter.api.extension.RegisterExtension; 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; @@ -51,7 +53,6 @@ class KubernetesPushTaskTest { private final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); private MockedConstruction dockerAccessFactoryMockedConstruction; - private MockedConstruction dockerBuildServiceMockedConstruction; private KubernetesExtension extension; @BeforeEach @@ -59,8 +60,6 @@ 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() @@ -73,45 +72,67 @@ void setUp() throws IOException { @AfterEach void tearDown() { - dockerBuildServiceMockedConstruction.close(); dockerAccessFactoryMockedConstruction.close(); } @Test 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 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 - 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 + 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 + 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 d184f5d19f..6187477055 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 @@ -35,6 +35,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; +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 @@ class KubernetesUndeployTaskTest { @RegisterExtension private final TaskEnvironmentExtension taskEnvironment = new TaskEnvironmentExtension(); - private MockedConstruction kubernetesUndeployServiceMockedConstruction; private MockedConstruction clusterAccessMockedConstruction; private TestKubernetesExtension extension; @@ -57,14 +59,12 @@ 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); } @AfterEach void tearDown() { - kubernetesUndeployServiceMockedConstruction.close(); clusterAccessMockedConstruction.close(); } @@ -83,38 +83,58 @@ void runTask_withOffline_shouldThrowException() { @Test 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 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 + 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 ba43f57ac4..4faecfb26a 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 482885e452..4f86fcde6c 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.common.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 d4efa21942..c761a054b5 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.common.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 60% 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..95b14eafc5 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,86 @@ 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 addToActions(String action) { + addToSummary(s -> { + s.setActionsRun(createOrAddToExistingList(s.getActionsRun(), action)); + return s; + }); + } + + public void setActionType(String actionType) { + addToSummary(s -> { + s.setActionType(actionType); + return s; + }); + } + + 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 +124,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 +134,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 +144,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 +154,104 @@ 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); + printActions(summaryInstance); logger.info(DASHED_LINE); if (summaryInstance.isSuccessful()) { logger.info("SUCCESS"); @@ -250,17 +262,25 @@ public static void printSummary(File baseDirectory, boolean summaryEnabled) { } } - private static void printCommonSummary(Summary summaryInstance, File baseDirectory, KitLogger logger) { + private void printActions(Summary summaryInstance) { + if (StringUtils.isNotBlank(summaryInstance.getActionType()) && + summaryInstance.getActionsRun() != null && + !summaryInstance.getActionsRun().isEmpty()) { + logger.info("%s executed : [ %s ]", summaryInstance.getActionType(), String.join(", ", summaryInstance.getActionsRun())); + } + } + + 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 +296,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 +305,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,17 +318,17 @@ 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())); + logger.info("Enrichers applied: [%s]", String.join(", ", summary.getEnrichersApplied())); } logger.info("Generated resources:"); List generatedFilesResourcePaths = summary.getGeneratedResourceFiles().stream() .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,43 +336,49 @@ 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); + String appliedResources = createKubernetesResourceSummary(summary.getAppliedKubernetesResources()); + logger.info("Applied resources to %s: %s", summary.getAppliedClusterUrl(), appliedResources); 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); + String deletedResources = createKubernetesResourceSummary(summary.getDeletedKubernetesResources()); + logger.info("Undeployed resources to %s: %s", summary.getUndeployedClusterUrl(), deletedResources); logger.info(""); } } - private static void printKubernetesResourceSummary(List kubernetesResourceSummaries, KitLogger logger) { + private String createKubernetesResourceSummary(List kubernetesResourceSummaries) { + StringBuilder sb = new StringBuilder(); if (kubernetesResourceSummaries != null && !kubernetesResourceSummaries.isEmpty()) { - for (KubernetesResourceSummary kubernetesResourceSummary : kubernetesResourceSummaries) { - logger.info(LIST_ELEMENT, kubernetesResourceSummary.getResourceName()); - if (kubernetesResourceSummary.getGroup().equals(kubernetesResourceSummary.getVersion())) { - logger.info(" * %s %s", kubernetesResourceSummary.getGroup(), kubernetesResourceSummary.getKind()); - } else { - logger.info(" * %s/%s %s", kubernetesResourceSummary.getGroup(), kubernetesResourceSummary.getVersion(), kubernetesResourceSummary.getKind()); + sb.append("["); + for (int i = 0; i < kubernetesResourceSummaries.size(); i++) { + KubernetesResourceSummary kubernetesResourceSummary = kubernetesResourceSummaries.get(i); + sb.append(kubernetesResourceSummary.getKind()) + .append("/") + .append(kubernetesResourceSummary.getResourceName()); + + if (i < kubernetesResourceSummaries.size() - 1) { + sb.append(", "); } - logger.info(" * Namespace: %s", kubernetesResourceSummary.getNamespace()); } + + sb.append("]"); } + return sb.toString(); } - private static void printPushSummary(Summary summary, KitLogger logger) { + private void printPushSummary(Summary summary) { if (StringUtils.isNotBlank(summary.getPushRegistry())) { logger.info("Registry: %s", summary.getPushRegistry()); } } - private static void printHelmSummary(Summary summary, File baseDir, KitLogger logger) { + private void printHelmSummary(Summary summary, File baseDir) { if (StringUtils.isNotBlank(summary.getHelmChartName())) { logger.info("Chart : %s", summary.getHelmChartName()); } @@ -364,20 +390,24 @@ private static void printHelmSummary(Summary summary, File baseDir, KitLogger lo } } - private static void printHelmPushSummary(Summary summary, KitLogger logger) { + private void printHelmPushSummary(Summary summary) { if (StringUtils.isNotBlank(summary.getHelmRepository())) { logger.info("Repository : %s", summary.getHelmRepository()); } } - private static void logList(KitLogger logger, 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 +417,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 +426,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 +436,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/main/java/org/eclipse/jkube/kit/common/summary/Summary.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/summary/Summary.java index aa9c0582d5..cc7a0cbf36 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/summary/Summary.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/summary/Summary.java @@ -26,6 +26,8 @@ public class Summary { private Map imageSummariesMap; private String buildStrategy; private List generatorsApplied; + private String actionType; + private List actionsRun; private String openShiftBuildConfigName; private boolean successful; private String failureCause; 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 55% 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..d9eda1a992 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,104 @@ 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.setActionType("Goals"); + summaryService.addToActions("k8sResource"); + summaryService.addToActions("k8sHelm"); + summaryService.setSuccessful(true); } private void verifySummaryPrintedOnce() { @@ -164,15 +173,13 @@ private void verifySummaryPrintedOnce() { verifyResourceSummaryPrinted(); verifyHelmSummaryPrinted(); verifyApplyUndeploySummaryPrinted(); + verifyActionsRunPrinted(); verify(logger).info(" SUMMARY"); } private void verifyApplyUndeploySummaryPrinted() { - verify(logger).info("Undeployed resources from %s", "https://192.168.39.75:8443/"); - verify(logger, times(4)).info(" - %s", "test"); - verify(logger, times(2)).info(" * %s/%s %s", "apps", "v1", "Deployment"); - verify(logger, times(4)).info(" * Namespace: %s", "test-ns"); - verify(logger, times(2)).info(" * %s %s", "v1", "Service"); + verify(logger).info("Undeployed resources to %s: %s", "https://192.168.39.75:8443/", "[Deployment/test, Service/test]"); + verify(logger).info("Applied resources to %s: %s", "https://192.168.39.75:8443/", "[Deployment/test, Service/test]"); } private void verifyPushSummaryPrinted() { @@ -203,7 +210,7 @@ private void verifySummaryBannerPrinted() { } private void verifyResourceSummaryPrinted() { - verify(logger).info("Enrichers applied: [%s]", "jkube-controller,jkube-service"); + verify(logger).info("Enrichers applied: [%s]", "jkube-controller, jkube-service"); verify(logger).info("Generated resources:"); verify(logger).info(" - %s", "target/classes/META-INF/jkube/kubernetes/test-deployment.yml"); verify(logger).info(" - %s", "target/classes/META-INF/jkube/kubernetes/test-service.yml"); @@ -215,4 +222,8 @@ private void verifyHelmSummaryPrinted() { verify(logger).info("Location : %s", "target/jkube/helm/test/kubernetes"); verify(logger).info("Compressed : %s", "target/test.tar.gz"); } + + private void verifyActionsRunPrinted() { + verify(logger).info("%s executed : [ %s ]", "Goals", "k8sResource, k8sHelm"); + } } 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 925238582d..8f358a3503 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; @@ -60,10 +61,12 @@ import static java.net.HttpURLConnection.HTTP_NOT_FOUND; import static java.net.HttpURLConnection.HTTP_OK; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; @EnableKubernetesMockClient class ApplyServiceTest { private KitLogger log; + private SummaryService summaryService; KubernetesMockServer mockServer; OpenShiftClient client; @@ -73,7 +76,8 @@ class ApplyServiceTest { @BeforeEach void setUp() { log = new KitLogger.SilentLogger(); - applyService = new ApplyService(client, log); + summaryService = mock(SummaryService.class); + 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/DebugServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java index b548a4d44d..8e32822ea0 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/DebugServiceTest.java @@ -42,6 +42,7 @@ import okhttp3.mockwebserver.RecordedRequest; import org.assertj.core.groups.Tuple; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -61,6 +62,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.startsWith; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; @@ -78,8 +80,9 @@ class DebugServiceTest { @BeforeEach void setUp() { logger = spy(new KitLogger.SilentLogger()); + SummaryService summaryService = mock(SummaryService.class); singleThreadExecutor = Executors.newSingleThreadExecutor(); - final ApplyService applyService = new ApplyService(kubernetesClient, logger); + final ApplyService applyService = new ApplyService(kubernetesClient, logger, summaryService); applyService.setNamespace(kubernetesClient.getNamespace()); debugService = new DebugService(logger, kubernetesClient, new PortForwardService(logger), applyService); } 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/KubernetesUndeployServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java index 91d485f1cf..5ba8018798 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/kubernetes/KubernetesUndeployServiceTest.java @@ -34,6 +34,7 @@ import io.fabric8.kubernetes.client.utils.Serialization; import org.apache.commons.io.FileUtils; 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.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -73,7 +74,11 @@ void setUp() { final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder() .log(logger) .platformMode(RuntimeMode.KUBERNETES) - .configuration(JKubeConfiguration.builder().build()) + .configuration(JKubeConfiguration.builder() + .project(JavaProject.builder() + .buildDirectory(new File("target")) + .build()) + .build()) .clusterAccess(new ClusterAccess(logger, ClusterConfiguration.builder().namespace("test").build()) { @Override public T createDefaultClient() { 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/openshift/OpenshiftUndeployServiceTest.java b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java index 45c807ea85..14a43ba014 100644 --- a/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java +++ b/jkube-kit/config/service/src/test/java/org/eclipse/jkube/kit/config/service/openshift/OpenshiftUndeployServiceTest.java @@ -26,6 +26,7 @@ import io.fabric8.kubernetes.client.utils.Serialization; import org.apache.commons.io.FileUtils; 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.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -74,7 +75,11 @@ void setUp() { final JKubeServiceHub jKubeServiceHub = JKubeServiceHub.builder() .log(logger) .platformMode(RuntimeMode.KUBERNETES) - .configuration(JKubeConfiguration.builder().build()) + .configuration(JKubeConfiguration.builder() + .project(JavaProject.builder() + .buildDirectory(new File("target")) + .build()) + .build()) .clusterAccess(new ClusterAccess(logger, ClusterConfiguration.builder().namespace("test").build()) { @Override public T createDefaultClient() { 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/doc/src/main/asciidoc/inc/_summary.adoc b/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc index 5b35dab275..14fe1186f9 100644 --- a/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc +++ b/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc @@ -1,7 +1,7 @@ [[summary]] = Summary -{plugin} can print a brief summary of the task it performed in order to give better idea of what's going on to the user. At the moment, most of the build related actions (build, push, resource, apply etc.) print summary. It can be disabled with `jkube.summaryEnabled` property. +{plugin} prints a brief summary of the task it performed in order to give better idea of what's going on to the user. At the moment, most of the build related actions (build, push, resource, apply etc.) print summary. It can be disabled with `jkube.summaryEnabled` property. .Summary configuration [cols="2,6"] 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 156adb617c..4aab753883 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 @@ -49,10 +49,10 @@ import io.fabric8.kubernetes.api.model.VolumeMountBuilder; 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.ControllerResourceConfig; @@ -413,16 +413,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/api/src/test/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtilTest.java b/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtilTest.java index 30a2a837e4..27c44cdfbb 100644 --- a/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtilTest.java +++ b/jkube-kit/enricher/api/src/test/java/org/eclipse/jkube/kit/enricher/api/util/KubernetesResourceUtilTest.java @@ -41,6 +41,7 @@ import org.assertj.core.api.InstanceOfAssertFactories; import io.fabric8.kubernetes.client.KubernetesClientException; 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.config.resource.ControllerResourceConfig; @@ -75,7 +76,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIOException; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.assertj.core.api.Assertions.tuple; import static org.eclipse.jkube.kit.config.resource.PlatformMode.kubernetes; import static org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil.DEFAULT_RESOURCE_VERSIONING; @@ -97,6 +97,7 @@ class KubernetesResourceUtilTest { private static File fragmentsDir; private KitLogger log; private ImageConfiguration imageConfiguration; + private SummaryService summaryService; @BeforeAll static void initPath() { @@ -116,6 +117,7 @@ void setUp() { .from("base:latest") .build()) .build(); + summaryService = new SummaryService(new File("target"), log, false); } @Nested @@ -617,10 +619,12 @@ void handleKubernetesClientException_whenCauseNoHost_thenThrowExceptionWithMessa // Given KubernetesClientException exception = new KubernetesClientException("test", new UnknownHostException()); - // When + Then - assertThatIllegalStateException() - .isThrownBy(() -> handleKubernetesClientException(exception, log)) - .withMessageContaining("Could not connect to kubernetes cluster. Are you sure if you're connected to a remote cluster via `kubectl`? Error: "); + // When + IllegalStateException illegalStateException = handleKubernetesClientException(exception, log, summaryService); + + // Then + assertThat(illegalStateException) + .hasMessageContaining("Could not connect to kubernetes cluster. Are you sure if you're connected to a remote cluster via `kubectl`? Error: "); } @Test @@ -628,10 +632,12 @@ void handleKubernetesClientException_whenInvoked_thenThrowExceptionWithMessage() // Given KubernetesClientException exception = new KubernetesClientException("kubernetes failure", new RuntimeException()); - // When + Then - assertThatIllegalStateException() - .isThrownBy(() -> handleKubernetesClientException(exception, log)) - .withMessageContaining("kubernetes failure"); + // When + IllegalStateException illegalStateException = handleKubernetesClientException(exception, log, summaryService); + + // Then + assertThat(illegalStateException) + .hasMessageContaining("kubernetes failure"); } @Nested 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 3fb415b626..783c4aeaa5 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 @@ -24,7 +24,6 @@ import java.util.Map; import java.util.Set; -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; @@ -63,7 +62,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); @@ -113,7 +112,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 12d639aa63..83e1d66fc4 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 @@ -19,7 +19,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.ControllerResourceConfig; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -85,7 +84,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(controllerResourceConfig, 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 36a752118f..9249098584 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.ControllerResourceConfig; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -118,7 +117,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { .getHandlerFor(fromType(getConfig(Config.TYPE))); final HasMetadata resource = ch.get(controllerResourceConfig, 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(controllerResourceConfig, 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 970c77e708..af3d63b148 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 20d130a3a5..d71f1cf559 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; @@ -66,7 +65,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), useDeprecatedAnnotationPrefix)); } 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 4794917474..a72a996279 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.ControllerResourceConfig; @@ -206,7 +205,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 e93667b052..b44e7a052c 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 e99305a690..fe43bb5b4e 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; @@ -121,7 +120,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(useDeprecatedAnnotationPrefix), system); annotations.put(JKubeAnnotations.ISSUE_TRACKER_URL.value(useDeprecatedAnnotationPrefix), 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 7ee46fe4ee..2916ef4e9a 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; @@ -64,7 +63,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(useDeprecatedAnnotationPrefix), 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 7f3c034f10..441999cbc6 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 @@ -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; @@ -97,7 +96,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 (!KubernetesResourceUtil.hasInitContainer(builder, ENRICHER_NAME)) { KubernetesResourceUtil.appendInitContainer(builder, createPvInitContainer(podSpec), log); } 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 8c7721d639..bcd695a0c4 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; @@ -81,7 +80,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 f92442660b..900575efa6 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; @@ -34,6 +35,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import java.io.File; import java.util.Properties; import java.util.stream.Stream; @@ -49,8 +51,10 @@ class DefaultControllerEnricherCreateTest { @BeforeEach 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 d435698a36..b07149bb58 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.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Properties; @@ -51,9 +53,11 @@ class DefaultControllerEnricherTest { 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 86b9f45fd0..03d191bc69 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; @@ -34,14 +35,17 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; class DefaultNamespaceEnricherTest { private EnricherContext context; private 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 4a5f7aa356..2b58278b3f 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,6 +13,7 @@ */ package org.eclipse.jkube.enricher.generic; +import java.io.File; import java.util.Arrays; import java.util.Properties; @@ -20,6 +21,7 @@ import org.eclipse.jkube.kit.common.KitLogger; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; +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; @@ -40,6 +42,7 @@ class DefaultServiceEnricherAddMissingPartsTest { @BeforeEach void setUp() { properties = new Properties(); + KitLogger logger = new KitLogger.SilentLogger(); final JKubeEnricherContext context = JKubeEnricherContext.builder() .image(ImageConfiguration.builder() .name("test-image") @@ -50,7 +53,8 @@ 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/DefaultServiceEnricherExternalServiceTest.java b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherExternalServiceTest.java index 10deef806b..1f99d7762c 100644 --- a/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherExternalServiceTest.java +++ b/jkube-kit/enricher/generic/src/test/java/org/eclipse/jkube/enricher/generic/DefaultServiceEnricherExternalServiceTest.java @@ -26,6 +26,7 @@ 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.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.resource.PlatformMode; @@ -34,6 +35,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -44,6 +46,7 @@ class DefaultServiceEnricherExternalServiceTest { @BeforeEach void setUp() { + KitLogger kitLogger = new KitLogger.SilentLogger(); final JKubeEnricherContext context = JKubeEnricherContext.builder() .image(ImageConfiguration.builder() .name("test-image") @@ -57,7 +60,8 @@ void setUp() { .groupId("group-id") .artifactId("artifact-id") .build()) - .log(new KitLogger.SilentLogger()) + .log(kitLogger) + .summaryService(new SummaryService(new File("target"), kitLogger, false)) .build(); kubernetesListBuilder = new KubernetesListBuilder(); kubernetesListBuilder.addToItems(createNewExternalServiceFragment()); 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 4f131362eb..fd28a7c10c 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 @@ class DependencyEnricherTest { @BeforeEach void setUp() { + KitLogger logger = new KitLogger.SilentLogger(); context = JKubeEnricherContext.builder() .project(JavaProject.builder() .name("the-project") @@ -57,7 +59,8 @@ 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(); } 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 ed7529147f..186c0cc9c1 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.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -45,9 +47,11 @@ class DockerRegistrySecretEnricherTest { @BeforeEach 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 fc726f94b8..db888788b2 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.jupiter.api.Test; +import java.io.File; import java.util.List; import java.util.Properties; @@ -317,7 +318,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 1244245f82..86a315aba1 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.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -36,11 +38,13 @@ class IngressEnricherBehavioralTest { @BeforeEach 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 acc7695271..416fc21e28 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 @@ -26,6 +26,8 @@ import io.fabric8.openshift.api.model.DeploymentConfigBuilder; 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.enricher.api.EnricherContext; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -35,6 +37,7 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import java.io.File; import java.util.Properties; import java.util.stream.Stream; @@ -49,10 +52,12 @@ class PodAnnotationEnricherTest { 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 a8ce593fed..606742adf2 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 @@ -14,6 +14,7 @@ package org.eclipse.jkube.enricher.generic; import java.util.Collections; +import java.io.File; 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.jupiter.api.BeforeEach; @@ -52,11 +54,13 @@ class ReplicaCountEnricherTest { void setUpEnricher() { final Properties properties = new Properties(); properties.setProperty("jkube.replicas", "" + EXPECTED_REPLICAS); + SummaryService summaryService = new SummaryService(new File("target"), new KitLogger.SilentLogger(), false); EnricherContext 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 e5c0f7b38c..1fdf1650ad 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.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -41,6 +44,7 @@ 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 14addfa784..eab4ee0cd2 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 @@ class DeploymentConfigEnricherTest { @BeforeEach void setUp() { + 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 d598c065f0..d60ba03d66 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.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; class ProjectEnricherTest { @@ -34,7 +35,7 @@ class ProjectEnricherTest { @BeforeEach void setExpectations() { - context = mock(JKubeEnricherContext.class); + context = mock(JKubeEnricherContext.class, RETURNS_DEEP_STUBS); } @Test 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 2ebd6ebbed..82b76473de 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.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.File; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -35,12 +37,14 @@ class RouteEnricherBehavioralTest { @BeforeEach void setUp() { + 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 bbba32c4c9..dd49fe805a 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 @@ -13,10 +13,6 @@ */ package org.eclipse.jkube.openliberty.enricher; -import io.fabric8.kubernetes.api.model.Probe; -import io.fabric8.kubernetes.api.model.ProbeBuilder; -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.microprofile.enricher.AbstractMicroprofileHealthCheckEnricher; @@ -41,43 +37,4 @@ protected boolean shouldAddProbe() { protected int getPort() { return asInteger(Optional.ofNullable(getPortFromConfiguration()).orElse(DEFAULT_OPENLIBERTY_PORT)); } - - protected Probe getReadinessProbe() { - return discoverOpenLibertyHealthCheck(getConfig(Config.READINESS_PATH), getConfigAsInt(Config.READINESS_INITIAL_DELAY), getConfigAsInt(Config.READINESS_FAILURE_THRESHOLD), getConfigAsInt(Config.READINESS_SUCCESS_THRESHOLD), getConfigAsInt(Config.READINESS_PERIOD_SECONDS)); - } - - @Override - protected Probe getLivenessProbe() { - return discoverOpenLibertyHealthCheck(getConfig(Config.LIVENESS_PATH), getConfigAsInt(Config.LIVENESS_INITIAL_DELAY), getConfigAsInt(Config.LIVENESS_FAILURE_THRESHOLD), getConfigAsInt(Config.LIVENESS_SUCCESS_THRESHOLD), getConfigAsInt(Config.LIVENESS_PERIOD_SECONDS)); - } - - @Override - protected Probe getStartupProbe() { - if (isStartupEndpointSupported(getContext().getProject())) { - return discoverOpenLibertyHealthCheck(getConfig(Config.STARTUP_PATH), getConfigAsInt(Config.STARTUP_INITIAL_DELAY), getConfigAsInt(Config.STARTUP_FAILURE_THRESHOLD), getConfigAsInt(Config.STARTUP_SUCCESS_THRESHOLD), getConfigAsInt(Config.STARTUP_PERIOD_SECONDS)); - } - return null; - } - - private Probe discoverOpenLibertyHealthCheck(String path, int initialDelay, int failureThreshold, int successThreshold, int periodSeconds) { - if (hasMicroProfileDependency(getContext().getProject()) && isMicroProfileHealthEnabled(getContext().getProject())) { - SummaryUtil.addToEnrichers(getName()); - return new ProbeBuilder() - .withNewHttpGet() - .withNewPort(asInteger(getConfig(Config.PORT))) - .withPath(path) - .withScheme(getConfig(Config.SCHEME)) - .endHttpGet() - .withFailureThreshold(failureThreshold) - .withSuccessThreshold(successThreshold) - .withInitialDelaySeconds(initialDelay) - .withPeriodSeconds(periodSeconds) - .build(); - } - return null; - } - - private int getConfigAsInt(Configs.Config key) { - return Integer.parseInt(getConfig(key)); - } } 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-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java index 7046de780a..5ce76e7298 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java +++ b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java @@ -27,6 +27,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.common.util.SpringBootConfigurationHelper; import org.eclipse.jkube.kit.config.resource.ProcessorConfig; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; @@ -60,6 +61,7 @@ public abstract class AbstractSpringBootHealthCheckEnricherTestSupport { @BeforeEach void init(@TempDir Path project) throws IOException { projectClassLoaders = mock(ProjectClassLoaders.class, RETURNS_DEEP_STUBS); + SummaryService summaryService = mock(SummaryService.class); context = spy(JKubeEnricherContext.builder() .log(new KitLogger.SilentLogger()) .project(JavaProject.builder() @@ -73,6 +75,7 @@ void init(@TempDir Path project) throws IOException { .version(getSpringBootVersion()) .build())) .build()) + .summaryService(summaryService) .processorConfig(new ProcessorConfig()) .build()); when(context.getProjectClassLoaders()).thenReturn(projectClassLoaders); 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 f6069859bf..074e59115d 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(" ").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 35cbe77b05..0ceeae4625 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 @@ -25,6 +25,7 @@ import org.eclipse.jkube.kit.build.service.docker.helper.ImageNameFormatter; 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.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; @@ -92,7 +93,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(); @@ -105,7 +106,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 0368a74b90..ecab468320 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 @@ -20,6 +20,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.JavaProject; +import org.eclipse.jkube.kit.common.service.SummaryService; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.watcher.api.WatcherContext; @@ -42,6 +43,7 @@ class DockerImageWatcherTest { private WatchService watchService; private DockerImageWatcher dockerImageWatcher; + private SummaryService summaryService; @BeforeEach public void setUp() { @@ -49,6 +51,7 @@ public void setUp() { ClusterAccess mockedClusterAccess = mock(ClusterAccess.class); watchService = mock(WatchService.class); DockerServiceHub mockedDockerServiceHub = mock(DockerServiceHub.class,RETURNS_DEEP_STUBS); + summaryService = mock(SummaryService.class); dockerImageWatcher = new DockerImageWatcher(watcherContext); when(mockedDockerServiceHub.getWatchService()).thenReturn(watchService); when(watcherContext.getJKubeServiceHub().getDockerServiceHub()).thenReturn(mockedDockerServiceHub); @@ -79,9 +82,9 @@ void watchShouldInitWatchContext() throws IOException { // Given ArgumentCaptor watchContextArgumentCaptor = ArgumentCaptor.forClass(WatchContext.class); // When - dockerImageWatcher.watch(null, null, null, null); + dockerImageWatcher.watch(null, null, null, null, summaryService); // Then - verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any()); + verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any(), any()); assertThat(watchContextArgumentCaptor.getValue()) .isNotNull() .extracting("imageCustomizer","containerRestarter","containerCommandExecutor","containerCopyTask") @@ -93,8 +96,8 @@ void watchExecuteCommandInPodTask() throws Exception { try (MockedConstruction podExecutorMockedConstruction = mockConstruction(PodExecutor.class)) { // Given ArgumentCaptorwatchContextArgumentCaptor=ArgumentCaptor.forClass(WatchContext.class); - dockerImageWatcher.watch(null,null,null,null); - verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any()); + dockerImageWatcher.watch(null,null,null,null, summaryService); + verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any(), any()); final ExecTask execTask=watchContextArgumentCaptor.getValue().getContainerCommandExecutor(); //When execTask.exec("thecommand"); @@ -109,8 +112,8 @@ void watchCopyFileToPod() throws Exception { try (MockedConstruction podExecutorMockedConstruction = mockConstruction(PodExecutor.class)) { // Given ArgumentCaptor watchContextArgumentCaptor = ArgumentCaptor.forClass(WatchContext.class); - dockerImageWatcher.watch(null,null,null,null); - verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any()); + dockerImageWatcher.watch(null,null,null,null, summaryService); + verify(watchService).watch(watchContextArgumentCaptor.capture(),any(),any(), any()); final CopyFilesTask copyFilesTask = watchContextArgumentCaptor.getValue().getContainerCopyTask(); // When copyFilesTask.copy(null); diff --git a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java index 1d1cf1baae..d64758732b 100644 --- a/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java +++ b/kubernetes-maven-plugin/plugin/src/main/java/org/eclipse/jkube/maven/plugin/mojo/build/AbstractDockerMojo.java @@ -24,7 +24,6 @@ import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.generator.api.GeneratorManager; import org.eclipse.jkube.kit.build.core.GavLabel; -import org.eclipse.jkube.kit.common.util.SummaryUtil; import org.eclipse.jkube.kit.config.image.build.JKubeBuildStrategy; import org.eclipse.jkube.kit.common.JKubeConfiguration; import org.eclipse.jkube.kit.build.service.docker.DockerAccessFactory; @@ -88,6 +87,8 @@ 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.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.printSummaryIfLastExecuting; import static org.eclipse.jkube.maven.plugin.mojo.build.AbstractJKubeMojo.DEFAULT_LOG_PREFIX; public abstract class AbstractDockerMojo extends AbstractMojo @@ -450,26 +451,26 @@ protected void doExecute() throws MojoExecutionException { .dockerServiceHub(DockerServiceHub.newInstance(log, dockerAccess, logOutputSpecFactory)) .buildServiceConfig(buildServiceConfigBuilder().build()) .offline(offline) + .summaryEnabled(summaryEnabled) .build(); resolvedImages = ConfigHelper.initImageConfiguration(apiVersion, getBuildTimestamp(getPluginContext(), CONTEXT_KEY_BUILD_TIMESTAMP, project.getBuild().getDirectory(), DOCKER_BUILD_TIMESTAMP), images, imageConfigResolver, log, filter, this, jkubeServiceHub.getConfiguration()); - SummaryUtil.initSummary(javaProject.getBuildDirectory(), log); - SummaryUtil.setSuccessful(true); + jkubeServiceHub.getSummaryService().setSuccessful(true); + jkubeServiceHub.getSummaryService().setActionType("Goals"); + jkubeServiceHub.getSummaryService().addToActions(String.format("%s\b%s", getLogPrefix(), mojoExecution.getGoal())); executeInternal(); } catch (IOException | DependencyResolutionRequiredException exp) { logException(exp); - SummaryUtil.setFailureIfSummaryEnabledOrThrow(summaryEnabled, exp.getMessage(), () -> 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 +627,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 +654,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..f5ffc3897e 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,9 @@ 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); + jkubeServiceHub.getSummaryService().setActionType("Goals"); + jkubeServiceHub.getSummaryService().addToActions(String.format("%s\b%s", getLogPrefix(), mojoExecution.getGoal())); } protected boolean shouldSkip() { @@ -192,6 +198,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 e427829240..a181e26160 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; @@ -214,13 +214,14 @@ public void executeInternal() throws MojoExecutionException, MojoFailureExceptio final ResourceClassifier resourceClassifier = getResourceClassifier(); final KubernetesList resourceList = generateResources(); final File resourceClassifierDir = new File(this.targetDir, resourceClassifier.getValue()); - final File artifact = jkubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, log); + final File artifact = jkubeServiceHub.getResourceService().writeResources(resourceList, resourceClassifier, log, jkubeServiceHub.getSummaryService()); validateIfRequired(resourceClassifierDir, resourceClassifier); // 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 ab0260f67c..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,33 +13,167 @@ */ package org.eclipse.jkube.maven.plugin.mojo.build; +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 { - 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() { - mavenProject = mock(MavenProject.class,RETURNS_DEEP_STUBS); - when(mavenProject.getBuild().getDirectory()).thenReturn("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; + }}; + } + + @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 6d229c3a66..5e36f2e38f 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 @@ -18,6 +18,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Collections; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; @@ -58,36 +59,38 @@ 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 HelmMojoTest { @TempDir private Path projectDir; - private MavenProject mavenProject; - private MojoExecution mojoExecution; - private MavenSession mavenSession; - private JKubeServiceHub jKubeServiceHub; - private HelmService helmService; - private HelmMojo helmMojo; private MockedStatic resourceUtilMockedStatic; @BeforeEach void setUp() { + MojoExecution mockedMojoExecution = mock(MojoExecution.class); + MavenSession mockedMavenSession = mock(MavenSession.class); resourceUtilMockedStatic = mockStatic(ResourceUtil.class); helmMojo = new HelmMojo(); helmMojo.offline = true; helmMojo.project = new MavenProject(); helmMojo.settings = new Settings(); + helmMojo.session = mockedMavenSession; + helmMojo.mojoExecution = mockedMojoExecution; helmMojo.jkubeServiceHub = JKubeServiceHub.builder() .configuration(JKubeConfiguration.builder().build()) .log(new KitLogger.SilentLogger()) .platformMode(RuntimeMode.KUBERNETES) + .summaryEnabled(false) .build(); helmMojo.project.getBuild() .setOutputDirectory(projectDir.resolve("target").resolve("classes").toFile().getAbsolutePath()); helmMojo.project.getBuild().setDirectory(projectDir.resolve("target").toFile().getAbsolutePath()); helmMojo.project.setFile(projectDir.resolve("target").toFile()); + when(mockedMavenSession.getGoals()).thenReturn(Collections.singletonList("k8s:helm")); + when(mockedMojoExecution.getGoal()).thenReturn("k8s:helm"); } @AfterEach @@ -142,7 +145,7 @@ void executeInternal_withNoConfig_shouldInitConfigWithDefaultValuesAndGenerate() @Test void executeInternal_withNoConfigGenerateThrowsException_shouldRethrowWithMojoExecutionException() { try (MockedConstruction helmServiceMockedConstruction = mockConstruction(HelmService.class, - (mock, ctx) -> doThrow(new IOException("Exception is thrown")).when(mock).generateHelmCharts(any()) + (mock, ctx) -> doThrow(new IOException("Exception is thrown")).when(mock).generateHelmCharts(any()) )) { // When & Then assertThatExceptionOfType(MojoExecutionException.class) diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojoTest.java index 3804cd1147..3a57dbcb46 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/build/HelmPushMojoTest.java @@ -14,6 +14,7 @@ package org.eclipse.jkube.maven.plugin.mojo.build; import java.nio.file.Path; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -43,6 +44,7 @@ import static org.mockito.ArgumentMatchers.any; 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.mockConstruction; @@ -63,7 +65,7 @@ class HelmPushMojoTest { void setUp() throws Exception { helmPushMojo = new HelmPushMojo(); mavenSession = mock(MavenSession.class); - mojoExecution = mock(MojoExecution.class); + mojoExecution = mock(MojoExecution.class, RETURNS_DEEP_STUBS); helmPushMojo.helm = new HelmConfig(); helmPushMojo.project = new MavenProject(); helmPushMojo.session = mavenSession; @@ -74,9 +76,9 @@ void setUp() throws Exception { .setOutputDirectory(projectDir.resolve("target").resolve("classes").toFile().getAbsolutePath()); helmPushMojo.project.getBuild().setDirectory(projectDir.resolve("target").toFile().getAbsolutePath()); helmPushMojo.project.setFile(projectDir.resolve("target").toFile()); - helmPushMojo.mojoExecution.getMojoDescriptor().setPluginDescriptor(new PluginDescriptor()); - helmPushMojo.mojoExecution.getMojoDescriptor().getPluginDescriptor().setGoalPrefix("k8s"); - helmPushMojo.mojoExecution.getMojoDescriptor().setGoal("helm-push"); + when(mojoExecution.getMojoDescriptor().getFullGoalName()).thenReturn("k8s:helm-push"); + when(mavenSession.getGoals()).thenReturn(Collections.singletonList("k8s:helm-push")); + when(mojoExecution.getGoal()).thenReturn("k8s:helm-push"); when(helmPushMojo.securityDispatcher.decrypt(anyString())) .thenReturn(String.valueOf(AdditionalAnswers.returnsFirstArg())); } 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 f17a5809e6..cdbf6476ec 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 @@ -50,7 +50,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.inOrder; @@ -143,7 +142,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 @@ -158,7 +157,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 @@ -173,7 +172,7 @@ 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()); } @Test @@ -188,7 +187,7 @@ void executeInternal_whenInvoked_shouldWriteResourcesFirstThenValidate() throws assertThat(resourceValidatorMockedConstruction.constructed()).hasSize(1); ResourceValidator mockResourceValidator = resourceValidatorMockedConstruction.constructed().get(0); InOrder inOrder = inOrder(mockedResourceService, mockResourceValidator); - inOrder.verify(mockedResourceService).writeResources(any(), any(), any()); + inOrder.verify(mockedResourceService).writeResources(any(), any(), any(), any()); inOrder.verify(mockResourceValidator).validate(); } } diff --git a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/RemoteDevMojoTest.java b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/RemoteDevMojoTest.java index 33fae8e3e6..b7b1a033a6 100644 --- a/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/RemoteDevMojoTest.java +++ b/kubernetes-maven-plugin/plugin/src/test/java/org/eclipse/jkube/maven/plugin/mojo/develop/RemoteDevMojoTest.java @@ -13,6 +13,8 @@ */ package org.eclipse.jkube.maven.plugin.mojo.develop; +import org.apache.maven.execution.MavenSession; +import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.apache.maven.settings.Settings; import org.eclipse.jkube.kit.remotedev.RemoteDevelopmentService; @@ -22,6 +24,7 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedConstruction; +import java.util.Collections; import java.util.Properties; import java.util.concurrent.CompletableFuture; @@ -43,10 +46,16 @@ class RemoteDevMojoTest { @BeforeEach void setUp() { final MavenProject mavenProject = mock(MavenProject.class); + final MavenSession mavenSession = mock(MavenSession.class); + final MojoExecution mavenMojoExecution = mock(MojoExecution.class); + when(mavenSession.getGoals()).thenReturn(Collections.singletonList("k8s:remote-dev")); + when(mavenMojoExecution.getGoal()).thenReturn("k8s:remote-dev"); when(mavenProject.getProperties()).thenReturn(new Properties()); remoteDevMojo = new RemoteDevMojo() {{ project = mavenProject; settings = mock(Settings.class, RETURNS_DEEP_STUBS); + mojoExecution = mavenMojoExecution; + session = mavenSession; }}; started = new CompletableFuture<>(); remoteDevelopmentService = mockConstruction(RemoteDevelopmentService.class, (mock, ctx) -> 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 e8e8deb4a6..fe7338efb4 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 @@ -13,23 +13,27 @@ */ package org.eclipse.jkube.maven.plugin.mojo.develop; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor; 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.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; import org.eclipse.jkube.kit.config.resource.RuntimeMode; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; import org.apache.maven.project.MavenProject; import org.apache.maven.settings.Settings; -import org.eclipse.jkube.kit.config.service.kubernetes.KubernetesUndeployService; +import org.eclipse.jkube.kit.config.service.UndeployService; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -38,39 +42,51 @@ import org.mockito.MockedStatic; 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.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; class UndeployMojoTest { @TempDir private Path temporaryFolder; - private MockedConstruction undeployServiceMockedConstruction; private MockedStatic mavenUtilMockedStatic; + private UndeployService mockedUndeployService; private MockedStatic openshiftHelperMockedStatic; + private MockedConstruction jKubeServiceHubMockedConstruction; private UndeployMojo undeployMojo; @BeforeEach void setUp() throws IOException { - undeployServiceMockedConstruction = mockConstruction(KubernetesUndeployService.class); + File buildDirectory = new File("target"); + KitLogger kitLogger = new KitLogger.SilentLogger(); openshiftHelperMockedStatic = mockStatic(OpenshiftHelper.class); openshiftHelperMockedStatic.when(() -> OpenshiftHelper.isOpenShift(any())).thenReturn(false); mavenUtilMockedStatic = mockStatic(MavenUtil.class); + mockedUndeployService = mock(UndeployService.class); + jKubeServiceHubMockedConstruction = mockConstruction(JKubeServiceHub.class, (mock, ctx) -> { + when(mock.getConfiguration()).thenReturn(JKubeConfiguration.builder() + .project(JavaProject.builder() + .buildDirectory(buildDirectory) + .build()) + .build()); + when(mock.getLog()).thenReturn(kitLogger); + when(mock.getPlatformMode()).thenReturn(RuntimeMode.KUBERNETES); + when(mock.getUndeployService()).thenReturn(mockedUndeployService); + when(mock.getSummaryService()).thenReturn(new SummaryService(buildDirectory, kitLogger, false)); + }); undeployMojo = new UndeployMojo() {{ this.resourceDir = Files.createDirectory(temporaryFolder.resolve("resources")).toFile(); this.kubernetesManifest = Files.createFile(temporaryFolder.resolve("kubernetes.yml")).toFile(); project = new MavenProject(); settings = new Settings(); - jkubeServiceHub = JKubeServiceHub.builder() - .configuration(JKubeConfiguration.builder().build()) - .log(new KitLogger.SilentLogger()) - .platformMode(RuntimeMode.KUBERNETES) - .build(); -// log = new KitLogger.SilentLogger(); mojoExecution = new MojoExecution(new MojoDescriptor()); mojoExecution.getMojoDescriptor().setPluginDescriptor(new PluginDescriptor()); mojoExecution.getMojoDescriptor().getPluginDescriptor().setGoalPrefix("k8s"); @@ -82,7 +98,7 @@ void setUp() throws IOException { void tearDown() { mavenUtilMockedStatic.close(); openshiftHelperMockedStatic.close(); - undeployServiceMockedConstruction.close(); + jKubeServiceHubMockedConstruction.close(); undeployMojo = null; } @@ -117,13 +133,26 @@ void execute_withCustomProperties() throws Exception { .hasFieldOrPropertyWithValue("namespace", "custom-namespace"); } + @Test + void execute_whenUndeployServiceFails_thenExceptionThrown() throws IOException { + // Given + doThrow(new IOException("failure")) + .when(mockedUndeployService).undeploy(any(), any(), any()); + + // When + assertThatExceptionOfType(MojoExecutionException.class) + .isThrownBy(() -> undeployMojo.execute()) + .withMessage("failure"); + } + private void assertUndeployServiceUndeployWasCalled() throws Exception { - verify(undeployServiceMockedConstruction.constructed().get(0), times(1)) + verify(mockedUndeployService, times(1)) .undeploy(eq(Collections.singletonList(temporaryFolder.resolve("resources").toFile())), any(), eq(temporaryFolder.resolve("kubernetes.yml").toFile())); } - private void assertUndeployServiceUndeployWasNotCalled() { - assertThat(undeployServiceMockedConstruction.constructed()).isEmpty(); + private void assertUndeployServiceUndeployWasNotCalled() throws IOException { + verify(mockedUndeployService, times(0)) + .undeploy(any(), any(), any()); } } 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");