From 7fff885dfbc1f0c86b3e2ed35ed44330f8bd883d Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Mon, 12 Oct 2026 02:33:55 +0000 Subject: [PATCH] Add kamelet definition: google-storage-event-based-source --- kamelet.json | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 kamelet.json diff --git a/kamelet.json b/kamelet.json new file mode 100644 index 0000000..a901a90 --- /dev/null +++ b/kamelet.json @@ -0,0 +1,206 @@ +{ + "apiVersion": "camel.apache.org/v1", + "kind": "Kamelet", + "metadata": { + "name": "google-storage-event-based-source", + "annotations": { + "camel.apache.org/kamelet.support.level": "Preview", + "camel.apache.org/catalog.version": "4.22.1", + "camel.apache.org/kamelet.icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0xLjYzMzIzNTQzIDcuMDMyNjA5MzMgMTMxLjI2NTc0NjgyIDExNC40MzkzOTA2NyIgd2lkdGg9IjI1MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2NCIgeDI9IjY0IiB5MT0iNy4wMzQiIHkyPSIxMjAuNzg5Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0Mzg3ZmQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0NjgzZWEiLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9Im0yNy43OSAxMTUuMjE3LTI2LjI1LTQ1LjQ2OGExMS40OTkgMTEuNDk5IDAgMCAxIDAtMTEuNDk5bDI2LjI1LTQ1LjQ2N2ExMS41IDExLjUgMCAwIDEgOS45Ni01Ljc1aDUyLjVhMTEuNSAxMS41IDAgMCAxIDkuOTU5IDUuNzVsMjYuMjUgNDUuNDY3YTExLjQ5OSAxMS40OTkgMCAwIDEgMCAxMS41bC0yNi4yNSA0NS40NjdhMTEuNSAxMS41IDAgMCAxIC05Ljk1OSA1Ljc0OWgtNTIuNWExMS40OTkgMTEuNDk5IDAgMCAxIC05Ljk2LTUuNzV6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0ibTEyMS4wNTQgNzkuNTgtMzEuODM2LTMxLjgzNC01Ljg1OCAxLjIxNC0xNC42MDMtMTQuNjAyLTQuNjczIDguNzM5LTIuNTM0IDEwLjEwOSA0LjI4OSA0LjI5LTguMjM4IDEuNjgyLTExLjI5Ni0xMS4yOTYtNy42NyA3LjM3MyAxNC4xMjMgMTQuMTI1LTE0Ljk3IDExLjkgNDAuMTkzIDQwLjE5MiAxOS41ODEtLjE5eiIgb3BhY2l0eT0iLjA3Ii8+PGcgZmlsbD0iI2ZmZiI+PGNpcmNsZSBjeD0iODUuNTE5IiBjeT0iNTEuNTc2IiByPSI1LjMyNCIvPjxjaXJjbGUgY3g9IjQyLjQ4IiBjeT0iNTEuNTc2IiByPSI1LjMyNCIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iODguODQ5IiByPSI1LjMyNSIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iNjQiIHI9IjguNjAyIi8+PGNpcmNsZSBjeD0iNDIuNDgiIGN5PSI3Ni40MjQiIHI9IjYuNzU4Ii8+PGNpcmNsZSBjeD0iODUuNTE5IiBjeT0iNzYuNDI0IiByPSI2Ljc1OCIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iMzkuMTUxIiByPSI2Ljc1OSIvPjwvZz48L3N2Zz4=", + "camel.apache.org/provider": "Apache Software Foundation", + "camel.apache.org/kamelet.group": "Google Storage Event-based", + "camel.apache.org/kamelet.namespace": "GCP" + }, + "labels": { + "camel.apache.org/kamelet.type": "source" + } + }, + "spec": { + "definition": { + "title": "Google Storage Event-based Source", + "description": "Receive data from Google Pubsub reporting events related to a Google Storage bucket.", + "required": [ + "projectId", + "subscriptionName", + "serviceAccountKey", + "bucketNameOrArn" + ], + "type": "object", + "properties": { + "projectId": { + "title": "Project Id", + "description": "The Google Cloud Pub/Sub Project ID.", + "type": "string" + }, + "subscriptionName": { + "title": "Subscription Name", + "description": "The subscription name.", + "type": "string" + }, + "serviceAccountKey": { + "title": "Service Account Key", + "description": "The service account key to use as credentials for the Pub/Sub publisher/subscriber. You must encode this value in base64.", + "type": "binary", + "x-descriptors": [ + "urn:camel:group:credentials" + ] + }, + "synchronousPull": { + "title": "Synchronous Pull", + "description": "Specifies to synchronously pull batches of messages.", + "type": "boolean", + "default": false + }, + "maxMessagesPerPoll": { + "title": "Max Messages Per Poll", + "description": "The maximum number of messages to receive from the server in a single API call.", + "type": "integer", + "default": 1 + }, + "concurrentConsumers": { + "title": "Concurrent Consumers", + "description": "The number of parallel streams to consume from the subscription.", + "type": "integer", + "default": 1 + }, + "bucketNameOrArn": { + "title": "Bucket Name Or ARN", + "description": "The Google Cloud Storage bucket name or Bucket Amazon Resource Name (ARN).", + "type": "string" + }, + "getObject": { + "title": "Get Object in Bucket", + "description": "If `getObject` is enabled, then the file created in the Bucket is retreived and returned as body, if not only the event is returned as body.", + "type": "boolean", + "default": false + } + } + }, + "dependencies": [ + "camel:kamelet", + "camel:google-pubsub", + "camel:google-storage", + "camel:jackson", + "camel:core" + ], + "template": { + "from": { + "uri": "google-pubsub://{{projectId}}:{{subscriptionName}}", + "parameters": { + "serviceAccountKey": "base64:{{serviceAccountKey}}", + "synchronousPull": "{{synchronousPull}}", + "maxMessagesPerPoll": "{{maxMessagesPerPoll}}", + "concurrentConsumers": "{{concurrentConsumers}}" + }, + "steps": [ + { + "choice": { + "precondition": true, + "when": [ + { + "simple": "${properties:getObject:true}", + "steps": [ + { + "setProperty": { + "name": "google-storage-event-type", + "simple": "${headers.CamelGooglePubsubAttributes[eventType]}" + } + }, + { + "setProperty": { + "name": "google-storage-object-id", + "simple": "${headers.CamelGooglePubsubAttributes[objectId]}" + } + }, + { + "setProperty": { + "name": "google-storage-bucket-id", + "simple": "${headers.CamelGooglePubsubAttributes[bucketId]}" + } + }, + { + "choice": { + "when": [ + { + "simple": "${exchangeProperty.google-storage-event-type} == \"OBJECT_FINALIZE\" && ${exchangeProperty.google-storage-bucket-id} == \"{{bucketNameOrArn}}\"", + "steps": [ + { + "toD": "google-storage:{{bucketNameOrArn}}?serviceAccountKey=base64:{{serviceAccountKey}}&operation=getObject&objectName=${exchangeProperty.google-storage-object-id}" + } + ] + } + ] + } + } + ] + } + ] + } + }, + { + "to": "kamelet:sink" + } + ] + } + } + }, + "propertiesSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Google Storage Event-based Source", + "description": "Receive data from Google Pubsub reporting events related to a Google Storage bucket.", + "required": [ + "projectId", + "subscriptionName", + "serviceAccountKey", + "bucketNameOrArn" + ], + "properties": { + "projectId": { + "type": "string", + "title": "Project Id", + "description": "The Google Cloud Pub/Sub Project ID." + }, + "subscriptionName": { + "type": "string", + "title": "Subscription Name", + "description": "The subscription name." + }, + "serviceAccountKey": { + "type": "string", + "$comment": "type:binary", + "title": "Service Account Key", + "description": "The service account key to use as credentials for the Pub/Sub publisher/subscriber. You must encode this value in base64." + }, + "synchronousPull": { + "type": "boolean", + "title": "Synchronous Pull", + "description": "Specifies to synchronously pull batches of messages.", + "default": false + }, + "maxMessagesPerPoll": { + "type": "integer", + "title": "Max Messages Per Poll", + "description": "The maximum number of messages to receive from the server in a single API call.", + "default": 1 + }, + "concurrentConsumers": { + "type": "integer", + "title": "Concurrent Consumers", + "description": "The number of parallel streams to consume from the subscription.", + "default": 1 + }, + "bucketNameOrArn": { + "type": "string", + "title": "Bucket Name Or ARN", + "description": "The Google Cloud Storage bucket name or Bucket Amazon Resource Name (ARN)." + }, + "getObject": { + "type": "boolean", + "title": "Get Object in Bucket", + "description": "If `getObject` is enabled, then the file created in the Bucket is retreived and returned as body, if not only the event is returned as body.", + "default": false + } + } + } +} \ No newline at end of file