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 <[email protected]>
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);