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-kamelets.git
commit 8f71007eda47ff124dc5785e64bea347efdd8d34 Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Fri Feb 23 11:15:31 2024 +0100 Added a Kafka Apicurio Sink secured with Keycloak Kamelet Signed-off-by: Andrea Cosentino <anco...@gmail.com> --- ...not-secured-apicurio-registry-sink.kamelet.yaml | 162 +++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/library/camel-kamelets/src/main/resources/kamelets/kafka-not-secured-apicurio-registry-sink.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/kafka-not-secured-apicurio-registry-sink.kamelet.yaml new file mode 100644 index 00000000..cfb05337 --- /dev/null +++ b/library/camel-kamelets/src/main/resources/kamelets/kafka-not-secured-apicurio-registry-sink.kamelet.yaml @@ -0,0 +1,162 @@ +# --------------------------------------------------------------------------- +# 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/v1 +kind: Kamelet +metadata: + name: kafka-not-secured-apicurio-registry-sink + annotations: + camel.apache.org/kamelet.support.level: "Stable" + camel.apache.org/catalog.version: "4.5.0-SNAPSHOT" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA1MDAgNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MD [...] + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Kafka" + camel.apache.org/kamelet.namespace: "Kafka" + labels: + camel.apache.org/kamelet.type: "sink" +spec: + definition: + title: "Kafka Not Secured with Apicurio Registry Sink secured with Keycloak." + description: |- + Send data to Kafka topics on an insecure broker with Apicurio Registry secured with Keycloak. + + The Kamelet is able to understand the following headers to be set: + + - `key` / `ce-key`: as message key + + - `partition-key` / `ce-partitionkey`: as message partition key + + Both the headers are optional. + + Three headers, if specified, will be deduplicated with different names, kafka.key will be duplicated into kafka.KEY, kafka.topic into kafka.TOPIC and kafka.override_topic into kafka.OVERRIDE_TOPIC + required: + - topic + - bootstrapServers + - apicurioRegistryUrl + - apicurioAuthServiceUrl + - apicurioAuthRealm + - apicurioAuthClientId + - apicurioAuthClientSecret + - apicurioAuthUsername + - apicurioAuthPassword + type: object + properties: + topic: + title: Topic Names + description: Comma separated list of Kafka topic names + type: string + bootstrapServers: + title: Bootstrap Servers + description: Comma separated list of Kafka Broker URLs + type: string + valueSerializer: + title: Value Serializer + description: Serliazer class for value that implements the Serializer interface. + type: string + default: "io.apicurio.registry.serde.avro.AvroKafkaSerializer" + apicurioRegistryUrl: + title: Apicurio Registry URL + description: The Apicurio Schema Registry URL + type: string + x-descriptors: + - urn:keda:metadata:apicurioRegistryUrl + - urn:keda:required + avroDatumProvider: + title: Avro Datum Provider + description: How to write data with Avro + type: string + default: "io.apicurio.registry.serde.avro.ReflectAvroDatumProvider" + apicurioAuthServiceUrl: + title: Apicurio Registry Auth Service URL + description: The URL for Keycloak instance securing the Apicurio Registry + type: string + example: "http://my-keycloak.com:8080/" + apicurioAuthRealm: + title: Apicurio Registry Auth Realm + description: The Realm in Keycloak instance securing the Apicurio Registry + type: string + apicurioAuthClientId: + title: Apicurio Registry Auth Client ID + description: The Client ID in Keycloak instance securing the Apicurio Registry + type: string + apicurioAuthClientSecret: + title: Apicurio Registry Auth Client Secret + description: The Client Secret in Keycloak instance securing the Apicurio Registry + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + - urn:keda:authentication:password + - urn:keda:required + apicurioAuthUsername: + title: Apicurio Registry Auth Username + description: The Username in Keycloak instance securing the Apicurio Registry + type: string + apicurioAuthPassword: + title: Apicurio Registry Auth Password + description: The Password in Keycloak instance securing the Apicurio Registry + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + - urn:keda:authentication:password + - urn:keda:required + dependencies: + - "camel:core" + - "camel:kamelet" + - "camel:kafka" + - "mvn:io.apicurio:apicurio-registry-serdes-avro-serde:2.4.14.Final" + template: + from: + uri: "kamelet:source" + steps: + - choice: + when: + - simple: "${header[key]}" + steps: + - setHeader: + name: kafka.KEY + simple: "${header[key]}" + - simple: "${header[ce-key]}" + steps: + - setHeader: + name: kafka.KEY + simple: "${header[ce-key]}" + - choice: + when: + - simple: "${header[partition-key]}" + steps: + - setHeader: + name: kafka.PARTITION_KEY + simple: "${header[partition-key]}" + - simple: "${header[ce-partitionkey]}" + steps: + - setHeader: + name: kafka.PARTITION_KEY + simple: "${header[ce-partitionkey]}" + - to: + uri: "kafka:{{topic}}" + parameters: + brokers: "{{bootstrapServers}}" + valueSerializer: "{{valueSerializer}}" + additionalProperties.apicurio.registry.url: "{{apicurioRegistryUrl}}" + additionalProperties.apicurio.registry.avro-datum-provider: "{{avroDatumProvider}}" + additionalProperties.apicurio.auth.service.url: "{{apicurioAuthServiceUrl}}" + additionalProperties.apicurio.auth.realm: "{{apicurioAuthRealm}}" + additionalProperties.apicurio.auth.client.id: "{{apicurioAuthClientId}}" + additionalProperties.apicurio.auth.client.secret: "{{apicurioAuthClientSecret}}" + additionalProperties.apicurio.auth.username: "{{apicurioAuthUsername}}" + additionalProperties.apicurio.auth.password: "{{apicurioAuthPassword}}"