This is an automated email from the ASF dual-hosted git repository. cdeppisch pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 459109411df CAMEL-21690: Fix image-push option on Kubernetes run command 459109411df is described below commit 459109411dfec8eea569a2c8832bd8ce2a000fbc Author: Christoph Deppisch <cdeppi...@redhat.com> AuthorDate: Fri Jan 31 11:31:03 2025 +0100 CAMEL-21690: Fix image-push option on Kubernetes run command - Most of the Kubernetes environments require the container image push as part of the Kubernetes run command - Set --image-push=true as a default value - Remove container.image-push trait option in favor of using --image-push command option (the container trait is primarily to configure the container spec in the Kubernetes deployment Manifest) - Skip image build and image push when printing the Kubernetes Manifest with --output option --- .../modules/ROOT/pages/camel-jbang-kubernetes.adoc | 14 ++++++++------ .../src/test/resources/application-jkube.properties | 3 ++- .../jbang/core/commands/kubernetes/KubernetesExport.java | 12 ++++++------ .../dsl/jbang/core/commands/kubernetes/KubernetesRun.java | 10 ++++++++-- .../core/commands/kubernetes/traits/model/Container.java | 13 ------------- .../commands/kubernetes/traits/model/ContainerBuilder.java | 7 ------- 6 files changed, 24 insertions(+), 35 deletions(-) diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc index 0b3eaabe6ac..582a5069ee1 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-kubernetes.adoc @@ -229,10 +229,6 @@ The container trait is able to customize the container specification with the fo | string[] | The pull secrets for private registries -| container.image-push -| boolean -| Enable image push to the registry - | container.request-cpu | string | The minimum amount of CPU required. @@ -1366,7 +1362,7 @@ The following steps have been known to be working with Camel 4.8.1+: 1. `minikube start --addons registry --driver=docker` 2. `eval $(minikube -p minikube docker-env)` -3. `camel kubernetes run 'demo.camel.yaml' --cluster-type=minikube --build-property=quarkus.kubernetes.image-pull-policy=Never` +3. `camel kubernetes run demo.camel.yaml --cluster-type=minikube --build-property=quarkus.kubernetes.image-pull-policy=Never` Most important `--build-property=quarkus.kubernetes.image-pull-policy=Never` without that it is not working, which is not clear from the current Minikube docs. @@ -1374,7 +1370,13 @@ The following steps have been known to be working with Camel 4.9+: 1. `minikube start --addons registry --driver=docker` 2. `eval $(minikube -p minikube docker-env)` -3. `camel kubernetes run demo.camel.yaml '--cluster-type=minikube' '--build-property=quarkus.kubernetes.image-pull-policy=Never' '--trait container.image-push=true' '--image-registry' '$(kubectl -n kube-system get service registry -o jsonpath='{.spec.clusterIP}')' '--image-builder=docker'` +3. `camel kubernetes run demo.camel.yaml --cluster-type=minikube --build-property=quarkus.kubernetes.image-pull-policy=Never --trait container.image-push=true --image-registry '$(kubectl -n kube-system get service registry -o jsonpath='{.spec.clusterIP}')' --image-builder=docker` + +The following steps have been known to be working with Camel 4.10+: + +1. `minikube start --addons registry --driver=docker` +2. `eval $(minikube -p minikube docker-env)` +3. `camel kubernetes run demo.camel.yaml --cluster-type=minikube --build-property=quarkus.kubernetes.image-pull-policy=Never --image-registry '$(kubectl -n kube-system get service registry -o jsonpath='{.spec.clusterIP}')' --image-builder=docker` Note that Docker multi-platform build is used. It requires to have followed these https://docs.docker.com/build/building/multi-platform/#build-multi-platform-images[Docker requirements]. diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/resources/application-jkube.properties b/dsl/camel-jbang/camel-jbang-core/src/test/resources/application-jkube.properties index 39fd8d53603..1f39b56d0cd 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/test/resources/application-jkube.properties +++ b/dsl/camel-jbang/camel-jbang-core/src/test/resources/application-jkube.properties @@ -18,9 +18,10 @@ jib.label=abc label.runtime=camel-main jkube.version=1.18.0 jkube.skip.build=true +jkube.skip.push=true jkube.imagePullPolicy=Always jkube.enricher.jkube-controller.type=Deployment jkube.enricher.jkube-service.port=80:8080,443:8080 jkube.enricher.jkube-project-label.group=foo jkube.enricher.jkube-project-label.provider=asf -jkube.recreate=true \ No newline at end of file +jkube.recreate=true diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java index 4cf5e3acf0c..92665066248 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java @@ -104,6 +104,10 @@ public class KubernetesExport extends Export { description = "The image builder used to build the container image (e.g. docker, jib, podman).") protected String imageBuilder; + @CommandLine.Option(names = { "--image-push" }, defaultValue = "true", + description = "Whether to push the container image to a given image registry.") + protected boolean imagePush = true; + @CommandLine.Option(names = { "--cluster-type" }, description = "The target cluster type. Special configurations may be applied to different cluster types such as Kind or Minikube or Openshift.") protected String clusterType; @@ -266,16 +270,13 @@ public class KubernetesExport extends Export { buildProperties.add("jkube.container-image.imagePullPolicy=%s".formatted(imagePullPolicy)); } - var skipPush = !container.getImagePush(); + buildProperties.add("jkube.skip.push=%b".formatted(!imagePush)); + if (ClusterType.OPENSHIFT.isEqualTo(clusterType)) { if (!"docker".equals(imageBuilder)) { printer().printf("OpenShift forcing --image-builder=docker%n"); imageBuilder = "docker"; } - if (skipPush) { - printer().printf("OpenShift forcing --trait container.image-push=true%n"); - container.setImagePush(true); - } buildProperties.add("jkube.maven.plugin=%s".formatted("openshift-maven-plugin")); } else { buildProperties.add("jkube.maven.plugin=%s".formatted("kubernetes-maven-plugin")); @@ -284,7 +285,6 @@ public class KubernetesExport extends Export { if ("docker".equals(imageBuilder) || "jib".equals(imageBuilder)) { buildProperties.add("jkube.build.strategy=%s".formatted(imageBuilder)); } - buildProperties.add("jkube.skip.push=%b".formatted(skipPush)); // Runtime specific for Main if (runtime == RuntimeType.main) { diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java index d7beb50109a..ce4f930a0cd 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java @@ -148,9 +148,9 @@ public class KubernetesRun extends KubernetesBaseCommand { description = "Whether to build container image as part of the run.") boolean imageBuild = true; - @CommandLine.Option(names = { "--image-push" }, defaultValue = "false", + @CommandLine.Option(names = { "--image-push" }, defaultValue = "true", description = "Whether to push image to given image registry as part of the run.") - boolean imagePush = false; + boolean imagePush = true; @CommandLine.Option(names = { "--image-platforms" }, description = "List of target platforms. Each platform is defined using the pattern.") @@ -377,6 +377,7 @@ public class KubernetesRun extends KubernetesBaseCommand { export.image = image; export.imageRegistry = imageRegistry; export.imageGroup = imageGroup; + export.imagePush = imagePush; export.imageBuilder = imageBuilder; export.clusterType = clusterType; export.serviceAccount = serviceAccount; @@ -561,6 +562,10 @@ public class KubernetesRun extends KubernetesBaseCommand { args.add("-Djkube.namespace=%s".formatted(namespace)); } + // skip image build and push because we only want to build the Kubernetes manifest + args.add("-Djkube.skip.build=true"); + args.add("-Djkube.skip.push=true"); + args.add("package"); if (!quiet) { @@ -606,6 +611,7 @@ public class KubernetesRun extends KubernetesBaseCommand { if (imagePush) { args.add("-Djkube.%s.push=true".formatted(imageBuilder)); + args.add("-Djkube.skip.push=false"); } if (!ObjectHelper.isEmpty(namespace)) { diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java index ffd92bf2b47..16ef61364d9 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Container.java @@ -79,11 +79,6 @@ public class Container { @JsonSetter( nulls = Nulls.SKIP) private List<String> imagePullSecrets; - @JsonProperty("imagePush") - @JsonPropertyDescription("Enable image push to the registry") - @JsonSetter( - nulls = Nulls.SKIP) - private boolean imagePush; @JsonProperty("limitCPU") @JsonPropertyDescription("The maximum amount of CPU to be provided (default 500 millicores).") @JsonSetter( @@ -220,14 +215,6 @@ public class Container { this.imagePullSecrets = imagePullSecret; } - public boolean getImagePush() { - return imagePush; - } - - public void setImagePush(boolean imagePush) { - this.imagePush = imagePush; - } - public String getLimitCPU() { return this.limitCPU; } diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/ContainerBuilder.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/ContainerBuilder.java index c13bec0e0e7..823218b08db 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/ContainerBuilder.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/ContainerBuilder.java @@ -28,7 +28,6 @@ public final class ContainerBuilder { private String image; private Container.ImagePullPolicy imagePullPolicy; private List<String> imagePullSecrets; - private boolean imagePush; private String limitCPU; private String limitMemory; private String name; @@ -94,11 +93,6 @@ public final class ContainerBuilder { return this; } - public ContainerBuilder withImagePush(boolean imagePush) { - this.imagePush = imagePush; - return this; - } - public ContainerBuilder withLimitCPU(String limitCPU) { this.limitCPU = limitCPU; return this; @@ -170,7 +164,6 @@ public final class ContainerBuilder { container.setImage(image); container.setImagePullPolicy(imagePullPolicy); container.setImagePullSecrets(imagePullSecrets); - container.setImagePush(imagePush); container.setLimitCPU(limitCPU); container.setLimitMemory(limitMemory); container.setName(name);