From b5f272d0eba44ee9f517f115f452e08dcf8433eb Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Wed, 11 Mar 2026 14:26:07 +0000 Subject: [PATCH] Add kamelet definition: google-sheets-source --- kamelet.yaml | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 kamelet.yaml diff --git a/kamelet.yaml b/kamelet.yaml new file mode 100644 index 0000000..9f9790d --- /dev/null +++ b/kamelet.yaml @@ -0,0 +1,200 @@ +apiVersion: camel.apache.org/v1 +kind: Kamelet +metadata: + name: google-sheets-source + annotations: + camel.apache.org/kamelet.support.level: "Stable" + camel.apache.org/catalog.version: "4.10.2" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA4OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgODg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMERDNTRDO30KCS5zdDF7ZmlsbDojMDg5NjJEO30KCS5zdDJ7ZmlsbDojRkRGRkZGO30KPC9zdHlsZT4KPGcgaWQ9IkxheWVyXzQiPgoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTU4LDg4SDZjLTMuMywwLTYtMi43LTYtNlY2YzAtMy4zLDIuNy02LDYtNmgzNmwyMiwyMnY2MEM2NCw4NS4zLDYxLjMsODgsNTgsODh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDIsMGwyMiwyMkg0MlYweiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTEyLDM0LjV2MjhoNDB2LTI4SDEyeiBNMTcsMzkuNWgxMi41VjQ2SDE3VjM5LjV6IE0xNyw1MWgxMi41djYuNUgxN1Y1MXogTTQ3LDU3LjVIMzQuNVY1MUg0N1Y1Ny41eiBNNDcsNDYKCQlIMzQuNXYtNi41SDQ3VjQ2eiIvPgo8L2c+Cjwvc3ZnPgo=" + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Google Sheets" + camel.apache.org/kamelet.namespace: "GCP" + labels: + camel.apache.org/kamelet.type: "source" +spec: + definition: + title: "Google Sheets Source" + description: |- + Receive data from Google Sheets. + required: + - spreadsheetId + - clientId + - accessToken + - refreshToken + - clientSecret + type: object + properties: + spreadsheetId: + title: Spreadsheet ID + description: The Spreadsheet ID to be used as events source + type: string + clientId: + title: Client Id + description: Client ID of the sheets application + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + clientSecret: + title: Client Secret + description: Client Secret of the sheets application + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + accessToken: + title: Access Token + description: OAuth 2 access token for google sheets application. This typically expires after an hour so refreshToken is recommended for long term usage. + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + refreshToken: + title: Refresh Token + description: OAuth 2 refresh token for google sheets application. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. + type: string + format: password + x-descriptors: + - urn:camel:group:credentials + delay: + title: Delay + description: The number of milliseconds before the next poll + type: integer + default: 500 + repeatCount: + title: Repeat Count + description: Specifies a maximum limit of number of fires + type: integer + applicationName: + title: Application name + description: Google Sheets application name + type: string + splitResults: + title: Split Results + description: True if value range result should be split into rows or columns to process each of them individually. + type: boolean + default: true + range: + title: Cells Range + description: The range of rows and columns in a sheet to get data from. + type: string + example: "A1:B3" + majorDimension: + title: Major Dimension + description: Specifies the major dimension that the given values should use (ROWS or COLUMNS). + type: string + enum: [ "COLUMNS", "ROWS" ] + default: "ROWS" + example: "ROWS" + columnNames: + title: Column Names + description: Optional custom column names that map to cell coordinates based on their position. + type: string + default: "A" + dataTypes: + out: + default: json + headers: + CamelGoogleSheets.range: + title: Range + description: Cells range to write data to. + default: A:A + type: string + CamelGoogleSheets.spreadsheetId: + title: Spreadsheet id + description: The Spreadsheet ID to be used as identifier. + type: string + CamelGoogleSheets.majorDimension: + title: Major dimension + description: Specifies the major dimension that the given values should use (ROWS or COLUMNS). + default: ROWS + type: string + CamelGoogleSheets.columnNames: + title: Column Names + description: Optional custom column names that map to cell coordinates based on their position. + default: A + type: string + CamelGoogleSheets.splitResults: + title: Split Results + description: True if value range result should be split into rows or columns to process each of them individually. + default: "true" + type: boolean + types: + json: + format: "application-json" + description: |- + Json representation of a GoogleSheets ValueRange object that holds all values for the given cell range. + Or Json array of values for a single row/column in the range when 'splitResults' mode is enabled. + mediaType: application/json + json-struct: + format: "google-sheets:application-x-struct" + description: |- + Special Json representation of Google Sheets ValueRange object with just row and column values as a generic JsonNode. + Each cell value is represented by a Json property named after the respective row (A-Z) or column (1-n) depending on the given majorDimension. + Custom column names are supported in order to use custom property names instead of generic row (A-Z) or column (1-n) coordinates. + The produced Json struct is ready to be transformed back into a proper Google Sheets ValueRange object that can be used in an update/append values operation. + mediaType: application/json + cloudevents: + format: "google-sheets-stream:application-cloudevents" + description: |- + Output data type represents Google Sheets Stream response as CloudEvent V1. The data type sets Camel specific CloudEvent headers on the exchange with + respective data from the Spreasheet and its derived object. + headers: + CamelCloudEventID: + title: CloudEvent ID + description: The Camel exchange id set as event id + type: string + CamelCloudEventType: + title: CloudEvent Type + description: The event type + default: "org.apache.camel.event.google.sheets.stream.consume" + type: string + CamelCloudEventSource: + title: CloudEvent Source + description: The event source. By default, the Spreadsheet Id with prefix "google.sheets.stream.". + type: string + CamelCloudEventSubject: + title: CloudEvent Subject + description: The event subject. Usually the Spreadsheet URL. + type: string + CamelCloudEventTime: + title: CloudEvent Time + description: The exchange creation timestamp as event time. + type: string + dependencies: + - "camel:core" + - "camel:jackson" + - "camel:kamelet" + - "camel:google-sheets" + template: + from: + uri: "google-sheets-stream://{{spreadsheetId}}" + parameters: + clientId: "{{clientId}}" + accessToken: "{{accessToken}}" + refreshToken: "{{refreshToken}}" + clientSecret: "{{clientSecret}}" + delay: "{{delay}}" + applicationName: "{{?applicationName}}" + splitResults: "{{splitResults}}" + range: "{{?range}}" + repeatCount: "{{?repeatCount}}" + steps: + - marshal: + json: {} + - setHeader: + name: CamelGoogleSheets.spreadsheetId + simple: "{{spreadsheetId}}" + - setHeader: + name: CamelGoogleSheets.range + simple: "{{?range}}" + - setHeader: + name: CamelGoogleSheets.majorDimension + simple: "{{?majorDimension}}" + - setHeader: + name: CamelGoogleSheets.columnNames + simple: "{{?columnNames}}" + - setHeader: + name: CamelGoogleSheets.splitResults + simple: "{{?splitResults}}" + - to: "kamelet:sink"