{ "apiVersion": "camel.apache.org/v1", "kind": "Kamelet", "metadata": { "name": "azure-storage-blob-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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgODEgODIiIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI0EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9IkEiIG92ZXJmbG93PSJ2aXNpYmxlIj48cGF0aCBkPSJNMS4zMzMgMEMuNTMzIDAgMCAuNTMzIDAgMS4zMzN2MTZjMCAuOC41MzMgMS4zMzMgMS4zMzMgMS4zMzNoOGMuOCAwIDEuMzMzLS41MzMgMS4zMzMtMS4zMzN2LTYuNjY2aDU4LjY2N3Y2LjY2N2MwIC44LjUzMyAxLjMzMyAxLjYgMS4zMzNoNy43MzNjLjggMCAxLjMzMy0uNTMzIDEuMzMzLTEuMzMzdi04LThDODAgLjUzMyA3OS40NjcgMCA3OC42NjcgMGgwSDEuMzMzem03Ny4zMzQgODBjLjggMCAxLjMzMy0uNTMzIDEuMzMzLTEuMzMzVjYyLjkzNGMwLS44LS41MzMtMS4zMzMtMS4zMzMtMS4zMzNoLTcuNzMzYy0uOCAwLTEuMzMzLjUzMy0xLjMzMyAxLjMzM3Y2LjRIMTAuNjY3di02LjY2N2MwLS44LS41MzMtMS4zMzMtMS42LTEuMzMzSDEuMzMzYy0uOCAwLTEuMzMzLjUzMy0xLjMzMyAxLjZ2MTUuNzMzQzAgNzkuNDY3LjUzMyA4MCAxLjMzMyA4MGg3Ny4zMzR6IiBmaWxsPSIjMDA3MmM2IiBzdHJva2U9Im5vbmUiLz48cGF0aCBkPSJNMjkuNTE5IDM2LjQ0N2wzLjQ1Mi0zLjQ1MiAyLjU1NiAyLjU1Ni0zLjQ1MiAzLjQ1MXptNS4wMDctNS4wMDhsMy40NTYtMy40NTYgMi41NiAyLjU2TDM3LjA4NiAzNHptNy41Ny0yLjQ2M2wtMi41Ni0yLjU0NCAzLjQyNC0zLjQyNCAyLjU2IDIuNTQ0ek0zOS41MzUgNTIuNWwyLjU2MS0yLjU2IDMuNDI0IDMuNDI2LTIuNTYxIDIuNTZ6bS0xLjU1MS0xLjU3MmwtMy40NTYtMy40NTYgMi41Ni0yLjU0NCAzLjQ1NiAzLjQ1NnptLTUuMDA4LTUuMDA4bC0zLjQ1Ni0zLjQ1NiAyLjU2LTIuNTQ0IDMuNDQgMy40NHoiIHN0cm9rZT0ibm9uZSIgZmlsbD0iI2I4ZDQzMiIvPjxwYXRoIGQ9Ik01Ny44MSAyNC4zOTVhNC40NCA0LjQ0IDAgMCAxLTMuMTU4IDEuMzA5IDQuNDMgNC40MyAwIDAgMS0zLjE1OC0xLjMwOWwtNi4wNTMtNi4wNTN2MTIuMzA2aDE4LjQyNFYxOC4zNDJsLTYuMDU0IDYuMDUzem0tMy4xNjEuNDA5YTMuNTQgMy41NCAwIDAgMCAyLjUyMy0xLjA0NWw2LjY5LTYuNjl2LS4zNTVINDUuNDM4di4zNTVsNi42OSA2LjY5YTMuNTQgMy41NCAwIDAgMCAyLjUyMiAxLjA0NXptMy4xNjEgMzEuMTVhNC40NCA0LjQ0IDAgMCAxLTMuMTU4IDEuMzA5IDQuNDMgNC40MyAwIDAgMS0zLjE1OC0xLjMwOWwtNi4wNTMtNi4wNTN2MTIuMzA2aDE4LjQyNFY0OS45MDFsLTYuMDU0IDYuMDUzem0tMy4xNjEuNDFhMy41NCAzLjU0IDAgMCAwIDIuNTIzLTEuMDQ1bDYuNjktNi42ODl2LS4zNTVINDUuNDM4di4zNTVsNi42OSA2LjY4OWEzLjU0IDMuNTQgMCAwIDAgMi41MjIgMS4wNDV6TTE5LjcxOCA0MC41OTljLTEuMzQ0IDEuMzQ0LTMuMTMzIDIuMDg1LTUuMDM1IDIuMDg1cy0zLjY5LS43NDEtNS4wMzUtMi4wODVMMCAzMC45NDl2MTkuNjEzaDI5LjM2NlYzMC45NDlsLTkuNjQ4IDkuNjV6bS01LjAzNS42NTJhNS42NSA1LjY1IDAgMCAwIDQuMDIyLTEuNjY2bDEwLjY2MS0xMC42NjF2LS41NjVIMHYuNTY2bDEwLjY2MSAxMC42NjFhNS42NiA1LjY2IDAgMCAwIDQuMDIyIDEuNjY0eiIgc3Ryb2tlPSJub25lIiBmaWxsPSIjNTliNGQ5Ii8+PC9zeW1ib2w+PC9zdmc+", "camel.apache.org/provider": "Apache Software Foundation", "camel.apache.org/kamelet.group": "Azure Storage Blob Event Based", "camel.apache.org/kamelet.namespace": "Azure" }, "labels": { "camel.apache.org/kamelet.type": "source" } }, "spec": { "definition": { "title": "Azure Storage Blob Event-based Source", "description": "Receive data from Azure Service Bus subscribed to Azure Eventgrid reporting events related to a Azure Storage Blob account.", "required": [ "topicOrQueueName", "connectionString", "accountName", "containerName" ], "type": "object", "properties": { "topicOrQueueName": { "title": "Topic Or Queue Name", "description": "Topic Or Queue Name for the Azure Servicebus instance", "type": "string" }, "connectionString": { "title": "Connection String", "description": "Connection String for Azure Servicebus instance", "type": "string", "format": "password", "x-descriptors": [ "urn:camel:group:credentials" ] }, "serviceBusReceiveMode": { "title": "Servicebus Receive Mode", "description": "Sets the receive mode for the receiver.", "type": "string", "default": "RECEIVE_AND_DELETE", "enum": [ "RECEIVE_AND_DELETE", "PEEK_LOCK" ] }, "subscriptionName": { "title": "Subscription Name", "description": "Sets the name of the subscription in the topic to listen to. This parameter is mandatory in case of topic.", "type": "string" }, "accountName": { "title": "Account Name", "description": "The Azure Storage Blob account name.", "type": "string", "x-descriptors": [ "urn:camel:group:credentials" ] }, "containerName": { "title": "Container Name", "description": "The Azure Storage Blob container name.", "type": "string" }, "accessKey": { "title": "Access Key", "description": "The Azure Storage Blob access key.", "type": "string", "format": "password", "x-descriptors": [ "urn:camel:group:credentials" ] }, "clientId": { "title": "Client Id", "description": "The Azure Storage Blob client Id.", "type": "string", "format": "password", "x-descriptors": [ "urn:camel:group:credentials" ] }, "clientSecret": { "title": "Client Secret", "description": "The Azure Storage Blob client secret.", "type": "string", "format": "password", "x-descriptors": [ "urn:camel:group:credentials" ] }, "tenantId": { "title": "Tenant Id", "description": "The Azure Storage Blob tenant id.", "type": "string", "format": "password", "x-descriptors": [ "urn:camel:group:credentials" ] }, "credentialType": { "title": "Credential Type", "description": "Determines the credential strategy to adopt.", "type": "string", "default": "SHARED_ACCOUNT_KEY", "enum": [ "SHARED_ACCOUNT_KEY", "SHARED_KEY_CREDENTIAL", "AZURE_IDENTITY", "CLIENT_SECRET" ] }, "getBlob": { "title": "Get Object in Container", "description": "If `getBlob` is enabled, then the file created in the container is retrieved and returned as body. If not only the event is returned as body.", "type": "boolean", "default": false } } }, "types": { "out": { "mediaType": "application/octet-stream" } }, "dependencies": [ "camel:azure-servicebus", "camel:azure-storage-blob", "camel:kamelet", "camel:core", "camel:jsonpath", "camel:jackson" ], "template": { "from": { "uri": "azure-servicebus:{{topicOrQueueName}}", "parameters": { "connectionString": "{{connectionString}}", "serviceBusReceiveMode": "{{serviceBusReceiveMode}}", "subscriptionName": "{{?subscriptionName}}" }, "steps": [ { "choice": { "precondition": true, "when": [ { "simple": "${properties:getBlob:true}", "steps": [ { "setBody": { "simple": "${body.toString()}" } }, { "unmarshal": { "json": { "library": "Jackson", "unmarshalType": "com.fasterxml.jackson.databind.JsonNode" } } }, { "setProperty": { "name": "azure-storage-blob-event-type", "jsonpath": "$.eventType" } }, { "setProperty": { "name": "azure-storage-blob-subject", "jsonpath": "$.subject" } }, { "setProperty": { "name": "azure-storage-blob-blob-name", "simple": "${exchangeProperty.azure-storage-blob-subject.substring(${exchangeProperty.azure-storage-blob-subject.lastIndexOf(\"/\")}++)}" } }, { "log": "${exchangeProperty.azure-storage-blob-event-type} - ${exchangeProperty.azure-storage-blob-subject} - ${exchangeProperty.azure-storage-blob-blob-name}" }, { "choice": { "when": [ { "simple": "${exchangeProperty.azure-storage-blob-event-type} == \"Microsoft.Storage.BlobCreated\" && ${exchangeProperty.azure-storage-blob-subject} contains \"{{containerName}}\"", "steps": [ { "toD": "azure-storage-blob:{{accountName}}/{{containerName}}?accessKey=RAW({{?accessKey}})&azureClientId=RAW({{?clientId}})&azureClientSecret=RAW({{?clientSecret}})&azureTenantId=RAW({{?tenantId}})&operation=getBlob&blobName=${exchangeProperty.azure-storage-blob-blob-name}&credentialType={{credentialType}}" } ] } ] } } ] } ] } }, { "to": "kamelet:sink" } ] } } }, "propertiesSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Azure Storage Blob Event-based Source", "description": "Receive data from Azure Service Bus subscribed to Azure Eventgrid reporting events related to a Azure Storage Blob account.", "required": [ "topicOrQueueName", "connectionString", "accountName", "containerName" ], "properties": { "topicOrQueueName": { "type": "string", "title": "Topic Or Queue Name", "description": "Topic Or Queue Name for the Azure Servicebus instance" }, "connectionString": { "type": "string", "title": "Connection String", "description": "Connection String for Azure Servicebus instance", "format": "password" }, "serviceBusReceiveMode": { "type": "string", "title": "Servicebus Receive Mode", "description": "Sets the receive mode for the receiver.", "enum": [ "RECEIVE_AND_DELETE", "PEEK_LOCK" ], "default": "RECEIVE_AND_DELETE" }, "subscriptionName": { "type": "string", "title": "Subscription Name", "description": "Sets the name of the subscription in the topic to listen to. This parameter is mandatory in case of topic." }, "accountName": { "type": "string", "title": "Account Name", "description": "The Azure Storage Blob account name." }, "containerName": { "type": "string", "title": "Container Name", "description": "The Azure Storage Blob container name." }, "accessKey": { "type": "string", "title": "Access Key", "description": "The Azure Storage Blob access key.", "format": "password" }, "clientId": { "type": "string", "title": "Client Id", "description": "The Azure Storage Blob client Id.", "format": "password" }, "clientSecret": { "type": "string", "title": "Client Secret", "description": "The Azure Storage Blob client secret.", "format": "password" }, "tenantId": { "type": "string", "title": "Tenant Id", "description": "The Azure Storage Blob tenant id.", "format": "password" }, "credentialType": { "type": "string", "title": "Credential Type", "description": "Determines the credential strategy to adopt.", "enum": [ "SHARED_ACCOUNT_KEY", "SHARED_KEY_CREDENTIAL", "AZURE_IDENTITY", "CLIENT_SECRET" ], "default": "SHARED_ACCOUNT_KEY" }, "getBlob": { "type": "boolean", "title": "Get Object in Container", "description": "If `getBlob` is enabled, then the file created in the container is retrieved and returned as body. If not only the event is returned as body.", "default": false } } } }