This is an automated email from the ASF dual-hosted git repository. acosentino 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 db1d54fb164 CAMEL-21812: camel-jbang - Provide an option in camel k8s to trust a given cert (#17416) db1d54fb164 is described below commit db1d54fb164a0745548423877c2edd8ee70617b3 Author: Thomas Diesler <tdies...@redhat.com> AuthorDate: Fri Mar 21 10:38:40 2025 +0100 CAMEL-21812: camel-jbang - Provide an option in camel k8s to trust a given cert (#17416) --- .../dsl/jbang/core/commands/ExportBaseCommand.java | 87 +++++++++++++++------- .../apache/camel/dsl/jbang/core/commands/Run.java | 33 +++++++- .../resources/templates/main-kubernetes-pom.tmpl | 30 +++++++- .../templates/quarkus-kubernetes-pom.tmpl | 34 +++++++-- .../src/main/resources/templates/run-java.sh | 57 +++++++++++++- .../templates/spring-boot-kubernetes-pom.tmpl | 30 +++++++- .../core/commands/kubernetes/KubernetesExport.java | 44 +++++++++-- .../commands/kubernetes/KubernetesExportTest.java | 4 +- 8 files changed, 263 insertions(+), 56 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index 71ea0c9fa3f..444b387760c 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -75,6 +76,8 @@ public abstract class ExportBaseCommand extends CamelCommand { "camel.component.kamelet.location", "camel.jbang.classpathFiles", "camel.jbang.localKameletDir", + "camel.jbang.scriptFiles", + "camel.jbang.tlsFiles", "camel.jbang.jkubeFiles", "kamelet" }; @@ -546,6 +549,7 @@ public abstract class ExportBaseCommand extends CamelCommand { File settings, File profile, File srcJavaDirRoot, File srcJavaDir, File srcResourcesDir, File srcCamelResourcesDir, File srcKameletsResourcesDir, String packageName) throws Exception { + // read the settings file and find the files to copy Properties prop = new CamelCaseOrderedProperties(); RuntimeUtil.loadProperties(prop, settings); @@ -591,43 +595,58 @@ public abstract class ExportBaseCommand extends CamelCommand { || "camel.jbang.localKameletDir".equals(k) || "kamelet.yaml".equalsIgnoreCase(ext2); boolean camel = !kamelet && "camel.main.routesIncludePattern".equals(k); boolean jkube = "camel.jbang.jkubeFiles".equals(k); - boolean web = "html".equals(ext) || "js".equals(ext) || "css".equals(ext) || "jpeg".equals(ext) - || "jpg".equals(ext) || "png".equals(ext) || "ico".equals(ext); - File srcWeb = new File(srcResourcesDir, "META-INF/resources"); - File targetDir = java ? srcJavaDir : camel ? srcCamelResourcesDir : kamelet ? srcKameletsResourcesDir - : web ? srcWeb : srcResourcesDir; + boolean script = "camel.jbang.scriptFiles".equals(k); + boolean tls = "camel.jbang.tlsFiles".equals(k); + boolean web = ext != null && List.of("css", "html", "ico", "jpeg", "jpg", "js", "png").contains(ext); + File targetDir; + if (java) { + targetDir = srcJavaDir; + } else if (camel) { + targetDir = srcCamelResourcesDir; + } else if (kamelet) { + targetDir = srcKameletsResourcesDir; + } else if (script) { + targetDir = new File(srcJavaDirRoot.getParentFile(), "scripts"); + } else if (tls) { + targetDir = new File(srcJavaDirRoot.getParentFile(), "tls"); + } else if (web) { + targetDir = new File(srcResourcesDir, "META-INF/resources"); + } else { + targetDir = srcResourcesDir; + } targetDir.mkdirs(); - File source; + Path source; if ("kamelet".equals(k) && localKameletDir != null) { // source is a local kamelet - source = new File(localKameletDir, f + ".kamelet.yaml"); + source = Paths.get(localKameletDir, f + ".kamelet.yaml"); } else { - source = new File(f); + source = Paths.get(f); } File out; - if (source.isDirectory()) { + File srcFile = source.toFile(); + if (srcFile.isDirectory()) { out = targetDir; } else { - out = new File(targetDir, source.getName()); + out = new File(targetDir, srcFile.getName()); } if (!java) { if (kamelet) { - safeCopy(source, out, true); + safeCopy(srcFile, out, true); } else if (jkube) { // file should be renamed and moved into src/main/jkube f = f.replace(".jkube.yaml", ".yaml"); f = f.replace(".jkube.yml", ".yml"); out = new File(srcCamelResourcesDir.getParentFile().getParentFile(), "jkube/" + f); out.getParentFile().mkdirs(); - safeCopy(source, out, true); + safeCopy(srcFile, out, true); } else { out.getParentFile().mkdirs(); - safeCopy(source, out, true); + safeCopy(scheme, source, out, true); } } else { // need to append package name in java source file - List<String> lines = Files.readAllLines(source.toPath()); + List<String> lines = Files.readAllLines(source); Optional<String> hasPackage = lines.stream().filter(l -> l.trim().startsWith("package ")).findFirst(); FileOutputStream fos; @@ -636,13 +655,13 @@ public abstract class ExportBaseCommand extends CamelCommand { if (pn != null) { File dir = new File(srcJavaDirRoot, pn.replace('.', File.separatorChar)); dir.mkdirs(); - out = new File(dir, source.getName()); + out = new File(dir, srcFile.getName()); } else { throw new IOException("Cannot determine package name from source: " + source); } } else { if (javaLiveReload) { - out = new File(srcJavaDirRoot, source.getName()); + out = new File(srcJavaDirRoot, srcFile.getName()); } else { if (packageName != null && !"false".equalsIgnoreCase(packageName)) { lines.add(0, ""); @@ -651,7 +670,7 @@ public abstract class ExportBaseCommand extends CamelCommand { } } if (javaLiveReload) { - safeCopy(source, out, true); + safeCopy(srcFile, out, true); } else { fos = new FileOutputStream(out); for (String line : lines) { @@ -772,17 +791,25 @@ public abstract class ExportBaseCommand extends CamelCommand { } protected void prepareUserProperties(Properties properties) { - if (this.applicationProperties != null) { - for (String s : this.applicationProperties) { - String[] kv = s.split("="); - if (kv.length != 2) { - // likely a user mistake, we warn the user - printer().println("WARN: property '" + s + "'' has a bad format (should be 'key=value'), skipping."); - } else { - properties.put(kv[0], kv[1]); + properties.putAll(propertiesMap(this.applicationProperties)); + } + + protected Map<String, String> propertiesMap(String[]... propertySources) { + Map<String, String> result = new LinkedHashMap<>(); + if (propertySources != null) { + for (String[] props : Arrays.stream(propertySources).filter((arr) -> arr != null).toList()) { + for (String s : props) { + String[] kv = s.split("="); + if (kv.length != 2) { + // likely a user mistake, we warn the user + printer().println("WARN: property '" + s + "'' has a bad format (should be 'key=value'), skipping."); + } else { + result.put(kv[0], kv[1]); + } } } } + return result; } // Returns true if it has either an openapi spec or it uses contract-first DSL @@ -937,6 +964,16 @@ public abstract class ExportBaseCommand extends CamelCommand { return answer != null ? answer : "1.18.1"; } + private void safeCopy(String scheme, Path source, File target, boolean override) throws Exception { + if ("classpath".equals(scheme)) { + try (var ins = getClass().getClassLoader().getResourceAsStream(source.toString())) { + IOHelper.copy(ins, new FileOutputStream(target)); + } + } else { + safeCopy(source.toFile(), target, override); + } + } + protected void safeCopy(File source, File target, boolean override) throws Exception { if (!source.exists()) { return; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java index 91a68d07957..790fa09cb9b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java @@ -670,6 +670,8 @@ public class Run extends CamelCommand { StringJoiner js = new StringJoiner(","); StringJoiner sjReload = new StringJoiner(","); StringJoiner sjClasspathFiles = new StringJoiner(","); + StringJoiner sjScriptFiles = new StringJoiner(","); + StringJoiner sjTlsFiles = new StringJoiner(","); StringJoiner sjKamelets = new StringJoiner(","); StringJoiner sjJKubeFiles = new StringJoiner(","); @@ -704,12 +706,20 @@ public class Run extends CamelCommand { file = loadFromClipboard(file); } else if (skipFile(file)) { continue; + } else if (isScriptFile(file)) { + // script files + sjScriptFiles.add(file); + continue; + } else if (isTlsFile(file)) { + // tls files + sjTlsFiles.add(file); + continue; } else if (jkubeFile(file)) { // jkube sjJKubeFiles.add(file); continue; } else if (!knownFile(file) && !file.endsWith(".properties")) { - // non known files to be added on classpath + // unknown files to be added on classpath sjClasspathFiles.add(file); continue; } @@ -808,6 +818,18 @@ public class Run extends CamelCommand { } else { writeSetting(main, profileProperties, "camel.jbang.classpathFiles", () -> null); } + if (sjScriptFiles.length() > 0) { + main.addInitialProperty("camel.jbang.scriptFiles", sjScriptFiles.toString()); + writeSettings("camel.jbang.scriptFiles", sjScriptFiles.toString()); + } else { + writeSetting(main, profileProperties, "camel.jbang.scriptFiles", () -> null); + } + if (sjTlsFiles.length() > 0) { + main.addInitialProperty("camel.jbang.tlsFiles", sjTlsFiles.toString()); + writeSettings("camel.jbang.tlsFiles", sjTlsFiles.toString()); + } else { + writeSetting(main, profileProperties, "camel.jbang.tlsFiles", () -> null); + } if (sjJKubeFiles.length() > 0) { main.addInitialProperty("camel.jbang.jkubeFiles", sjJKubeFiles.toString()); writeSettings("camel.jbang.jkubeFiles", sjJKubeFiles.toString()); @@ -1678,7 +1700,6 @@ public class Run extends CamelCommand { if ("kamelet.yaml".equals(ext)) { return true; } - String ext2 = FileUtil.onlyExt(file, true); if (ext2 != null) { SourceScheme sourceScheme = SourceScheme.fromUri(file); @@ -1790,6 +1811,14 @@ public class Run extends CamelCommand { return false; } + private boolean isScriptFile(String name) { + return name.endsWith(".sh"); + } + + private boolean isTlsFile(String name) { + return name.endsWith(".crt") || name.endsWith(".key") || name.endsWith(".pem"); + } + private boolean jkubeFile(String name) { return name.endsWith(".jkube.yaml") || name.endsWith(".jkube.yml"); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl index 1db225a66f2..aa7de71d577 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main-kubernetes-pom.tmpl @@ -132,14 +132,36 @@ <images> <image> <build> - <from>${jkube.base.image}</from> + <from>${jkube.container-image.from}</from> <entryPoint> <exec> - <arg>java</arg> - <arg>-jar</arg> - <arg>/maven/${project.artifactId}-${project.version}.jar</arg> + <arg>/maven/run-java.sh</arg> + <arg>run</arg> </exec> </entryPoint> + <assembly> + <layers> + <layer> + <id>entrypoint</id> + <files> + <file> + <source>src/main/scripts/run-java.sh</source> + <outputDirectory>.</outputDirectory> + <fileMode>755</fileMode> + </file> + </files> + </layer> + <layer> + <id>tls</id> + <fileSets> + <fileSet> + <directory>src/main/tls</directory> + <outputDirectory>./tls</outputDirectory> + </fileSet> + </fileSets> + </layer> + </layers> + </assembly> </build> </image> </images> diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-kubernetes-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-kubernetes-pom.tmpl index 4e988d66ae3..be85e7f5a28 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-kubernetes-pom.tmpl +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-kubernetes-pom.tmpl @@ -97,7 +97,13 @@ <images> <image> <build> - <from>${jkube.base.image}</from> + <from>${jkube.container-image.from}</from> + <entryPoint> + <exec> + <arg>/maven/quarkus/run-java.sh</arg> + <arg>run</arg> + </exec> + </entryPoint> <assembly> <layers> <layer> @@ -109,15 +115,27 @@ </fileSet> </fileSets> </layer> + <layer> + <id>entrypoint</id> + <files> + <file> + <source>src/main/scripts/run-java.sh</source> + <outputDirectory>./quarkus</outputDirectory> + <fileMode>755</fileMode> + </file> + </files> + </layer> + <layer> + <id>tls</id> + <fileSets> + <fileSet> + <directory>src/main/tls</directory> + <outputDirectory>./quarkus/tls</outputDirectory> + </fileSet> + </fileSets> + </layer> </layers> </assembly> - <entryPoint> - <exec> - <arg>java</arg> - <arg>-jar</arg> - <arg>/maven/quarkus/quarkus-run.jar</arg> - </exec> - </entryPoint> </build> </image> </images> diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-java.sh b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-java.sh index ccaa79017e8..f71b92be4f9 100755 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-java.sh +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-java.sh @@ -29,7 +29,7 @@ # # # This script will pick up either a 'fat' jar which can be run with "-jar" -# or you can sepcify a JAVA_MAIN_CLASS. +# or you can specify a JAVA_MAIN_CLASS. # # Source and Documentation can be found # at https://github.com/fabric8io-images/run-java-sh/blob/v1.3.8/fish-pepper/run-java-sh/fp-files/run-java.sh @@ -482,8 +482,52 @@ gc_options() { java_default_options() { # Echo options, trimming trailing and multiple spaces - echo "$(memory_options) $(jit_options) $(diagnostics_options) $(cpu_options) $(gc_options)" | awk '$1=$1' + echo "$(memory_options) $(jit_options) $(diagnostics_options) $(cpu_options) $(gc_options) $(ssl_options)" | awk '$1=$1' +} + +# ============================================================================== +has_ssl_certificates() { + truststoreCertFiles="" + # Loop through each file in the CSV string + for file in ${SSL_TRUSTSTORE_CERTIFICATES:-}; do + # If file is not an absolute path, prepend the script dir + if [ "${file#/}" = "$file" ]; then + file="$(script_dir)/$file" + fi + if [ -f "$file" ] && [ "${file##*.}" = "crt" ]; then + truststoreCertFiles="${truststoreCertFiles:+$truststoreCertFiles,}$file" + found=true + break + fi + done + if [ "${found:-false}" = true ]; then + truststoreFile=${JAVA_TRUSTSTORE_LOCATION:-/tmp/truststore.jks} + truststorePass=${JAVA_TRUSTSTORE_PASSWORD:-changeit} + return 0 + else + return 1 + fi +} + +ssl_options() { + local opts="" + if has_ssl_certificates; then + opts="-Djavax.net.ssl.trustStore=${truststoreFile} -Djavax.net.ssl.trustStorePassword=${truststorePass}" + fi + echo $opts +} + +ssl_truststore() { + IFS=',' + if has_ssl_certificates; then + for crt in $truststoreCertFiles; do + alias=$(basename "$crt" .crt) + echo "Importing certificate: ${crt} to ${truststoreFile}" >&2 + keytool -import -alias ${alias} -file ${crt} -keystore ${truststoreFile} -storepass ${truststorePass} -noprompt >&2 + done + fi + IFS=' ' } # ============================================================================== @@ -542,7 +586,7 @@ exec_args() { # Combine all java options java_options() { - # Normalize spaces with awk (i.e. trim and elimate double spaces) + # Normalize spaces with awk (i.e. trim and eliminate double spaces) # See e.g. https://www.physicsforums.com/threads/awk-1-1-1-file-txt.658865/ for an explanation # of this awk idiom echo "${JAVA_OPTIONS:-} $(run_java_options) $(debug_options) $(proxy_options) $(java_default_options)" | awk '$1=$1' @@ -618,6 +662,9 @@ options() { if [ $(hasflag --gc) ]; then ret="$ret $(gc_options)" fi + if [ $(hasflag --ssl) ]; then + ret="$ret $(ssl_options)" + fi echo $ret | awk '$1=$1' } @@ -637,6 +684,10 @@ run() { echo "Either JAVA_MAIN_CLASS or JAVA_APP_JAR needs to be given" exit 1 fi + + # Optionally create an SSL truststore + ssl_truststore + # Don't put ${args} in quotes, otherwise it would be interpreted as a single arg. # However it could be two args (see above). zsh doesn't like this btw, but zsh is not # supported anyway. diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl index 7de1b7bc0f0..3b2390dcf8a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-kubernetes-pom.tmpl @@ -87,14 +87,36 @@ <images> <image> <build> - <from>${jkube.base.image}</from> + <from>${jkube.container-image.from}</from> <entryPoint> <exec> - <arg>java</arg> - <arg>-jar</arg> - <arg>/maven/${project.artifactId}-${project.version}.jar</arg> + <arg>/maven/run-java.sh</arg> + <arg>run</arg> </exec> </entryPoint> + <assembly> + <layers> + <layer> + <id>entrypoint</id> + <files> + <file> + <source>src/main/scripts/run-java.sh</source> + <outputDirectory>.</outputDirectory> + <fileMode>755</fileMode> + </file> + </files> + </layer> + <layer> + <id>tls</id> + <fileSets> + <fileSet> + <directory>src/main/tls</directory> + <outputDirectory>./tls</outputDirectory> + </fileSet> + </fileSets> + </layer> + </layers> + </assembly> </build> </image> </images> 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 301675cf75f..e71ec31504a 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 @@ -210,6 +210,7 @@ public class KubernetesExport extends Export { List<Source> sources; try { + addFile("classpath:templates/run-java.sh"); sources = SourceHelper.resolveSources(files); } catch (Exception e) { printer().printf("Project export failed: %s - %s%n", e.getMessage(), @@ -227,9 +228,15 @@ public class KubernetesExport extends Export { .filter(parts -> parts.length == 2) .collect(Collectors.toMap(parts -> parts[0], parts -> parts[1]))); + annotations = Optional.ofNullable(annotations).orElse(new String[0]); + context.addAnnotations(Arrays.stream(annotations) + .map(item -> item.split("=")) + .filter(parts -> parts.length == 2) + .collect(Collectors.toMap(parts -> parts[0], parts -> parts[1]))); + // Add labels to TraitContext // - // Generated by quarkus/jkube + // Generated by jkube // app.kubernetes.io/name // app.kubernetes.io/version // @@ -247,17 +254,20 @@ public class KubernetesExport extends Export { context.setServiceAccount(serviceAccount); } - // application.properties - String[] applicationProperties = extractPropertiesTraits(new File("application.properties")); - // application-{profile}.properties - String[] applicationProfileProperties = null; + var applicationProfileProperties = new String[0]; if (this.profile != null) { // override from profile specific configuration applicationProfileProperties = extractPropertiesTraits(new File("application-" + profile + ".properties")); } - Traits traitsSpec = getTraitSpec(applicationProperties, applicationProfileProperties); + Traits traitsSpec = getTraitSpec(applicationProfileProperties, applicationProperties); + + // Map properties to env variables (where needed) + var propsMap = propertiesMap(applicationProfileProperties, applicationProperties); + if (propsMap.containsKey("ssl.truststore.certificates")) { + addEnvVar("SSL_TRUSTSTORE_CERTIFICATES", propsMap.get("ssl.truststore.certificates")); + } TraitHelper.configureMountTrait(traitsSpec, configs, resources, volumes); if (openapi != null && openapi.startsWith("configmap:")) { @@ -309,7 +319,7 @@ public class KubernetesExport extends Export { baseImage = "%s/%s".formatted(registryMirror, baseImage); } - buildProperties.add("jkube.base.image=%s".formatted(baseImage)); + buildProperties.add("jkube.container-image.from=%s".formatted(baseImage)); buildProperties.add("jkube.build.strategy=%s".formatted(imageBuilder)); if ("jib".equals(imageBuilder)) { @@ -387,7 +397,7 @@ public class KubernetesExport extends Export { return super.export(cmd); } - protected Traits getTraitSpec(String[] applicationProperties, String[] applicationProfileProperties) { + protected Traits getTraitSpec(String[] applicationProfileProperties, String[] applicationProperties) { var annotationsTraits = TraitHelper.extractTraitsFromAnnotations(this.annotations); var allTraits = TraitHelper.mergeTraits(traits, annotationsTraits, applicationProfileProperties, applicationProperties); @@ -402,6 +412,24 @@ public class KubernetesExport extends Export { return traitsSpec; } + private void addFile(String file) { + if (!files.contains(file)) { + // ensure mutability + files = new ArrayList<>(files); + files.add(file); + } + } + + private void addEnvVar(String key, String value) { + var envArray = Optional.ofNullable(envVars).orElse(new String[0]); + var envList = new ArrayList<>(Arrays.asList(envArray)); + var envEntry = "%s=%s".formatted(key, value); + if (!envList.contains(envEntry)) { + envList.add(envEntry); + envVars = envList.toArray(new String[0]); + } + } + private void addLabel(String key, String value) { var labelArray = Optional.ofNullable(labels).orElse(new String[0]); var labelList = new ArrayList<>(Arrays.asList(labelArray)); diff --git a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java index 27499e307a8..2385e78d268 100644 --- a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java +++ b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java @@ -64,7 +64,7 @@ class KubernetesExportTest extends KubernetesExportBaseTest { Properties props = model.getProperties(); Assertions.assertEquals("examples/route:1.0.0", props.get("jkube.image.name")); - Assertions.assertEquals("eclipse-temurin:17", props.get("jkube.base.image")); + Assertions.assertEquals("eclipse-temurin:17", props.get("jkube.container-image.from")); Assertions.assertEquals("jib", props.get("jkube.build.strategy")); Assertions.assertNull(props.get("jkube.docker.push.registry")); Assertions.assertNull(props.get("jkube.container-image.registry")); @@ -106,7 +106,7 @@ class KubernetesExportTest extends KubernetesExportBaseTest { Properties props = model.getProperties(); Assertions.assertEquals("quay.io/camel-riders/route:1.0-SNAPSHOT", props.get("jkube.image.name")); - Assertions.assertEquals("mirror.gcr.io/my-base-image:latest", props.get("jkube.base.image")); + Assertions.assertEquals("mirror.gcr.io/my-base-image:latest", props.get("jkube.container-image.from")); Assertions.assertEquals("docker", props.get("jkube.build.strategy")); Assertions.assertEquals("quay.io", props.get("jkube.docker.push.registry")); Assertions.assertEquals("quay.io", props.get("jkube.container-image.registry"));