You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/10/23 08:59:05 UTC
[camel-k-runtime] 01/02: yaml: auto wrap secret values wit RAW
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
commit 1e691680c163e71968baa409120d2c8909af10ad
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Thu Oct 22 16:42:54 2020 +0200
yaml: auto wrap secret values wit RAW
---
.../camel/k/loader/yaml/parser/FromStepParser.java | 7 +-
.../k/loader/yaml/parser/RouteStepParser.java | 10 ++-
.../k/loader/yaml/parser/ToDynamicStepParser.java | 2 +-
.../camel/k/loader/yaml/parser/ToStepParser.java | 2 +-
.../k/loader/yaml/parser/WireTapStepParser.java | 2 +-
.../k/loader/yaml/support/StepParserSupport.java | 41 ++++++++---
camel-k-loader-yaml/camel-k-loader-yaml/pom.xml | 10 +++
.../loader/yaml/RoutesWithPlaceholdersTest.groovy | 1 +
.../k/loader/yaml/RoutesWithSecretsTest.groovy | 81 ++++++++++++++++++++++
.../camel/k/loader/yaml/parser/FromTest.groovy | 57 ++++++++++++++-
.../camel/k/loader/yaml/parser/ToTest.groovy | 45 ++++++++++++
.../routes/RoutesWithSecretsTest_route.yaml | 27 ++++++++
.../RoutesWithSecretsTest_route_property.yaml | 27 ++++++++
.../routes/RoutesWithSecretsTest_route_raw.yaml | 27 ++++++++
14 files changed, 318 insertions(+), 21 deletions(-)
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
index 9d05fb0..cd2b55f 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/FromStepParser.java
@@ -36,9 +36,10 @@ public class FromStepParser implements StartStepParser {
throw new IllegalArgumentException("Either uri or scheme must be set");
}
- String uri = definition.uri != null
- ? StepParserSupport.createEndpointUri(definition.uri, definition.parameters)
- : StepParserSupport.createEndpointUri(context.getCamelContext(), definition.scheme, definition.parameters);
+ String uri = StepParserSupport.createEndpointUri(
+ context.getCamelContext(),
+ definition.uri != null ? definition.uri : definition.scheme,
+ definition.parameters);
// as this is a start converter, steps are mandatory
StepParserSupport.notNull(definition.steps, "steps");
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
index a13f02c..9c18760 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/RouteStepParser.java
@@ -38,14 +38,16 @@ public class RouteStepParser implements StartStepParser {
throw new IllegalArgumentException("Either uri or scheme must be set");
}
- String uri = definition.from.uri != null
- ? StepParserSupport.createEndpointUri(definition.from.uri, definition.from.parameters)
- : StepParserSupport.createEndpointUri(context.getCamelContext(), definition.from.scheme, definition.from.parameters);
+ String uri = StepParserSupport.createEndpointUri(
+ context.getCamelContext(),
+ definition.from.uri != null ? definition.from.uri : definition.from.scheme,
+ definition.from.parameters);
RouteDefinition route = context.builder().from(uri);
ObjectHelper.ifNotEmpty(definition.id, route::routeId);
ObjectHelper.ifNotEmpty(definition.group, route::routeGroup);
+ ObjectHelper.ifNotEmpty(definition.autoStartup, route::autoStartup);
// as this is a start converter, steps are mandatory
StepParserSupport.notNull(definition.steps, "steps");
@@ -63,6 +65,8 @@ public class RouteStepParser implements StartStepParser {
public String id;
@JsonProperty
public String group;
+ @JsonProperty
+ public Boolean autoStartup;
@JsonProperty(required = true)
public From from;
@JsonProperty(required = true)
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
index 183e915..2c9ab13 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToDynamicStepParser.java
@@ -31,7 +31,7 @@ public class ToDynamicStepParser implements ProcessorStepParser {
@Override
public ProcessorDefinition<?> toProcessor(Context context) {
final Definition definition = context.node(Definition.class);
- final String uri = StepParserSupport.createEndpointUri(definition.getUri(), definition.parameters);
+ final String uri = StepParserSupport.createEndpointUri(context.getCamelContext(), definition.getUri(), definition.parameters);
final ToDynamicDefinition answer = new ToDynamicDefinition(uri);
return answer;
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
index d31c05d..fb224ba 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/ToStepParser.java
@@ -31,7 +31,7 @@ public class ToStepParser implements ProcessorStepParser {
@Override
public ProcessorDefinition<?> toProcessor(Context context) {
final Definition definition = context.node(Definition.class);
- final String uri = StepParserSupport.createEndpointUri(definition.getUri(), definition.parameters);
+ final String uri = StepParserSupport.createEndpointUri(context.getCamelContext(), definition.getUri(), definition.parameters);
final ToDefinition answer = new ToDefinition(uri);
return answer;
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
index 7d4776d..73a4489 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/WireTapStepParser.java
@@ -54,7 +54,7 @@ public class WireTapStepParser implements ProcessorStepParser {
}
answer.setUri(
- StepParserSupport.createEndpointUri(definition.getUri(), definition.parameters)
+ StepParserSupport.createEndpointUri(context.getCamelContext(), definition.getUri(), definition.parameters)
);
return answer;
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/StepParserSupport.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/StepParserSupport.java
index fc44afe..f4a8c36 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/StepParserSupport.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/StepParserSupport.java
@@ -19,6 +19,7 @@ package org.apache.camel.k.loader.yaml.support;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import org.apache.camel.CamelContext;
import org.apache.camel.ExtendedCamelContext;
@@ -30,6 +31,7 @@ import org.apache.camel.model.OutputNode;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.spi.EndpointUriFactory;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
import org.apache.camel.util.URISupport;
public final class StepParserSupport {
@@ -70,26 +72,49 @@ public final class StepParserSupport {
return parent;
}
- public static String createEndpointUri(String uri, Map<String, Object> parameters) {
+ public static String createEndpointUri(CamelContext context, String uri, Map<String, Object> parameters) {
String answer = uri;
- if (parameters != null) {
- String queryString;
+ if (parameters == null || parameters.isEmpty()) {
+ return answer;
+ }
+
+ if (uri.contains(":")) {
+ final String scheme = StringHelper.before(uri, ":");
+ final EndpointUriFactory factory = getEndpointUriFactory(context, scheme);
+
+ // we want sorted parameters
+ Map<String, Object> map = new TreeMap<>(parameters);
+ for (String secretParameter : factory.secretPropertyNames()) {
+ Object val = map.get(secretParameter);
+ if (val instanceof String) {
+ String newVal = (String) val;
+ if (!newVal.startsWith("#") && !newVal.startsWith("RAW(")) {
+ map.put(secretParameter, "RAW(" + val + ")");
+ }
+ }
+ }
try {
- queryString = URISupport.createQueryString(parameters, false);
+ String queryString = URISupport.createQueryString(map, false);
if (ObjectHelper.isNotEmpty(queryString)) {
answer += "?" + queryString;
}
} catch (URISyntaxException e) {
throw new IllegalArgumentException(e);
}
+ } else {
+ try {
+ answer = getEndpointUriFactory(context, uri).buildUri(uri, parameters);
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException(e);
+ }
}
return answer;
}
- public static String createEndpointUri(CamelContext context, String scheme, Map<String, Object> parameters) {
+ public static EndpointUriFactory getEndpointUriFactory(CamelContext context, String scheme) {
final EndpointUriFactory factory = context.adapt(ExtendedCamelContext.class).getEndpointUriFactory(scheme);
if (factory == null) {
@@ -99,10 +124,6 @@ public final class StepParserSupport {
throw new IllegalArgumentException("Cannot compute endpoint URI: scheme " + scheme + " is not enabled");
}
- try {
- return factory.buildUri(scheme, parameters);
- } catch (URISyntaxException e) {
- throw new IllegalArgumentException(e);
- }
+ return factory;
}
}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
index 4b6f176..0ff74d1 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/pom.xml
@@ -106,6 +106,16 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-seda</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-timer</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>com.github.java-json-tools</groupId>
<artifactId>json-schema-validator</artifactId>
<version>${json-schema-validator-version}</version>
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithPlaceholdersTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithPlaceholdersTest.groovy
index 751b928..fd21446 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithPlaceholdersTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithPlaceholdersTest.groovy
@@ -38,6 +38,7 @@ class RoutesWithPlaceholdersTest extends TestSupport {
cleanup:
context?.stop()
}
+
def 'from'() {
setup:
def parameters = [
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithSecretsTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithSecretsTest.groovy
new file mode 100644
index 0000000..79be91d
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesWithSecretsTest.groovy
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.k.loader.yaml
+
+
+import org.apache.camel.component.telegram.TelegramEndpoint
+import org.apache.camel.k.loader.yaml.support.TestSupport
+
+class RoutesWithSecretsTest extends TestSupport {
+ static final Properties PROPERTIES = [
+ 'telegram.token': 's3cret',
+ ]
+
+ def 'route'() {
+ setup:
+ def context = startContextForSpec {
+ propertiesComponent.initialProperties = PROPERTIES
+ }
+ when:
+ def eps = context.getEndpoints().findAll { it instanceof TelegramEndpoint }
+ then:
+ eps.each {
+ with(it, TelegramEndpoint) {
+ endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ configuration.authorizationToken == PROPERTIES.getProperty('telegram.token')
+ }
+ }
+ cleanup:
+ context?.stop()
+ }
+
+ def 'route_property'() {
+ setup:
+ def context = startContextForSpec {
+ propertiesComponent.initialProperties = PROPERTIES
+ }
+ when:
+ def eps = context.getEndpoints().findAll { it instanceof TelegramEndpoint }
+ then:
+ eps.each {
+ with(it, TelegramEndpoint) {
+ endpointUri == 'telegram://bots?authorizationToken=%23property:telegram.token'
+ configuration.authorizationToken == PROPERTIES.getProperty('telegram.token')
+ }
+ }
+ cleanup:
+ context?.stop()
+ }
+
+ def 'route_raw'() {
+ setup:
+ def context = startContextForSpec {
+ propertiesComponent.initialProperties = PROPERTIES
+ }
+ when:
+ def eps = context.getEndpoints().findAll { it instanceof TelegramEndpoint }
+ then:
+ eps.each {
+ with(it, TelegramEndpoint) {
+ endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ configuration.authorizationToken == PROPERTIES.getProperty('telegram.token')
+ }
+ }
+ cleanup:
+ context?.stop()
+ }
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
index 168c124..1e08f99 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/FromTest.groovy
@@ -30,8 +30,7 @@ class FromTest extends TestSupport {
parameters:
period: "1s"
steps:
- - log:
- message: "test"
+ - log: "test"
''')
when:
def processor = new FromStepParser().process(stepContext)
@@ -42,6 +41,60 @@ class FromTest extends TestSupport {
}
}
+ def "definition with secrets"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "s3cret"
+ steps:
+ - log: "test"
+ ''')
+ when:
+ def processor = new FromStepParser().process(stepContext)
+ then:
+ with(processor, RouteDefinition) {
+ input instanceof FromDefinition
+ input.endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ }
+ }
+
+ def "definition with secrets (raw)"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "RAW(s3cret)"
+ steps:
+ - log: "test"
+ ''')
+ when:
+ def processor = new FromStepParser().process(stepContext)
+ then:
+ with(processor, RouteDefinition) {
+ input instanceof FromDefinition
+ input.endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ }
+ }
+
+ def "definition with secrets (property)"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "#property:telegram.token"
+ steps:
+ - log: "test"
+ ''')
+ when:
+ def processor = new FromStepParser().process(stepContext)
+ then:
+ with(processor, RouteDefinition) {
+ input instanceof FromDefinition
+ input.endpointUri == 'telegram://bots?authorizationToken=#property:telegram.token'
+ }
+ }
+
def "should fail without steps"() {
given:
def stepContext = stepContext('''
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
index e30a09e..c3846e9 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/ToTest.groovy
@@ -37,6 +37,51 @@ class ToTest extends TestSupport {
}
}
+ def "definition with secrets"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "s3cret"
+ ''')
+ when:
+ def processor = new ToStepParser().toProcessor(stepContext)
+ then:
+ with(processor, ToDefinition) {
+ endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ }
+ }
+
+ def "definition with secrets (raw)"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "RAW(s3cret)"
+ ''')
+ when:
+ def processor = new ToStepParser().toProcessor(stepContext)
+ then:
+ with(processor, ToDefinition) {
+ endpointUri == 'telegram://bots?authorizationToken=RAW(s3cret)'
+ }
+ }
+
+ def "definition with secrets (property)"() {
+ given:
+ def stepContext = stepContext('''
+ uri: "telegram://bots"
+ parameters:
+ authorizationToken: "#property:telegram.token"
+ ''')
+ when:
+ def processor = new ToStepParser().toProcessor(stepContext)
+ then:
+ with(processor, ToDefinition) {
+ endpointUri == 'telegram://bots?authorizationToken=#property:telegram.token'
+ }
+ }
+
def "definition compact"() {
given:
def node = TextNode.valueOf('seda://test')
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route.yaml
new file mode 100644
index 0000000..f29f6cc
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route.yaml
@@ -0,0 +1,27 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+- route:
+ auto-startup: false
+ from:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "{{telegram.token}}"
+ steps:
+ - to:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "{{telegram.token}}"
\ No newline at end of file
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_property.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_property.yaml
new file mode 100644
index 0000000..d6d80b5
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_property.yaml
@@ -0,0 +1,27 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+- route:
+ auto-startup: false
+ from:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "#property:telegram.token"
+ steps:
+ - to:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "#property:telegram.token"
\ No newline at end of file
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_raw.yaml b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_raw.yaml
new file mode 100644
index 0000000..868587e
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesWithSecretsTest_route_raw.yaml
@@ -0,0 +1,27 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+- route:
+ auto-startup: false
+ from:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "RAW({{telegram.token}})"
+ steps:
+ - to:
+ uri: "telegram:bots"
+ parameters:
+ authorizationToken: "RAW({{telegram.token}})"
\ No newline at end of file