From da09ca91e0a461c937c9af994e2c77a257a5ba35 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Thu, 28 Jul 2022 23:34:19 +0530 Subject: [PATCH] feat (jkube-kit) : Initial draft for JKube Actions Summary (#1033) Add summary for jkube build actions in order to improve ux. Signed-off-by: Rohan Kumar --- CHANGELOG.md | 1 + .../doc/src/main/asciidoc/index.adoc | 1 + .../jkube/gradle/plugin/tests/AutoTLSIT.java | 11 +- .../gradle/plugin/tests/ConfigMapIT.java | 29 ++- .../gradle/plugin/tests/DebugModeIT.java | 18 +- .../plugin/tests/DefaultControllerIT.java | 18 +- .../plugin/tests/DefaultMetadataIT.java | 35 ++- .../plugin/tests/DependencyResourcesIT.java | 20 +- .../plugin/tests/DockerfileSimpleIT.java | 21 +- .../gradle/plugin/tests/FileSecretIT.java | 18 +- .../gradle/plugin/tests/GitAnnotationsIT.java | 18 +- .../gradle/plugin/tests/GroovyDSLImageIT.java | 10 +- .../plugin/tests/ImageChangeTriggerIT.java | 9 +- .../plugin/tests/ImagePullPolicyIT.java | 18 +- .../jkube/gradle/plugin/tests/IngressIT.java | 11 +- .../plugin/tests/JavaOptionsEnvMergeIT.java | 18 +- .../jkube/gradle/plugin/tests/NameIT.java | 16 +- .../gradle/plugin/tests/NamespaceIT.java | 18 +- .../gradle/plugin/tests/OpenLibertyIT.java | 21 +- .../plugin/tests/ProbesGroovyDSLIT.java | 21 +- .../gradle/plugin/tests/ProjectLabelIT.java | 21 +- .../plugin/tests/RevisionHistoryIT.java | 18 +- .../jkube/gradle/plugin/tests/RouteIT.java | 10 +- .../gradle/plugin/tests/ServiceAccountIT.java | 16 +- .../jkube/gradle/plugin/tests/ServiceIT.java | 27 ++- .../gradle/plugin/tests/SpringBootIT.java | 23 +- .../tests/SpringBootWithFragmentIT.java | 23 +- .../plugin/tests/TriggersAnnotationIT.java | 18 +- .../jkube/gradle/plugin/tests/VertxIT.java | 22 +- .../plugin/tests/VolumePermissionIT.java | 23 +- .../gradle/plugin/KubernetesExtension.java | 6 + .../gradle/plugin/task/AbstractJKubeTask.java | 4 + .../plugin/TestKubernetesExtension.java | 5 + .../gradle/plugin/TestOpenShiftExtension.java | 5 + .../build/api/assembly/AssemblyManager.java | 2 + .../build/service/docker/BuildService.java | 2 + .../build/service/docker/RegistryService.java | 8 +- .../jkube/kit/service/jib/JibServiceUtil.java | 4 + .../org/eclipse/jkube/kit/common/Summary.java | 222 ++++++++++++++++++ .../kit/common/util/KubernetesHelper.java | 14 ++ .../eclipse/jkube/kit/common/SummaryTest.java | 174 ++++++++++++++ .../kit/common/util/KubernetesHelperTest.java | 32 +++ .../kit/config/service/ApplyService.java | 31 +++ .../kubernetes/DockerBuildService.java | 7 +- .../service/kubernetes/JibBuildService.java | 8 +- .../kubernetes/KubernetesUndeployService.java | 5 + .../openshift/OpenshiftBuildService.java | 9 +- .../doc/src/main/asciidoc/inc/_summary.adoc | 15 ++ .../jkube/generator/api/GeneratorManager.java | 2 + .../generator/javaexec/JavaExecGenerator.java | 3 + .../quarkus/generator/QuarkusAssemblies.java | 5 + .../jkube/kit/resource/helm/HelmService.java | 8 +- .../service/DefaultResourceService.java | 2 + .../jkube/kit/resource/service/WriteUtil.java | 5 + .../doc/src/main/asciidoc/index.adoc | 1 + .../plugin/mojo/build/AbstractDockerMojo.java | 10 + .../plugin/mojo/build/AbstractJKubeMojo.java | 9 + .../maven/plugin/mojo/build/ApplyMojo.java | 2 + 58 files changed, 1074 insertions(+), 59 deletions(-) create mode 100644 jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/Summary.java create mode 100644 jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryTest.java create mode 100644 jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc diff --git a/CHANGELOG.md b/CHANGELOG.md index 9838ddc0bf..b9fc482ef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ Usage: ``` ### 1.9.0-SNAPSHOT * Fix #777: `k8s:build` with Dockerfile throws `Connection reset by peer` error on old docker daemons +* Fix #1033: Print summary after jkube actions * Fix #1279: Remove redundant log messages regarding plugin modes * Fix #1361: VolumePermissionEnricher : Use `.spec.storageClassName` instead of annotation to set PersistentVolume class * Fix #1411: Add support for adding additional ImageStreamTags in OpenShift S2I builds diff --git a/gradle-plugin/doc/src/main/asciidoc/index.adoc b/gradle-plugin/doc/src/main/asciidoc/index.adoc index 3ce732c0ec..8b12a77d7e 100644 --- a/gradle-plugin/doc/src/main/asciidoc/index.adoc +++ b/gradle-plugin/doc/src/main/asciidoc/index.adoc @@ -45,4 +45,5 @@ include::inc/_authentication.adoc[] include::inc/_kind-filename-type-mapping.adoc[] +include::{kitdoc-path}/inc/_summary.adoc[] diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/AutoTLSIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/AutoTLSIT.java index 8e2d9c65b6..9915920fc6 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/AutoTLSIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/AutoTLSIT.java @@ -39,6 +39,15 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithExpectedTLSAnnotat .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/autotls-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/autotls-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/autotls-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ConfigMapIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ConfigMapIT.java index 0f7901a576..b4c061c183 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ConfigMapIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ConfigMapIT.java @@ -43,7 +43,19 @@ public void k8sResource_whenRun_generatesK8sManifestsContainingConfigMap() throw .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/configmap-service.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/configmap-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-annotation-directory-configmap.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-annotation-file-configmap.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-gradle-sample-config-map-configmap.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -63,6 +75,19 @@ public void ocResource_whenRun_generatesOpenShiftManifestsContainingConfigMap() .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/configmap-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/configmap-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-annotation-directory-configmap.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-annotation-file-configmap.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-gradle-sample-config-map-configmap.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/configmap-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DebugModeIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DebugModeIT.java index 7fea185d40..7501d3acd5 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DebugModeIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DebugModeIT.java @@ -39,7 +39,14 @@ public void k8sResource_whenRun_generatesK8sManifests() throws IOException, Pars .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Enabling debug on") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/debug-mode-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -54,6 +61,13 @@ public void ocResource_whenRun_generatesK8sManifests() throws IOException, Parse .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Enabling debug on") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/debug-mode-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultControllerIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultControllerIT.java index 488e428cd9..697ad59f6a 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultControllerIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultControllerIT.java @@ -40,7 +40,14 @@ public void k8sResourceTask_whenRun_generatesK8sManifestWithDeployment() throws .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/controller-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -56,6 +63,13 @@ public void ocResourceTask_whenRun_generatesOpenShiftManifestWithDeploymentConfi .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/controller-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultMetadataIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultMetadataIT.java index f4658995cb..0c3d5eab14 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultMetadataIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DefaultMetadataIT.java @@ -39,7 +39,16 @@ public void k8sResource_whenRun_generatesK8sManifestsWithExpectedLabelsAndAnnota .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/metadata-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/metadata-service.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/test-serviceaccount-serviceaccount.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -56,7 +65,17 @@ public void k8sResource_whenRunWithReplicaSetConfiguredController_generatesK8sMa .contains("Adding a default ReplicaSet") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/metadata-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/metadata-replicaset.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/metadata-service.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/test-serviceaccount-serviceaccount.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -71,6 +90,16 @@ public void ocResource_whenRun_generatesK8sManifestsWithExpectedLabelsAndAnnotat .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/metadata-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/metadata-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/metadata-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/test-serviceaccount-serviceaccount.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DependencyResourcesIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DependencyResourcesIT.java index fe76fac6bd..7ebe501d56 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DependencyResourcesIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DependencyResourcesIT.java @@ -42,7 +42,15 @@ public void k8sResource_whenRun_generatesK8sManifestsIncludingDependencies() thr assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/example-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/web-replicaset.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -59,6 +67,14 @@ public void k8sResource_whenRunWithReplicas_generatesK8sManifestsIncludingDepend assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/example-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/web-replicaset.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleIT.java index 220d8bc824..68129a76ae 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/DockerfileSimpleIT.java @@ -40,7 +40,15 @@ public void k8sResource_whenRun_generatesK8sManifests() throws IOException, Pars .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/dockerfile-simple-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/dockerfile-simple-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -56,6 +64,15 @@ public void ocResource_whenRun_generatesOpenShiftManifests() throws IOException, .contains("Converting Deployment to DeploymentConfig") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/dockerfile-simple-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/dockerfile-simple-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/dockerfile-simple-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/FileSecretIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/FileSecretIT.java index d820eb8a43..8868778f70 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/FileSecretIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/FileSecretIT.java @@ -37,7 +37,14 @@ public void k8sResource_whenRun_generatesK8sSecret() throws IOException, ParseEx assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/secret-file-secret.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -50,6 +57,13 @@ public void ocResource_whenRun_generatesK8sSecret() throws IOException, ParseExc assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/secret-file-secret.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GitAnnotationsIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GitAnnotationsIT.java index 3d09430fe5..0fdce0ba63 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GitAnnotationsIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GitAnnotationsIT.java @@ -38,7 +38,14 @@ public void k8sResource_whenRun_generatesK8sManifestsWithGitAnnotations() throws .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/git-annotations-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -52,6 +59,13 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithGitAnnotations() t .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/git-annotations-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GroovyDSLImageIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GroovyDSLImageIT.java index c9802144f4..b637f90205 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GroovyDSLImageIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/GroovyDSLImageIT.java @@ -39,6 +39,14 @@ public void k8sResource_whenRun_generatesK8sManifests() throws IOException, Pars .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") .contains("Using first mentioned service port") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/groovy-dsl-image-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/groovy-dsl-image-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImageChangeTriggerIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImageChangeTriggerIT.java index ec07a83d5b..769754b643 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImageChangeTriggerIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImageChangeTriggerIT.java @@ -61,6 +61,13 @@ public void ocResource_whenRunWithProvidedArg_generatesDeploymentConfigWithNoIma .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/imagechangetrigger-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImagePullPolicyIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImagePullPolicyIT.java index 49f3936095..afc0e690bb 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImagePullPolicyIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ImagePullPolicyIT.java @@ -68,7 +68,14 @@ public void k8sResource_whenRun_generatesK8sManifestsWithProjectLabels() throws assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/imagepullpolicy-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -86,6 +93,13 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithProjectLabels() th assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/imagepullpolicy-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/IngressIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/IngressIT.java index 0238f9a8d3..ccdda7ab73 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/IngressIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/IngressIT.java @@ -76,6 +76,15 @@ public void k8sResourceTask_whenRun_generatesK8sManifestWithIngress() throws IOE .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/ingress-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/ingress-ingress.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/ingress-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/JavaOptionsEnvMergeIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/JavaOptionsEnvMergeIT.java index 9563d83f3a..17f412da31 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/JavaOptionsEnvMergeIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/JavaOptionsEnvMergeIT.java @@ -38,7 +38,14 @@ public void k8sResource_whenRun_thenGeneratedManifestShouldHaveMergedEnvVariable .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/java-options-env-merge-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -52,6 +59,13 @@ public void ocResource_whenRun_thenGeneratedManifestShouldHaveMergedEnvVariables .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/java-options-env-merge-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NameIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NameIT.java index 63dd9a9ca0..fd03452e6c 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NameIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NameIT.java @@ -59,7 +59,13 @@ public void k8sResource_whenRun_generatesK8sManifestsWithDefaultName() throws IO .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -75,7 +81,13 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithDefaultName() thro .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NamespaceIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NamespaceIT.java index 3f94944fbd..6ec36aad1c 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NamespaceIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/NamespaceIT.java @@ -67,7 +67,14 @@ public void k8sResourceTask_whenRunWithConfiguredWithNamespace_generatesK8sManif assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/namespace-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -84,6 +91,13 @@ public void ocResourceTask_whenRunWithConfiguredWithNamespace_generatesOpenShift assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/namespace-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/OpenLibertyIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/OpenLibertyIT.java index a46f1c1905..53828277d5 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/OpenLibertyIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/OpenLibertyIT.java @@ -43,7 +43,15 @@ public void k8sResource_whenRun_generatesK8sManifestsWithProbes() throws IOExcep .contains("jkube-healthcheck-openliberty: Adding liveness probe on port 9080") .contains("jkube-healthcheck-openliberty: Adding startup probe on port 9080") .contains("jkube-service-discovery: Using first mentioned service port '9080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/openliberty-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/openliberty-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -63,6 +71,15 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithProbes() throws IO .contains("jkube-healthcheck-openliberty: Adding liveness probe on port 9080") .contains("jkube-healthcheck-openliberty: Adding startup probe on port 9080") .contains("jkube-service-discovery: Using first mentioned service port '9080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/openliberty-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/openliberty-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/openliberty-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProbesGroovyDSLIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProbesGroovyDSLIT.java index c847a74fc7..8d0b818c35 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProbesGroovyDSLIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProbesGroovyDSLIT.java @@ -58,7 +58,15 @@ public void k8sResource_whenRun_generatesK8sManifestsWithProbes() throws IOExcep .contains("jkube-controller: Adding a default Deployment") .contains("jkube-service: Adding a default service") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/probes-groovy-dsl-config-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/probes-groovy-dsl-config-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -76,6 +84,15 @@ public void ocResource_whenRun_generatesOpenShiftManifests() throws IOException, .contains("jkube-service: Adding a default service") .contains("jkube-openshift-deploymentconfig: Converting Deployment to DeploymentConfig") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/probes-groovy-dsl-config-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/probes-groovy-dsl-config-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/probes-groovy-dsl-config-route.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProjectLabelIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProjectLabelIT.java index 9a1dea915d..fd551b7745 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProjectLabelIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ProjectLabelIT.java @@ -67,7 +67,15 @@ public void k8sResource_whenRun_generatesK8sManifestsWithProjectLabels() throws .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/project-label-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/project-label-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -86,6 +94,15 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithProjectLabels() th .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/project-label-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/project-label-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/project-label-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RevisionHistoryIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RevisionHistoryIT.java index 5ed9985748..eb5aafd5d9 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RevisionHistoryIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RevisionHistoryIT.java @@ -64,7 +64,14 @@ public void k8sResource_whenRun_generatesK8sManifestsWithRevisionHistory() throw .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to ") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/revisionhistory-deployment.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -83,6 +90,13 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithRevisionHistory() .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to ") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/revisionhistory-deploymentconfig.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RouteIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RouteIT.java index 311f388bcc..3cde551874 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RouteIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/RouteIT.java @@ -62,7 +62,15 @@ public void ocResource_whenRunWithRouteFlag_generatesOpenShiftManifests() throws .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to ") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/route-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/route-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); assertThat(gradleRunner.resolveDefaultOpenShiftResourceDir().listFiles()) .hasSize(expectedGeneratedFiles); } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountIT.java index 2c2b48cc64..791ca1d4a6 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceAccountIT.java @@ -68,7 +68,13 @@ public void k8sResource_whenRun_generatesServiceAccount() throws IOException, Pa assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -86,6 +92,12 @@ public void ocResource_whenRun_generatesServiceAccount() throws IOException, Par .contains("Using resource templates from") .contains("Converting Deployment to DeploymentConfig") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceIT.java index ec1a6b6afb..ba49b56898 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/ServiceIT.java @@ -31,7 +31,7 @@ public class ServiceIT { public void k8sResourceTask_whenRun_generatesK8sManifestWithService() throws IOException, ParseException { // When final BuildResult result = gradleRunner.withITProject("service") - .withArguments("k8sResource", "--stacktrace") + .withArguments("clean", "build", "k8sResource", "--stacktrace") .build(); // Then ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultKubernetesResourceFile(), @@ -40,14 +40,23 @@ public void k8sResourceTask_whenRun_generatesK8sManifestWithService() throws IOE .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/service-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/svc1-service.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/svc2-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test public void ocResourceTask_whenRun_generatesOpenShiftManifestWithServiceAndRoute() throws IOException, ParseException { // When final BuildResult result = gradleRunner.withITProject("service") - .withArguments("ocResource", "--stacktrace") + .withArguments("clean", "build", "ocResource", "--stacktrace") .build(); // Then ResourceVerify.verifyResourceDescriptors(gradleRunner.resolveDefaultOpenShiftResourceFile(), @@ -56,6 +65,16 @@ public void ocResourceTask_whenRun_generatesOpenShiftManifestWithServiceAndRoute .contains("Using resource templates from") .contains("Adding a default Deployment") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/service-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/svc1-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/svc1-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/svc2-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootIT.java index f1fb5ead79..ed805d884a 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootIT.java @@ -44,7 +44,16 @@ public void k8sResource_whenRun_generatesK8sManifests() throws IOException, Pars .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/spring-boot-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/spring-boot-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -64,6 +73,16 @@ public void ocResource_whenRun_generatesOpenShiftManifests() throws IOException, .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootWithFragmentIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootWithFragmentIT.java index 6597724c85..8eec28d098 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootWithFragmentIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/SpringBootWithFragmentIT.java @@ -42,7 +42,16 @@ public void k8sResource_whenRun_generatesK8sManifests() throws IOException, Pars .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/spring-boot-with-fragment-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/spring-boot-with-fragment-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -61,6 +70,16 @@ public void ocResource_whenRun_generatesOpenShiftManifests() throws IOException, .contains("jkube-healthcheck-spring-boot: Adding readiness probe on port 8080") .contains("jkube-healthcheck-spring-boot: Adding liveness probe on port 8080") .contains("jkube-service-discovery: Using first mentioned service port '8080' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : spring-boot") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-with-fragment-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-with-fragment-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/spring-boot-with-fragment-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/TriggersAnnotationIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/TriggersAnnotationIT.java index 940ac182f1..15f06045d5 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/TriggersAnnotationIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/TriggersAnnotationIT.java @@ -40,7 +40,14 @@ public void k8sResourceTask_whenRun_generatesK8sManifestWithTriggersAnnotation() .contains("Using resource templates from") .contains("Adding a default ReplicaSet") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/triggersannotation-replicaset.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -56,6 +63,13 @@ public void ocResourceTask_whenRun_generatesOpenShiftManifestWithTriggersAnnotat .contains("Using resource templates from") .contains("Adding a default ReplicaSet") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/triggersannotation-replicaset.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VertxIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VertxIT.java index c78b0bb5b4..70e720fe9e 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VertxIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VertxIT.java @@ -78,7 +78,16 @@ public void k8sResource_whenRun_generatesK8sManifestsWithProbes() throws IOExcep .contains("jkube-healthcheck-vertx: Adding readiness probe on port 8888") .contains("jkube-healthcheck-vertx: Adding liveness probe on port 8888") .contains("jkube-service-discovery: Using first mentioned service port '8888' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : vertx") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/vertx-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/vertx-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -102,6 +111,15 @@ public void ocResource_whenRun_generatesOpenShiftManifestsWithProbes() throws IO .contains("jkube-healthcheck-vertx: Adding readiness probe on port 8888") .contains("jkube-healthcheck-vertx: Adding liveness probe on port 8888") .contains("jkube-service-discovery: Using first mentioned service port '8888' ") - .contains("jkube-revision-history: Adding revision history limit to 2"); + .contains("jkube-revision-history: Adding revision history limit to 2") + .contains("SUMMARY") + .contains("Generator Name : vertx") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/vertx-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/vertx-service.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VolumePermissionIT.java b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VolumePermissionIT.java index 50594b166f..b4c81eca49 100644 --- a/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VolumePermissionIT.java +++ b/gradle-plugin/it/src/test/java/org/eclipse/jkube/gradle/plugin/tests/VolumePermissionIT.java @@ -64,7 +64,16 @@ public void k8sResourceTask_whenRun_generatesK8sManifestWithPersistentVolume() t assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-docker-registry-deployment.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-docker-registry-service.yml") + .contains("build/classes/java/main/META-INF/jkube/kubernetes/jkube-docker-registry-storage-persistentvolumeclaim.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/kubernetes.yml") + .contains("SUCCESS"); } @Test @@ -82,6 +91,16 @@ public void ocResourceTask_whenRun_generatesOpenShiftManifestWithPersistentVolum assertThat(result).extracting(BuildResult::getOutput).asString() .contains("Using resource templates from") .contains("Adding revision history limit to 2") - .contains("validating"); + .contains("validating") + .contains("SUMMARY") + .contains("Generated Resource Files:") + .contains("Individual :") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-docker-registry-deploymentconfig.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-docker-registry-route.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-docker-registry-service.yml") + .contains("build/classes/java/main/META-INF/jkube/openshift/jkube-docker-registry-storage-persistentvolumeclaim.yml") + .contains("Aggregate : ") + .contains("build/classes/java/main/META-INF/jkube/openshift.yml") + .contains("SUCCESS"); } } diff --git a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java index 504f075e8e..56d6c1e36c 100644 --- a/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java +++ b/gradle-plugin/kubernetes/src/main/java/org/eclipse/jkube/gradle/plugin/KubernetesExtension.java @@ -257,6 +257,8 @@ public abstract class KubernetesExtension { public abstract Property getWatchContainerNamePattern(); + public abstract Property getSummaryEnabled(); + public WatchMode watchMode; public JKubeBuildStrategy buildStrategy; @@ -698,6 +700,10 @@ public String getWatchShowLogsOrNull() { return getOrDefaultString("jkube.watch.showLogs", this::getWatchShowLogs, null); } + public boolean getSummaryEnabledOrDefault() { + return getOrDefaultBoolean("jkube.summaryEnabled", this::getSummaryEnabled, true); + } + protected boolean getOrDefaultBoolean(String property, Supplier> dslGetter, boolean defaultValue) { return getOrDefault(property, Boolean::parseBoolean, dslGetter, defaultValue); } 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 b6336b91f8..6e04b37374 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,6 +30,7 @@ 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.Summary; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.config.access.ClusterAccess; import org.eclipse.jkube.kit.config.access.ClusterConfiguration; @@ -72,6 +73,9 @@ public final void runTask() { return; } run(); + Summary.getInstance().setSuccessful(true); + Summary.getInstance().printSummary(kitLogger, kubernetesExtension.getSummaryEnabledOrDefault()); + Summary.clear(); } private void init() { diff --git a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java index d1339cba61..7e8f43c87c 100644 --- a/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java +++ b/gradle-plugin/kubernetes/src/test/java/org/eclipse/jkube/gradle/plugin/TestKubernetesExtension.java @@ -386,4 +386,9 @@ public Property getWatchShowLogs() { public Property getWatchContainerNamePattern() { return new DefaultProperty<>(String.class); } + + @Override + public Property getSummaryEnabled() { + return new DefaultProperty<>(Boolean.class); + } } diff --git a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java index 2ab7919cb7..a4d07f5df2 100644 --- a/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java +++ b/gradle-plugin/openshift/src/test/java/org/eclipse/jkube/gradle/plugin/TestOpenShiftExtension.java @@ -413,4 +413,9 @@ public Property getWatchShowLogs() { public Property getWatchContainerNamePattern() { return new DefaultProperty<>(String.class); } + + @Override + public Property getSummaryEnabled() { + return new DefaultProperty<>(Boolean.class); + } } 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 386cd3f492..d471bba1e3 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 @@ -39,6 +39,7 @@ import org.eclipse.jkube.kit.common.AssemblyMode; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver; import org.eclipse.jkube.kit.common.util.FileUtil; @@ -109,6 +110,7 @@ public File createDockerTarArchive( try { if (buildConfig.isDockerFileMode()) { + Summary.getInstance().setDockerFileUsed(buildConfig.getDockerFileFile().getAbsolutePath()); createDockerTarArchiveForDockerFile(buildConfig, assemblyConfig, configuration, buildDirs, log, archiveCustomizers); } else { createAssemblyArchive(assemblyConfig, configuration, buildDirs, buildConfig.getCompression(), layers); 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 9b5e12eec3..5eeccb833f 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,6 +30,7 @@ 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.Summary; 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; @@ -146,6 +147,7 @@ protected void buildImage(ImageConfiguration imageConfig, JKubeConfiguration par throw new IllegalStateException("Failure in building image, unable to find image built with name " + imageName); } log.info("%s: Built image %s", imageConfig.getDescription(), newImageId); + Summary.getInstance().setTargetImageName(new ImageName(imageConfig.getName()).getFullName() + "(" + newImageId + ")"); if (oldImageId != null && !oldImageId.equals(newImageId)) { try { 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 be24844edf..53d83b410a 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 @@ -14,12 +14,14 @@ package org.eclipse.jkube.kit.build.service.docker; import java.io.IOException; +import java.util.Optional; import org.eclipse.jkube.kit.build.api.auth.AuthConfig; import org.eclipse.jkube.kit.build.service.docker.access.CreateImageOptions; 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.Summary; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; @@ -56,16 +58,20 @@ public void pushImage(ImageConfiguration imageConfig, BuildConfiguration buildConfig = imageConfig.getBuildConfiguration(); String name = imageConfig.getName(); if (buildConfig != null) { + ImageName imageName = new ImageName(imageConfig.getName()); String configuredRegistry = EnvUtil.firstRegistryOf( - new ImageName(imageConfig.getName()).getRegistry(), + imageName.getRegistry(), imageConfig.getRegistry(), registryConfig.getRegistry()); + Summary.getInstance().setPushRegistry(Optional.ofNullable(configuredRegistry).orElse("docker.io")); AuthConfig authConfig = createAuthConfig(true, new ImageName(name).getUser(), configuredRegistry, registryConfig); long start = System.currentTimeMillis(); docker.pushImage(name, authConfig, configuredRegistry, retries); + Summary.getInstance().setPushRegistryUser(imageName.getUser()); + Summary.getInstance().setPushedImage(imageName.getFullName(configuredRegistry)); log.info("Pushed %s in %s", name, EnvUtil.formatDurationTill(start)); if (!skipTag) { 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 1e666d77ee..99c085f569 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,6 +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.Summary; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.config.image.ImageName; import org.eclipse.jkube.kit.config.image.build.Arguments; @@ -129,6 +130,9 @@ public static String getFullImageName(ImageConfiguration imageConfiguration, Str } else { imageName = new ImageName(imageConfiguration.getName()); } + Summary.getInstance().setPushRegistry(Optional.ofNullable(imageName.getRegistry()).orElse("docker.io")); + Summary.getInstance().setPushRegistryUser(imageName.getUser()); + Summary.getInstance().setPushedImage(imageName.getFullName()); return imageName.getFullName(); } diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/Summary.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/Summary.java new file mode 100644 index 0000000000..592a07c4c1 --- /dev/null +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/Summary.java @@ -0,0 +1,222 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.jkube.kit.common; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.ArrayList; +import java.util.List; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class Summary { + private static final String DASHED_LINE = "-------------------------------"; + private static Summary summaryInstance; + @Setter + private String buildStrategy; + @Setter + private String packagedFileLocation; + @Setter + private String generatorName; + @Setter + private String dockerFileUsed; + @Setter + private String targetImageName; + @Setter + private boolean successful; + @Setter + private String failureCause; + @Setter + private String aggregateResourceFile; + @Setter + private String targetClusterUrl; + @Setter + private String pushRegistry; + @Setter + private String pushRegistryUser; + @Setter + private String pushedImage; + @Setter + private String helmChartName; + @Setter + private String helmChartCompressedLocation; + @Setter + private String helmChartLocation; + @Setter + private String helmRepository; + private boolean printed; + private List generatedResourceFiles; + private List createdKubernetesResources; + private List updatedKubernetesResources; + private List deletedKubernetesResources; + + public static Summary getInstance() { + if (summaryInstance == null) { + summaryInstance = new Summary(); + summaryInstance.printed = false; + } + return summaryInstance; + } + + public void addGeneratedResourceFile(String resourceFilePath) { + if (this.generatedResourceFiles == null) { + this.generatedResourceFiles = new ArrayList<>(); + } + this.generatedResourceFiles.add(resourceFilePath); + } + + public void addCreatedKubernetesResource(String kubernetesResource) { + if (this.createdKubernetesResources == null) { + this.createdKubernetesResources = new ArrayList<>(); + } + this.createdKubernetesResources.add(kubernetesResource); + } + + public void addDeletedKubernetesResource(String kubernetesResource) { + if (this.deletedKubernetesResources == null) { + this.deletedKubernetesResources = new ArrayList<>(); + } + this.deletedKubernetesResources.add(kubernetesResource); + } + + public void addUpdatedKubernetesResource(String kubernetesResource) { + if (this.updatedKubernetesResources == null) { + this.updatedKubernetesResources = new ArrayList<>(); + } + this.updatedKubernetesResources.add(kubernetesResource); + } + + public synchronized void printSummary(KitLogger logger, boolean summaryEnabled) { + if (summaryInstance != null && summaryEnabled && !printed) { + printBanner(logger); + printBuildSummary(logger); + printResourceSummary(logger); + printApplySummary(logger); + printUndeploySummary(logger); + printPushSummary(logger); + printHelmSummary(logger); + printHelmPushSummary(logger); + if (successful) { + logSummary(logger, "SUCCESS"); + } else { + logSummary(logger, "FAILURE"); + logSummary(logger, "Failure cause : " + failureCause); + } + logSummary(logger, DASHED_LINE); + printed = true; + } + } + + public static void clear() { + summaryInstance = null; + } + + private void printBanner(KitLogger logger) { + logSummary(logger, DASHED_LINE); + logSummary(logger, " SUMMARY"); + logSummary(logger, DASHED_LINE); + logSummary(logger, " __ / / //_/ / / / _ )/ __/"); + logSummary(logger, "/ // / ,< / /_/ / _ / _/ "); + logSummary(logger, "\\___/_/|_|\\____/____/___/ \n"); + } + + private void printBuildSummary(KitLogger logger) { + if (buildStrategy != null) { + logSummary(logger, "Build Strategy : " + buildStrategy); + } + if (packagedFileLocation != null) { + logSummary(logger, "Packaged File Location : " + packagedFileLocation); + } + if (generatorName != null) { + logSummary(logger, "Generator Name : " + generatorName); + } + if (dockerFileUsed != null) { + logSummary(logger, "Dockerfile used : " + dockerFileUsed); + } + if (targetImageName != null) { + logSummary(logger, "Target Image Name : " + targetImageName); + } + } + + private void printResourceSummary(KitLogger logger) { + if (generatedResourceFiles != null && !generatedResourceFiles.isEmpty()) { + logSummary(logger, "Generated Resource Files:\n"); + logList(logger, "Individual :\n", generatedResourceFiles); + } + if (aggregateResourceFile != null) { + logSummary(logger, "\n"); + logSummary(logger, "Aggregate : " + aggregateResourceFile); + } + } + + private void printApplySummary(KitLogger logger) { + if (targetClusterUrl != null) { + logSummary(logger, "Cluster URL : " + targetClusterUrl); + } + if (createdKubernetesResources != null && !createdKubernetesResources.isEmpty()) { + logList(logger, "Created Resources: \n", createdKubernetesResources); + } + if (updatedKubernetesResources != null && !updatedKubernetesResources.isEmpty()) { + logList(logger, "Updated Resources: \n", updatedKubernetesResources); + } + } + + private void printUndeploySummary(KitLogger logger) { + if (deletedKubernetesResources != null && !deletedKubernetesResources.isEmpty()) { + logList(logger, "Deleted Resources: \n", deletedKubernetesResources); + } + } + + private void printPushSummary(KitLogger logger) { + if (pushRegistry!= null) { + logSummary(logger, "Pushed to Image Registry: " + pushRegistry); + } + if (pushRegistryUser != null) { + logSummary(logger, "Username : " + pushRegistryUser); + } + if (pushedImage != null) { + logSummary(logger, "Pushed Image URL : " + pushedImage); + } + } + + private void printHelmSummary(KitLogger logger) { + if (helmChartName != null) { + logSummary(logger, "Helm Chart Name : " + helmChartName); + } + if (helmChartCompressedLocation != null) { + logSummary(logger, "Helm Chart (Compressed) : " + helmChartCompressedLocation); + } + if (helmChartLocation != null) { + logSummary(logger, "Helm Chart Directory : " + helmChartLocation); + } + } + + private void printHelmPushSummary(KitLogger logger) { + if (helmRepository != null) { + logSummary(logger, "Helm Repository : " + helmRepository); + } + } + + private void logList(KitLogger logger, String title, List list) { + logSummary(logger, title); + for (String item : list) { + logSummary(logger, " - " + item); + } + } + + private void logSummary(KitLogger logger, String message) { + logger.info("[[C]] " + message + " [[C]]"); + } +} diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java index cc8a3e2c1a..ea5d435aa2 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/KubernetesHelper.java @@ -742,6 +742,20 @@ public static String getFullyQualifiedApiGroupWithKind(HasMetadata item) { "#" + item.getKind(); } + public static String getFullyQualifiedName(HasMetadata h, String namespace) { + StringBuilder sb = new StringBuilder(); + sb.append(h.getApiVersion()) + .append(" ") + .append(h.getKind()) + .append(" "); + + if (namespace != null) { + sb.append(namespace).append("/"); + } + sb.append(h.getMetadata().getName()); + return sb.toString(); + } + public static String getNewestApplicationPodName(KubernetesClient client, String namespace, Collection resources) { LabelSelector selector = extractPodLabelSelector(resources); final PodList pods; diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryTest.java new file mode 100644 index 0000000000..752e11b7af --- /dev/null +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/SummaryTest.java @@ -0,0 +1,174 @@ +/** + * Copyright (c) 2019 Red Hat, Inc. + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at: + * + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.jkube.kit.common; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +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 SummaryTest { + private KitLogger logger; + + @BeforeEach + public void setUp() { + logger = spy(new KitLogger.SilentLogger()); + Summary.clear(); + } + + @Test + void getInstance_whenCalled_shouldAlwaysInitializeObject() { + // Given + When + Summary summary = Summary.getInstance(); + + // Then + assertThat(summary).isNotNull(); + } + + @Test + void printSummary_whenInvoked_shouldPrintSummary() { + // Given + Summary summary = Summary.getInstance(); + initializeSummary(summary); + + // When + summary.printSummary(logger, true); + + // Then + verifySummaryPrintedOnce(); + } + + @Test + void printSummary_whenInvokedMultileTimes_shouldPrintSummaryOnlyOnce() { + // Given + Summary summary = Summary.getInstance(); + initializeSummary(summary); + + // When + summary.printSummary(logger, true); + summary.printSummary(logger, true); + summary.printSummary(logger, true); + summary.printSummary(logger, true); + + // Then + verifySummaryPrintedOnce(); + } + + @Test + void printSummary_whenFailure_shouldPrintFailureAndCause() { + // Given + Summary summary = Summary.getInstance(); + summary.setSuccessful(false); + summary.setFailureCause("failure in pulling image"); + + // When + summary.printSummary(logger, true); + + // Then + verify(logger).info("[[C]] FAILURE [[C]]"); + verify(logger).info("[[C]] Failure cause : failure in pulling image [[C]]"); + } + + @Test + void printSummary_whenSummaryEnabledFalse_shouldNotPrintAnything() { + // Given + Summary summary = Summary.getInstance(); + + // When + summary.printSummary(logger, false); + + // Then + verify(logger, times(0)).info(anyString()); + } + + private void initializeSummary(Summary summary) { + summary.setBuildStrategy("Docker"); + summary.setPackagedFileLocation("/tmp/foo.jar"); + summary.setGeneratorName("java-exec"); + summary.setDockerFileUsed(null); + summary.setTargetImageName("quay.io/example/test:latest"); + summary.setPushRegistry("quay.io"); + summary.setPushRegistryUser("example"); + summary.setPushedImage("quay.io/example/test:latest"); + summary.addGeneratedResourceFile("/tmp/target/classes/META-INF/jkube/kubernetes/test-deployment.yml"); + summary.addGeneratedResourceFile("/tmp/target/classes/META-INF/jkube/kubernetes/test-service.yml"); + summary.setAggregateResourceFile("/tmp/target/classes/META-INF/jkube/kubernetes.yml"); + summary.addCreatedKubernetesResource("apps/v1 Deployment test-ns/test"); + summary.addCreatedKubernetesResource("v1 Service test-ns/test"); + summary.addUpdatedKubernetesResource("v1 Service test-ns/test"); + summary.setHelmChartName("test"); + summary.setHelmChartCompressedLocation("/tmp/target/test.tar.gz"); + summary.setHelmChartLocation("/tmp/target/jkube/helm/test/kubernetes"); + summary.setHelmRepository("localhost:8001/api/charts"); + summary.addDeletedKubernetesResource("apps/v1 Deployment test-ns/test"); + summary.addCreatedKubernetesResource("v1 Service test-ns/test"); + summary.setTargetClusterUrl("https://192.168.39.75:8443/"); + summary.setSuccessful(true); + } + + private void verifySummaryPrintedOnce() { + verifySummaryBannerPrinted(); + verifyBuildAndPushSummaryPrinted(); + verifyResourceSummaryPrinted(); + verifyHelmSummaryPrinted(); + verifyApplyUndeploySummaryPrinted(); + verify(logger).info("[[C]] SUCCESS [[C]]"); + } + + private void verifySummaryBannerPrinted() { + verify(logger, times(3)).info("[[C]] ------------------------------- [[C]]"); + verify(logger).info("[[C]] SUMMARY [[C]]"); + verify(logger).info("[[C]] __ / / //_/ / / / _ )/ __/ [[C]]"); + verify(logger).info("[[C]] / // / ,< / /_/ / _ / _/ [[C]]"); + verify(logger).info("[[C]] \\___/_/|_|\\____/____/___/ \n [[C]]"); + } + + private void verifyBuildAndPushSummaryPrinted() { + verify(logger).info("[[C]] Build Strategy : Docker [[C]]"); + verify(logger).info("[[C]] Packaged File Location : /tmp/foo.jar [[C]]"); + verify(logger).info("[[C]] Generator Name : java-exec [[C]]"); + verify(logger).info("[[C]] Target Image Name : quay.io/example/test:latest [[C]]"); + verify(logger).info("[[C]] Pushed to Image Registry: quay.io [[C]]"); + verify(logger).info("[[C]] Username : example [[C]]"); + verify(logger).info("[[C]] Pushed Image URL : quay.io/example/test:latest [[C]]"); + } + + private void verifyResourceSummaryPrinted() { + verify(logger).info("[[C]] Generated Resource Files:\n [[C]]"); + verify(logger).info("[[C]] Individual :\n [[C]]"); + verify(logger).info("[[C]] - /tmp/target/classes/META-INF/jkube/kubernetes/test-deployment.yml [[C]]"); + verify(logger).info("[[C]] - /tmp/target/classes/META-INF/jkube/kubernetes/test-service.yml [[C]]"); + verify(logger).info("[[C]] Aggregate : /tmp/target/classes/META-INF/jkube/kubernetes.yml [[C]]"); + } + + private void verifyHelmSummaryPrinted() { + verify(logger).info("[[C]] Helm Chart Name : test [[C]]"); + verify(logger).info("[[C]] Helm Chart (Compressed) : /tmp/target/test.tar.gz [[C]]"); + verify(logger).info("[[C]] Helm Chart Directory : /tmp/target/jkube/helm/test/kubernetes [[C]]"); + verify(logger).info("[[C]] Helm Repository : localhost:8001/api/charts [[C]]"); + } + + private void verifyApplyUndeploySummaryPrinted() { + verify(logger).info("[[C]] Cluster URL : https://192.168.39.75:8443/ [[C]]"); + verify(logger).info("[[C]] Created Resources: \n [[C]]"); + verify(logger).info("[[C]] Deleted Resources: \n [[C]]"); + verify(logger).info("[[C]] Updated Resources: \n [[C]]"); + verify(logger, times(2)).info("[[C]] - apps/v1 Deployment test-ns/test [[C]]"); + verify(logger, times(3)).info("[[C]] - v1 Service test-ns/test [[C]]"); + } +} diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java index e94a5580b2..b99819d414 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/KubernetesHelperTest.java @@ -24,6 +24,10 @@ import java.util.Map; import java.util.Set; +import io.fabric8.kubernetes.api.model.rbac.ClusterRole; +import io.fabric8.kubernetes.api.model.rbac.ClusterRoleBuilder; +import io.fabric8.openshift.api.model.Route; +import io.fabric8.openshift.api.model.RouteBuilder; import org.eclipse.jkube.kit.common.KitLogger; import io.fabric8.kubernetes.api.model.ConfigMapBuilder; @@ -351,6 +355,34 @@ void testGetFullyQualifiedApiGroupWithKind() { assertThat(result2).isEqualTo("networking.istio.io/v1alpha3#Gateway"); } + @Test + void getFullyQualifiedName_whenInvokedWithValidNamespacedAndResource_shouldReturnNameWithApiVersionKindNamespaceName() { + // Given + Route route = new RouteBuilder() + .withNewMetadata().withName("r1").endMetadata() + .build(); + + // When + String result = KubernetesHelper.getFullyQualifiedName(route, "ns1"); + + // Then + assertThat(result).isEqualTo("route.openshift.io/v1 Route ns1/r1"); + } + + @Test + void getFullyQualifiedName_whenInvokedWithNullNamespacedAndResource_shouldReturnNameWithApiVersionKindNamespaceName() { + // Given + ClusterRole clusterRole = new ClusterRoleBuilder() + .withNewMetadata().withName("r1").endMetadata() + .build(); + + // When + String result = KubernetesHelper.getFullyQualifiedName(clusterRole, null); + + // Then + assertThat(result).isEqualTo("rbac.authorization.k8s.io/v1 ClusterRole r1"); + } + @Test void testContainsPort() { // Given 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 d955d9e2c2..5ddcc1feb2 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 @@ -32,6 +32,7 @@ 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.Summary; import org.eclipse.jkube.kit.common.util.FileUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; @@ -88,6 +89,7 @@ import static org.eclipse.jkube.kit.common.util.KubernetesHelper.getName; import static org.eclipse.jkube.kit.common.util.KubernetesHelper.getOrCreateLabels; import static org.eclipse.jkube.kit.common.util.KubernetesHelper.getOrCreateMetadata; +import static org.eclipse.jkube.kit.common.util.KubernetesHelper.getFullyQualifiedName; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.applicableNamespace; /** @@ -241,6 +243,7 @@ public void applyGenericKubernetesResource(GenericKubernetesResource genericKube } kubernetesClient.genericKubernetesResources(genericKubernetesResource.getApiVersion(), genericKubernetesResource.getKind()).inNamespace(applyNamespace).withName(name) .createOrReplace(genericKubernetesResource); + addToCreatedResourcesSummary(genericKubernetesResource, applyNamespace); log.info("Created Custom Resource: %s %s/%s", apiGroupWithKind, applyNamespace, name); } @@ -268,6 +271,7 @@ public void applyOAuthClient(OAuthClient entity, String sourceName) { } else { try { Object answer = openShiftClient.oAuthClients().withName(id).replace(entity); + addToUpdatedResourcesSummary(entity, null); log.info("Updated OAuthClient result: %s", answer); } catch (Exception e) { onApplyError("Failed to update OAuthClient from " + sourceName + ". " + e + ". " + entity, e); @@ -289,6 +293,7 @@ protected void doCreateOAuthClient(OAuthClient entity, String sourceName) { if (openShiftClient != null) { try { openShiftClient.oAuthClients().create(entity); + addToCreatedResourcesSummary(entity, null); } catch (Exception e) { onApplyError("Failed to create OAuthClient from " + sourceName + ". " + e + ". " + entity, e); } @@ -331,6 +336,7 @@ public void installTemplate(Template entity, String sourceName) { log.info("Updating a Template from %s", sourceName); try { Object answer = openShiftClient.templates().inNamespace(currentNamespace).withName(id).replace(entity); + addToUpdatedResourcesSummary(entity, currentNamespace); log.info("Updated Template: " + answer); } catch (Exception e) { onApplyError("Failed to update Template from " + sourceName + ". " + e + ". " + entity, e); @@ -358,6 +364,7 @@ protected void doCreateTemplate(Template entity, String namespace, String source try { final Template answer = openShiftClient.templates().inNamespace(namespace).create(entity); logGeneratedEntity("Created Template: ", namespace, entity, answer); + addToCreatedResourcesSummary(answer, namespace); } catch (Exception e) { onApplyError("Failed to Template entity from " + sourceName + ". " + e + ". " + entity, e); } @@ -387,6 +394,7 @@ public void applyServiceAccount(ServiceAccount serviceAccount, String sourceName log.info("Updating a ServiceAccount from " + sourceName); try { Object answer = kubernetesClient.serviceAccounts().inNamespace(currentNamespace).withName(id).replace(serviceAccount); + addToUpdatedResourcesSummary(serviceAccount, currentNamespace); logGeneratedEntity("Updated ServiceAccount: ", currentNamespace, serviceAccount, answer); } catch (Exception e) { onApplyError("Failed to update ServiceAccount from " + sourceName + ". " + e + ". " + serviceAccount, e); @@ -407,6 +415,7 @@ protected void doCreateServiceAccount(ServiceAccount serviceAccount, String name (serviceAccount)); try { Object answer = kubernetesClient.serviceAccounts().inNamespace(namespace).create(serviceAccount); + addToCreatedResourcesSummary(serviceAccount, namespace); logGeneratedEntity("Created ServiceAccount: ", namespace, serviceAccount, answer); } catch (Exception e) { onApplyError("Failed to create ServiceAccount from " + sourceName + ". " + e + ". " + serviceAccount, e); @@ -485,6 +494,7 @@ private void doCreateCustomResourceDefinition(CustomResourceDefinition entity, S log.info("Creating a Custom Resource Definition from " + sourceName + " name " + getName(entity)); try { CustomResourceDefinition answer = kubernetesClient.apiextensions().v1().customResourceDefinitions().create(entity); + addToCreatedResourcesSummary(answer, null); log.info("Created Custom Resource Definition result: %s", answer.getMetadata().getName()); } catch (Exception e) { onApplyError("Failed to create Custom Resource Definition from " + sourceName + ". " + e + ". " + entity, e); @@ -502,6 +512,7 @@ protected void doCreatePersistentVolumeClaim(PersistentVolumeClaim entity, Strin try { Object answer; answer = kubernetesClient.persistentVolumeClaims().inNamespace(namespace).create(entity); + addToCreatedResourcesSummary(entity, namespace); logGeneratedEntity("Created PersistentVolumeClaim: ", namespace, entity, answer); } catch (Exception e) { onApplyError("Failed to create PersistentVolumeClaim from " + sourceName + ". " + e + ". " + entity, e); @@ -545,6 +556,7 @@ protected void doCreateSecret(Secret secret, String namespace, String sourceName try { Object answer = kubernetesClient.secrets().inNamespace(namespace).create(secret); logGeneratedEntity("Created Secret: ", namespace, secret, answer); + addToCreatedResourcesSummary(secret, namespace); } catch (Exception e) { onApplyError("Failed to create Secret from " + sourceName + ". " + e + ". " + secret, e); } @@ -659,6 +671,7 @@ private void doCreateRoute(Route entity, String namespace, String sourceName) { "host: " + entity.getSpec().getHost() : "No Spec !")); openShiftClient.routes().inNamespace(namespace).create(entity); + addToCreatedResourcesSummary(entity, namespace); } catch (Exception e) { onApplyError("Failed to create Route from " + sourceName + ". " + e + ". " + entity, e); } @@ -700,6 +713,7 @@ public void doCreateBuildConfig(BuildConfig entity, String namespace , String so if (openShiftClient != null) { try { openShiftClient.buildConfigs().inNamespace(namespace).create(entity); + addToCreatedResourcesSummary(entity, namespace); } catch (Exception e) { onApplyError("Failed to create BuildConfig from " + sourceName + ". " + e, e); } @@ -729,6 +743,7 @@ public void applyRoleBinding(RoleBinding entity, String sourceName) { metadata.setNamespace(currentNamespace); metadata.setResourceVersion(resourceVersion); Object answer = kubernetesClient.rbac().roleBindings().inNamespace(currentNamespace).withName(id).replace(entity); + addToUpdatedResourcesSummary(entity, currentNamespace); logGeneratedEntity("Updated RoleBinding: ", currentNamespace, entity, answer); } catch (Exception e) { onApplyError("Failed to update RoleBinding from " + sourceName + ". " + e + ". " + entity, e); @@ -748,6 +763,7 @@ public void doCreateRoleBinding(RoleBinding entity, String namespace , String so try { log.info("Creating RoleBinding from " + sourceName + " namespace " + namespace + " name " + getName(entity)); kubernetesClient.rbac().roleBindings().inNamespace(namespace).create(entity); + addToCreatedResourcesSummary(entity, namespace); } catch (Exception e) { onApplyError("Failed to create RoleBinding from " + sourceName + ". " + e, e); } @@ -765,8 +781,10 @@ public void applyImageStream(ImageStream entity, String sourceName) { if (old == null) { log.info("Creating " + kind + " " + name + " from " + sourceName); resource.create(entity); + addToCreatedResourcesSummary(entity, currentNamespace); } else { log.info("Updating " + kind + " " + name + " from " + sourceName); + addToUpdatedResourcesSummary(entity, currentNamespace); copyAllImageStreamTags(entity, old); entity = patchService.compareAndPatchEntity(currentNamespace, entity, old); openShiftClient.resource(entity).inNamespace(currentNamespace).createOrReplace(); @@ -883,6 +901,7 @@ public void applyResource(T resource, String sourceNam log.info("Updating " + kind + " from " + sourceName); try { Object answer = resources.inNamespace(currentNamespace).withName(id).replace(resource); + addToUpdatedResourcesSummary(resource, currentNamespace); logGeneratedEntity("Updated " + kind + ": ", currentNamespace, resource, answer); } catch (Exception e) { onApplyError("Failed to update " + kind + " from " + sourceName + ". " + e + ". " + resource, e); @@ -903,6 +922,7 @@ protected void doCreateResource(T resource, String na log.info("Creating a " + kind + " from " + sourceName + " namespace " + namespace + " name " + getName(resource)); try { Object answer = resources.inNamespace(namespace).create(resource); + addToCreatedResourcesSummary(resource, namespace); logGeneratedEntity("Created " + kind + ": ", namespace, resource, answer); } catch (Exception e) { onApplyError("Failed to create " + kind + " from " + sourceName + ". " + e + ". " + resource, e); @@ -914,6 +934,7 @@ private void doPatchEntity(T oldEntity, T newEntity, Str log.info("Updating %s from %s", kind, sourceName); try { Object answer = patchService.compareAndPatchEntity(namespace, newEntity, oldEntity); + addToUpdatedResourcesSummary(newEntity, namespace); logGeneratedEntity("Updated " + kind + ": ", namespace, newEntity, answer); } catch (Exception e) { onApplyError("Failed to update " + kind + " from " + sourceName + ". " + e + ". " + newEntity, e); @@ -924,6 +945,7 @@ protected void doCreateService(Service service, String namespace, String sourceN log.info("Creating a Service from " + sourceName + " namespace " + namespace + " name " + getName(service)); try { Object answer = kubernetesClient.services().inNamespace(namespace).create(service); + addToCreatedResourcesSummary(service, namespace); logGeneratedEntity("Created Service: ", namespace, service, answer); } catch (Exception e) { onApplyError("Failed to create Service from " + sourceName + ". " + e + ". " + service, e); @@ -1097,6 +1119,7 @@ public void applyReplicationController(ReplicationController replicationControll log.info("Updating ReplicationController from " + sourceName + " namespace " + currentNamespace + " name " + getName(replicationController)); try { Object answer = patchService.compareAndPatchEntity(currentNamespace, replicationController, old); + addToUpdatedResourcesSummary(replicationController, currentNamespace); logGeneratedEntity("Updated replicationController: ", currentNamespace, replicationController, answer); if (deletePodsOnReplicationControllerUpdate) { @@ -1184,6 +1207,7 @@ protected void applyJob(Job job, String sourceName) { if(exception.getStatus().getCode().equals(HttpURLConnection.HTTP_CONFLICT)) { Job old = kubernetesClient.batch().v1().jobs().inNamespace(currentNamespace).withName(id).get(); Job updatedJob = patchService.compareAndPatchEntity(currentNamespace, job, old); + addToUpdatedResourcesSummary(updatedJob, currentNamespace); log.info("Updated Job: " + updatedJob.getMetadata().getName()); return; } @@ -1379,6 +1403,13 @@ private void applyStandardEntities(String fileName, List entities) } } + private void addToCreatedResourcesSummary(HasMetadata h, String applicableNamespace) { + Summary.getInstance().addCreatedKubernetesResource(getFullyQualifiedName(h, applicableNamespace)); + } + + private void addToUpdatedResourcesSummary(HasMetadata h, String applicableNamespace) { + Summary.getInstance().addUpdatedKubernetesResource(getFullyQualifiedName(h, applicableNamespace)); + } public static List getK8sListWithNamespaceFirst(Collection k8sList) { return k8sList.stream().sorted(new HasMetadataComparator()).sorted((k1, k2) -> { if (isNamespaceOrProject(k1)) { 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 183962cb45..d844c5130b 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,6 +18,7 @@ import org.eclipse.jkube.kit.build.service.docker.DockerServiceHub; import org.eclipse.jkube.kit.common.JKubeConfiguration; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.RegistryConfig; import org.eclipse.jkube.kit.config.resource.RuntimeMode; @@ -50,7 +51,11 @@ public DockerBuildService(JKubeServiceHub jKubeServiceHub) { @Override public boolean isApplicable() { - return runtimeMode == RuntimeMode.KUBERNETES; + if (runtimeMode == RuntimeMode.KUBERNETES) { + Summary.getInstance().setBuildStrategy("Docker"); + return true; + } + return false; } @Override 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 905754028e..cebd4ad9d8 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 @@ -24,6 +24,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.Summary; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; @@ -70,7 +71,11 @@ public JibBuildService(JKubeServiceHub jKubeServiceHub) { @Override public boolean isApplicable() { - return buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib; + if (buildServiceConfig.getJKubeBuildStrategy() == JKubeBuildStrategy.jib) { + Summary.getInstance().setBuildStrategy("JIB"); + return true; + } + return false; } @Override @@ -99,6 +104,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService File dockerTarArchive = getAssemblyTarArchive(imageConfig, configuration, log); JibServiceUtil.buildContainer(containerBuilder, TarImage.at(dockerTarArchive.toPath()).named(imageConfig.getName()), log); + Summary.getInstance().setTargetImageName(new ImageName(imageConfig.getName()).getFullName()); log.info(" %s successfully built", dockerTarArchive.getAbsolutePath()); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); 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 5db4ed8f85..2b3946491e 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 @@ -26,6 +26,7 @@ import io.fabric8.kubernetes.api.model.GenericKubernetesResource; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.config.resource.ResourceConfig; import org.eclipse.jkube.kit.config.service.JKubeServiceHub; @@ -34,6 +35,7 @@ import io.fabric8.kubernetes.api.model.DeletionPropagation; import io.fabric8.kubernetes.api.model.HasMetadata; +import static org.eclipse.jkube.kit.common.util.KubernetesHelper.getFullyQualifiedName; import static org.eclipse.jkube.kit.common.util.KubernetesHelper.loadResources; import static org.eclipse.jkube.kit.config.service.ApplyService.getK8sListWithNamespaceFirst; import static org.eclipse.jkube.kit.config.service.kubernetes.KubernetesClientUtil.applicableNamespace; @@ -63,6 +65,7 @@ public void undeploy(List resourceDirs, ResourceConfig resourceConfig, Fil logger.warn("No such generated manifests found for this project, ignoring."); return; } + Summary.getInstance().setTargetClusterUrl(jKubeServiceHub.getClient().getMasterUrl().toString()); List undeployEntities = getK8sListWithNamespaceFirst(entities); Collections.reverse(undeployEntities); undeployCustomResources(resourceConfig.getNamespace(), fallbackNamespace, undeployEntities); @@ -87,6 +90,7 @@ protected Consumer resourceDeleter(String namespace, String fallbac .inNamespace(undeployNamespace) .withPropagationPolicy(DeletionPropagation.BACKGROUND) .delete(); + Summary.getInstance().addDeletedKubernetesResource(getFullyQualifiedName(resource, undeployNamespace)); }; } @@ -111,6 +115,7 @@ private void deleteCustomResource(GenericKubernetesResource customResource, Stri try { logger.info("Deleting Custom Resource %s %s", apiVersionAndKind, name); jKubeServiceHub.getClient().genericKubernetesResources(apiVersion, kind).inNamespace(namespace).withName(name).delete(); + Summary.getInstance().addDeletedKubernetesResource(getFullyQualifiedName(customResource, namespace)); } catch (Exception exception) { logger.error("Unable to undeploy %s %s/%s", apiVersionAndKind, namespace, name); } 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 af06afe7a2..4f252af393 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 @@ -31,6 +31,7 @@ import org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; @@ -122,7 +123,11 @@ public OpenshiftBuildService(JKubeServiceHub jKubeServiceHub) { @Override public boolean isApplicable() { - return jKubeServiceHub.getRuntimeMode() == RuntimeMode.OPENSHIFT; + if (jKubeServiceHub.getRuntimeMode() == RuntimeMode.OPENSHIFT) { + Summary.getInstance().setBuildStrategy("OpenShift S2I"); + return true; + } + return false; } @Override @@ -153,6 +158,7 @@ public void buildSingleImage(ImageConfiguration imageConfig) throws JKubeService // Create a file with generated image streams addImageStreamToFile(getImageStreamFile(), imageName, client); + Summary.getInstance().setTargetImageName("ImageStreamTag " + resolveImageStreamTagName(imageName)); createAdditionalTags(imageConfig, imageName); } else { @@ -440,6 +446,7 @@ private void applyResourceObjects(BuildServiceConfig config, OpenShiftClient cli if (builder.hasItems()) { KubernetesList k8sList = builder.build(); + k8sList.getItems().forEach(i -> Summary.getInstance().addCreatedKubernetesResource(KubernetesHelper.getFullyQualifiedName(i, applicableOpenShiftNamespace))); client.resourceList(k8sList).inNamespace(applicableOpenShiftNamespace).create(); } } diff --git a/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc b/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc new file mode 100644 index 0000000000..5b35dab275 --- /dev/null +++ b/jkube-kit/doc/src/main/asciidoc/inc/_summary.adoc @@ -0,0 +1,15 @@ +[[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. + +.Summary configuration +[cols="2,6"] +|=== +| Property | Description + +| `jkube.summaryEnabled` +| Whether summary should be printed or not. + +Defaults to `true` +|=== 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 71db8b9f68..d741f3f5d5 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,6 +16,7 @@ import java.util.List; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.ClassUtil; import org.eclipse.jkube.kit.common.util.PluginServiceFactory; import org.eclipse.jkube.kit.config.image.ImageConfiguration; @@ -53,6 +54,7 @@ public static List generate(List imageCo log.verbose(" - %s", generator.getName()); if (generator.isApplicable(ret)) { log.info("Running generator %s", generator.getName()); + Summary.getInstance().setGeneratorName(generator.getName()); ret = generator.customize(ret, prePackagePhase); } } diff --git a/jkube-kit/generator/java-exec/src/main/java/org/eclipse/jkube/generator/javaexec/JavaExecGenerator.java b/jkube-kit/generator/java-exec/src/main/java/org/eclipse/jkube/generator/javaexec/JavaExecGenerator.java index 9f6f68b443..12aa702f16 100644 --- a/jkube-kit/generator/java-exec/src/main/java/org/eclipse/jkube/generator/javaexec/JavaExecGenerator.java +++ b/jkube-kit/generator/java-exec/src/main/java/org/eclipse/jkube/generator/javaexec/JavaExecGenerator.java @@ -23,6 +23,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.AssemblyConfiguration; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.config.image.build.Arguments; import org.eclipse.jkube.kit.config.image.build.BuildConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; @@ -36,6 +37,7 @@ import org.eclipse.jkube.generator.api.support.BaseGenerator; import org.apache.commons.lang3.StringUtils; +import static org.eclipse.jkube.kit.common.util.FileUtil.getRelativeFilePath; import static org.eclipse.jkube.kit.common.util.FileUtil.getRelativePath; /** @@ -222,6 +224,7 @@ protected List addAdditionalFiles() { private static AssemblyFileSet getOutputDirectoryFileSet(FatJarDetector.Result fatJar, JavaProject project) { final File buildDirectory = project.getBuildPackageDirectory(); + Summary.getInstance().setPackagedFileLocation(getRelativePath(buildDirectory, fatJar.getArchiveFile()).getAbsolutePath()); return AssemblyFileSet.builder() .directory(getRelativePath(project.getBaseDirectory(), buildDirectory)) .include(getRelativePath(buildDirectory, fatJar.getArchiveFile()).getPath()) diff --git a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/generator/QuarkusAssemblies.java b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/generator/QuarkusAssemblies.java index 6545fb04e2..1a78e4ad9e 100644 --- a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/generator/QuarkusAssemblies.java +++ b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/generator/QuarkusAssemblies.java @@ -20,6 +20,7 @@ import org.eclipse.jkube.kit.common.AssemblyConfiguration; import org.eclipse.jkube.kit.common.AssemblyFileSet; import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.FileUtil; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; @@ -32,6 +33,7 @@ public class QuarkusAssemblies { public static final QuarkusAssembly NATIVE = quarkusGenerator -> { final JavaProject project = quarkusGenerator.getContext().getProject(); final Properties quarkusConfiguration = getQuarkusConfiguration(project); + Summary.getInstance().setPackagedFileLocation(findSingleFileThatEndsWith(project, runnerSuffix(quarkusConfiguration))); final AssemblyFileSet artifactFileSet = createFileSet(project) .directory(FileUtil.getRelativePath(project.getBaseDirectory(), project.getBuildDirectory())) .include(findSingleFileThatEndsWith(project, runnerSuffix(quarkusConfiguration))) @@ -52,6 +54,7 @@ public class QuarkusAssemblies { .directory(FileUtil.getRelativePath(project.getBaseDirectory(), quarkusAppDirectory)) .include("lib") .fileMode("0640"); + Summary.getInstance().setPackagedFileLocation(FileUtil.getRelativePath(project.getBaseDirectory(), quarkusAppDirectory).getPath() + File.separator + "quarkus-run.jar"); AssemblyFileSet.AssemblyFileSetBuilder fastJarFileSet = createFileSet(project) .directory(FileUtil.getRelativePath(project.getBaseDirectory(), quarkusAppDirectory)) .include("quarkus-run.jar") @@ -72,6 +75,7 @@ public class QuarkusAssemblies { .directory(FileUtil.getRelativePath(project.getBaseDirectory(), project.getBuildDirectory())) .include("lib") .fileMode("0640"); + Summary.getInstance().setPackagedFileLocation(findSingleFileThatEndsWith(project, runnerSuffix(getQuarkusConfiguration(project)) + ".jar")); AssemblyFileSet.AssemblyFileSetBuilder artifactFileSet = createFileSet(project) .directory(FileUtil.getRelativePath(project.getBaseDirectory(), project.getBuildDirectory())) .include(findSingleFileThatEndsWith(project, runnerSuffix(getQuarkusConfiguration(project)) + ".jar")) @@ -84,6 +88,7 @@ public class QuarkusAssemblies { public static final QuarkusAssembly UBER_JAR = quarkusGenerator -> { final JavaProject project = quarkusGenerator.getContext().getProject(); + Summary.getInstance().setPackagedFileLocation(findSingleFileThatEndsWith(project, runnerSuffix(getQuarkusConfiguration(project)) + ".jar")); final AssemblyFileSet.AssemblyFileSetBuilder fileSetBuilder = createFileSet(project) .directory(FileUtil.getRelativePath(project.getBaseDirectory(), project.getBuildDirectory())) .include(findSingleFileThatEndsWith(project, runnerSuffix(getQuarkusConfiguration(project)) + ".jar")) 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 1545ab46d8..4260028261 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,6 +32,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.Summary; import org.eclipse.jkube.kit.common.archive.ArchiveCompression; import org.eclipse.jkube.kit.common.archive.JKubeTarArchiver; import org.eclipse.jkube.kit.common.util.FileUtil; @@ -106,9 +107,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())); - JKubeTarArchiver.createTarBall( + Summary.getInstance().setHelmChartLocation(helmConfig.getChart()); + Summary.getInstance().setHelmChartLocation(outputDir.getAbsolutePath()); + File helmTarball = JKubeTarArchiver.createTarBall( tarballFile, outputDir, FileUtil.listFilesAndDirsRecursivelyInDirectory(outputDir), Collections.emptyMap(), ArchiveCompression.fromFileName(tarballFile.getName()), null, prependNameAsDirectory); + Summary.getInstance().setHelmChartCompressedLocation(helmTarball.getAbsolutePath()); Optional.ofNullable(helmConfig.getGeneratedChartListeners()).orElse(Collections.emptyList()) .forEach(listener -> listener.chartFileGenerated(helmConfig, helmType, tarballFile)); } @@ -136,6 +140,8 @@ public void uploadHelmChart(HelmConfig helm) throws BadUploadException, IOExcept .orElse(s -> s); setAuthentication(helmRepository, logger, registryServerConfigurations, passwordDecryptor); uploadHelmChart(helm, helmRepository); + Summary.getInstance().setHelmChartName(helm.getChart()); + Summary.getInstance().setHelmRepository(helmRepository.getName()); } else { String error = "No repository or invalid repository configured for upload"; logger.error(error); 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 5bc5649038..6679ffc0a7 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,6 +22,7 @@ import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.ResourceFileType; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; import org.eclipse.jkube.kit.common.util.ResourceClassifier; import org.eclipse.jkube.kit.common.util.ValidationUtil; @@ -74,6 +75,7 @@ public File writeResources(KubernetesList resources, ResourceClassifier classifi interpolateTemplateVariables(resources, file); } + Summary.getInstance().setAggregateResourceFile(file.getAbsolutePath()); 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 b85317870a..e48d29ae15 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,6 +21,7 @@ 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.Summary; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.ResourceUtil; import org.eclipse.jkube.kit.enricher.api.util.KubernetesResourceUtil; @@ -29,6 +30,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import static org.eclipse.jkube.kit.resource.service.TemplateUtil.getSingletonTemplate; @@ -81,6 +83,9 @@ private static void writeIndividualResources( // Here we are writing individual file for all the resources. File itemTarget = new File(targetDir, fileName); + Summary.getInstance().addGeneratedResourceFile(Optional.ofNullable(resourceFileType) + .map(r -> r.addExtensionIfMissing(targetDir).getPath()) + .orElse(targetDir.getPath())); writeResource(itemTarget, item, resourceFileType); } } diff --git a/kubernetes-maven-plugin/doc/src/main/asciidoc/index.adoc b/kubernetes-maven-plugin/doc/src/main/asciidoc/index.adoc index 1845036372..61b7928cdf 100644 --- a/kubernetes-maven-plugin/doc/src/main/asciidoc/index.adoc +++ b/kubernetes-maven-plugin/doc/src/main/asciidoc/index.adoc @@ -39,6 +39,7 @@ include::inc/_access.adoc[] include::inc/_registry.adoc[] include::inc/_authentication.adoc[] +include::{kitdoc-path}/inc/_summary.adoc[] include::inc/_volumes.adoc[] include::inc/_integrations.adoc[] 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 fd703c46c5..3b26db71b4 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 @@ -30,6 +30,7 @@ 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.Summary; 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; @@ -397,6 +398,9 @@ public abstract class AbstractDockerMojo extends AbstractMojo @Parameter(property = "jkube.offline", defaultValue = "false") protected boolean offline; + @Parameter(property = "jkube.summaryEnabled", defaultValue = "true") + public boolean summaryEnabled; + protected JavaProject javaProject; @Override @@ -459,16 +463,22 @@ protected void doExecute() throws MojoExecutionException { .build(); resolvedImages = ConfigHelper.initImageConfiguration(apiVersion, getBuildTimestamp(getPluginContext(), CONTEXT_KEY_BUILD_TIMESTAMP, project.getBuild().getDirectory(), DOCKER_BUILD_TIMESTAMP), images, imageConfigResolver, log, filter, this, jkubeServiceHub.getConfiguration()); executeInternal(); + Summary.getInstance().setSuccessful(true); } catch (IOException | DependencyResolutionRequiredException exp) { + Summary.getInstance().setSuccessful(false); + Summary.getInstance().setFailureCause(exp.getMessage()); logException(exp); throw new MojoExecutionException(exp.getMessage()); } catch (MojoExecutionException exp) { + Summary.getInstance().setSuccessful(false); + Summary.getInstance().setFailureCause(exp.getMessage()); logException(exp); throw exp; } finally { Optional.ofNullable(jkubeServiceHub).ifPresent(JKubeServiceHub::close); } } finally { + Runtime.getRuntime().addShutdownHook(new Thread(() -> Summary.getInstance().printSummary(log, summaryEnabled))); Ansi.setEnabled(ansiRestore); } } 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 c0661d6b30..1f490545ce 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 @@ -18,6 +18,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.RegistryConfig; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.AnsiLogger; import org.eclipse.jkube.kit.common.util.EnvUtil; import org.eclipse.jkube.kit.common.util.MavenUtil; @@ -89,6 +90,9 @@ public abstract class AbstractJKubeMojo extends AbstractMojo implements KitLogge @Parameter(property = "jkube.namespace") public String namespace; + @Parameter(property = "jkube.summaryEnabled", defaultValue = "true") + public boolean summaryEnabled; + @Parameter protected ClusterConfiguration access; @@ -113,8 +117,13 @@ public void execute() throws MojoExecutionException, MojoFailureException { return; } executeInternal(); + Summary.getInstance().setSuccessful(true); } catch (DependencyResolutionRequiredException e) { + Summary.getInstance().setSuccessful(false); + Summary.getInstance().setFailureCause(e.getMessage()); throw new MojoFailureException(e.getMessage()); + } finally { + Runtime.getRuntime().addShutdownHook(new Thread(() -> Summary.getInstance().printSummary(log, summaryEnabled))); } } 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 9ad78b4b0c..27039e4f25 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 @@ -19,6 +19,7 @@ import java.util.List; import org.eclipse.jkube.kit.common.KitLogger; +import org.eclipse.jkube.kit.common.Summary; import org.eclipse.jkube.kit.common.util.KubernetesHelper; import org.eclipse.jkube.kit.common.util.MavenUtil; import org.eclipse.jkube.kit.common.util.OpenshiftHelper; @@ -175,6 +176,7 @@ public void executeInternal() throws MojoExecutionException { clusterKind = "OpenShift"; } KubernetesResourceUtil.validateKubernetesMasterUrl(masterUrl); + Summary.getInstance().setTargetClusterUrl(masterUrl.toString()); List entities = KubernetesHelper.loadResources(manifest); configureApplyService(kubernetes);