You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/07 13:51:53 UTC
[camel] 02/08: CAMEL-17261: camel-yaml-dsl - Add support for loading Camel K KameletBinding file. WIP.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 65d9ed1dce2446d5d26013f15f20818319de7e6b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 7 07:58:51 2021 +0100
CAMEL-17261: camel-yaml-dsl - Add support for loading Camel K KameletBinding file. WIP.
---
.../camel/dsl/yaml/YamlRoutesBuilderLoader.java | 14 +++++
.../camel/dsl/yaml/KameletBindingLoaderTest.groovy | 5 +-
.../resources/kamelets/error-handler.kamelet.yaml | 73 ++++++++++++++++++++++
3 files changed, 90 insertions(+), 2 deletions(-)
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index fa7ca59..2bd9348 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -36,6 +36,7 @@ import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.VerbDefinition;
import org.apache.camel.spi.CamelContextCustomizer;
import org.apache.camel.spi.annotations.RoutesLoader;
+import org.apache.camel.support.IntrospectionSupport;
import org.apache.camel.util.URISupport;
import org.snakeyaml.engine.v2.nodes.MappingNode;
import org.snakeyaml.engine.v2.nodes.Node;
@@ -236,6 +237,19 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
String ehName = asText(nt.getKeyNode());
if ("dead-letter-channel".equals(ehName)) {
DeadLetterChannelBuilder dlcb = new DeadLetterChannelBuilder();
+
+ // endpoint
+ MappingNode endpoint = asMappingNode(nodeAt(nt.getValueNode(), "/endpoint"));
+ String dlq = extractCamelEndpointUri(endpoint);
+ dlcb.setDeadLetterUri(dlq);
+
+ // properties (TODO: via reflection - need builder)
+ MappingNode prop = asMappingNode(nodeAt(nt.getValueNode(), "/parameters"));
+ Map<String, Object> params = asMap(prop);
+ if (params != null) {
+ IntrospectionSupport.setProperties(getCamelContext(), getCamelContext().getTypeConverter(), dlcb, params);
+ }
+ route.errorHandler(dlcb);
}
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
index d80319e..b2f6c81 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
@@ -24,7 +24,7 @@ class KameletBindingLoaderTest extends YamlTestSupport {
def doSetup() {
context.start()
}
-
+/*
def "kamelet binding from kamelet to kamelet"() {
when:
loadBindings('''
@@ -244,6 +244,7 @@ class KameletBindingLoaderTest extends YamlTestSupport {
when:
// stub kafka for testing as it requires to setup connection to a real kafka broker
+ context.removeComponent("kafka")
context.addComponent("kafka", context.getComponent("stub"))
loadBindings('''
@@ -277,7 +278,7 @@ class KameletBindingLoaderTest extends YamlTestSupport {
}
}
}
-
+*/
def "kamelet binding with error handler"() {
when:
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml
new file mode 100644
index 0000000..7fcd6bd
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/resources/kamelets/error-handler.kamelet.yaml
@@ -0,0 +1,73 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+apiVersion: camel.apache.org/v1alpha1
+kind: Kamelet
+metadata:
+ name: error-handler
+spec:
+ definition:
+ title: "DLC and Log"
+ description: "Push an event to a kafka topic and log an error message"
+ required:
+ - kafka-brokers
+ - kafka-topic
+ - kafka-service-account-id
+ - kafka-service-account-secret
+ - log-message
+ properties:
+ kafka-brokers:
+ title: Kafka Brokers
+ description: the bootstrap server
+ type: string
+ example: "xyz-ins--rplssqfz-yyyyyyy-crojg.bf2.kafka.my-clud-service.com:443"
+ kafka-topic:
+ title: Kafka Topic
+ description: the DLC topic
+ type: string
+ example: "my-dlc"
+ kafka-service-account-id:
+ title: Service Account ID
+ description: the SA to use
+ type: string
+ example: "srvc-acct-xxxxxx-519b-453f-9f68-yyyyyyyyy"
+ kafka-service-account-secret:
+ title: Service Account Secret
+ description: the SA secrete to use
+ type: string
+ example: "xxxxxxxxx-46c7-4c6c-a753-yyyyyyyyyyyyyyy"
+ log-message:
+ title: Message
+ description: A message warning to log
+ type: string
+ example: "error while checking the source"
+ flow:
+ from:
+ uri: kamelet:source
+ steps:
+ # First step: send to the DLC for future processing
+ - to:
+ uri: kafka:{{kafka-topic}}
+ parameters:
+ brokers: "{{kafka-brokers}}"
+ security-protocol: SASL_SSL
+ sasl-mechanism: PLAIN
+ sasl-jaas-config: "org.apache.kafka.common.security.plain.PlainLoginModule required username={{kafka-service-account-id}} password={{kafka-service-account-secret}};"
+ # Log an error message to notify about the failure
+ - set-body:
+ constant: "{{log-message}} - worry not, the event is stored in the DLC"
+ - to: "log:error-sink"