Serdar Gökay created CAMEL-24776:
------------------------------------
Summary: camel-jbang run does not auto-load camel-kubernetes for
secret property functions
Key: CAMEL-24776
URL: https://issues.apache.org/jira/browse/CAMEL-24776
Project: Camel
Issue Type: Bug
Components: camel-jbang
Affects Versions: 4.22.0
Environment: macOS; Java 26.0.1; native Camel JBang 4.22.0. No
application-specific runtime patch, Kubernetes cluster, or message broker
required for the reproduction.
Reporter: Serdar Gökay
h2. Problem
Camel JBang 4.22.0 run resolves {{secret:probe/user}} to the literal string
probe/user when camel-kubernetes is not explicitly included. Adding
--dep=camel-kubernetes makes the same placeholder resolve correctly.
This causes misleading downstream authentication failures when Secret
placeholders supply connection-factory credentials. No broker or Kubernetes
cluster is needed for the reproduction below.
h2. Reproduction
Create probe.yaml in a disposable directory:
{code:yaml}
- route:
id: secret-probe
from:
uri: timer:probe
parameters:
repeatCount: 1
delay: 100
steps:
- log:
message: "PROBE_RESULT={{secret:probe/user}}"
{code}
Create a non-sensitive local Secret fixture:
{code:bash}
mkdir -p fixtures/probe
printf '%s' 'fixture-user' > fixtures/probe/user
{code}
Create application.properties (replace the absolute path with your fixture
directory):
{code:properties}
camel.main.name=secret-probe
camel.main.durationMaxMessages=1
camel.main.shutdownTimeout=1
camel.kubernetes-config.mount-path-secrets=/absolute/path/to/probe/fixtures
camel.kubernetes-config.client-enabled=false
{code}
Run without an explicit dependency:
{code:bash}
jbang -Dcamel.jbang.version=4.22.0 camel@apache/camel run probe.yaml
{code}
Actual: PROBE_RESULT=probe/user
Expected: PROBE_RESULT=fixture-user
Control case / workaround:
{code:bash}
jbang -Dcamel.jbang.version=4.22.0 camel@apache/camel run probe.yaml
--dep=camel-kubernetes
{code}
The control case outputs PROBE_RESULT=fixture-user. An initial run without the
dependency also reproduced the literal result before fixture configuration was
added. The fixture is only needed to demonstrate successful resolution.
h2. Export comparison
Without an explicit dependency, export includes camel-kubernetes in the
generated POM:
{code:bash}
jbang -Dcamel.jbang.version=4.22.0 camel@apache/camel export probe.yaml
--runtime=camel-main --gav=local:secret-probe:1.0 --dir=out
{code}
POM generation was verified; the exported application was not built or run.
h2. Suspected cause
In DependencyDownloaderPropertiesFunctionResolver, the special dependency
download for secret/configmap is invoked only when export is true. Normal run
falls through to the default function resolver. With no registered secret
function, the property parser can interpret the text after the colon as an
ordinary property's default value.
Commit
[f1d57f874e670de9ccdbc3440747203188f2eef7|https://github.com/apache/camel/commit/f1d57f874e670de9ccdbc3440747203188f2eef7]
(CAMEL-23073) moved previously unconditional download logic behind the export
condition while introducing transform stubs. This is source-based regression
attribution; a pre-change release was not tested.
[Version-pinned resolver
source|https://github.com/apache/camel/blob/camel-4.22.0/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderPropertiesFunctionResolver.java]
[Version-pinned parser
source|https://github.com/apache/camel/blob/camel-4.22.0/core/camel-base/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java]
The same conditional structure was observed on main and camel-4.22.x on
2026-09-16. Configmap shares the code path but was not independently tested.
h2. Suggested fix / regression coverage
Restore property-function dependency discovery for normal run while preserving
transform stubs and export dependency inclusion. A regression test can use the
mounted fixture above and assert the resolved value without an explicit
Kubernetes dependency.
Projects can currently work around this by explicitly adding camel-kubernetes
to camel.jbang.dependencies (preserving existing entries).
Reported with assistance from OpenAI Codex; the reproduction and control case
were executed against native Camel 4.22.0.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)