From ea6f140298f0a55bc835c6c308483b4b26ddb626 Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Wed, 11 Mar 2026 14:26:05 +0000 Subject: [PATCH] Add kamelet definition: google-sheets-sink --- kamelet.yaml | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 kamelet.yaml diff --git a/kamelet.yaml b/kamelet.yaml new file mode 100644 index 0000000..8e0e3ce --- /dev/null +++ b/kamelet.yaml @@ -0,0 +1,167 @@ +apiVersion: camel.apache.org/v1 +kind: Kamelet +metadata: + name: google-sheets-sink + 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: "sink" +spec: + definition: + title: "Google Sheets Sink" + description: |- + Send data to Google Sheets and update/append values on a spreadsheet. + required: + - spreadsheetId + - clientId + - accessToken + - refreshToken + - clientSecret + type: object + properties: + spreadsheetId: + title: Spreadsheet ID + description: The Spreadsheet ID to be used as identifier + 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 + applicationName: + title: Application Name + description: Google Sheets application name + type: string + operation: + title: Operation Mode + description: Operation to execute (update or append) + type: string + enum: [ "update", "append" ] + default: append + example: append + range: + title: Cells Range + description: The cell range of rows and columns to write data to. + 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" + valueInputOption: + title: Value Input Option + description: Controls how the entered values should be be interpreted when adding them. + type: string + enum: [ "USER_ENTERED", "RAW" ] + default: "USER_ENTERED" + example: "USER_ENTERED" + dataTypes: + in: + default: json-struct + types: + 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 given Json struct is ready to be transformed into a proper Google Sheets ValueRange object that can be used in the update/append values operation. + The data type uses a set of header entries to determine properties such as spreadsheetId, the target cell range, the majorDimension and so on. + 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.valueInputOption: + title: Value Input Option + description: Controls how the entered values should be be interpreted when adding them. + default: USER_ENTERED + type: string + mediaType: application/json + dependencies: + - "camel:core" + - "camel:jackson" + - "camel:kamelet" + - "camel:google-sheets" + template: + from: + uri: "kamelet:source" + steps: + - 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.valueInputOption + simple: "{{?valueInputOption}}" + - transform: + toType: "google-sheets:application-x-struct" + - to: + uri: "google-sheets:data/{{operation}}" + parameters: + spreadsheetId: "{{spreadsheetId}}" + clientId: "{{clientId}}" + accessToken: "{{accessToken}}" + refreshToken: "{{refreshToken}}" + clientSecret: "{{clientSecret}}" + applicationName: "{{?applicationName}}" + range: "{{?range}}"