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.10.2" 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. Service account key is the basic method for authenticating to the Google Pubsub and Google Storage. To use this Kamelet you'll need to set up Events notification for your Google Storage Bucket. You must encode the `serviceAccountKey` property before you pass it as a parameter. 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 will be get and returned as body, if not only the event will be 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'