From 0910a8fc70c635ebaf7bfdb4deed0c5d046b0f8a Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Mon, 12 Oct 2026 02:35:42 +0000 Subject: [PATCH] Add kamelet definition: mysql-source --- kamelet.json | 196 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 kamelet.json diff --git a/kamelet.json b/kamelet.json new file mode 100644 index 0000000..b6d2cbe --- /dev/null +++ b/kamelet.json @@ -0,0 +1,196 @@ +{ + "apiVersion": "camel.apache.org/v1", + "kind": "Kamelet", + "metadata": { + "name": "mysql-source", + "annotations": { + "camel.apache.org/kamelet.support.level": "Stable", + "camel.apache.org/catalog.version": "4.22.1", + "camel.apache.org/kamelet.icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmVyc2lvbj0iMS4wIj4KIDxyZWN0IGZpbGw9IiMyNjU1N2MiIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgeD0iLTMwIiB5PSItMzAiIHJ4PSIxLjQiIHJ5PSIxLjQiIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCwwLDApIi8+CiA8cGF0aCBvcGFjaXR5PSIuMiIgZD0ibTguMDI1NCA4LjAwMDFjLTAuNzgyNS0wLjAxNjYtMS4xNDk0IDAuNTI0NC0wLjk4ODMgMS40NTcgMC4wNTIgMC4zMDA2IDAuMzE1MiAwLjcyOTkgMC44ODI4IDEuNDQxOSAwLjYzMTIyIDAuNzkwOSAwLjg4NTE0IDEuMjIyNyAxLjE2MDIgMS45NzA3IDAuNDMzNiAxLjE3OTMgMC42MzQwMyAxLjU3NDggMC45ODYzMyAxLjk0MzQgMC4yNzM2NiAwLjI4NjMgMC4yNzM2OSAwLjI4NzEyIDAuMDg5ODQgMC44NzEwOS0wLjI4NTA3IDAuOTA1NTYtMC4zNDQwNyAyLjcyMDctMC4xMTUyMyAzLjU3NDIgMC4zNDI0OCAxLjI3NzQgMC43NjQwMiAxLjg1NzQgMS4zNTE2IDEuODU3NCAwLjQxOTY4IDAgMC43NjM2NC0wLjM1MDkyIDAuODg2NzItMC45MDQzIDAuMDQyNjgtMC4xOTE4NiAwLjEyMjQ5LTAuNDY2MDcgMC4xNzc3My0wLjYwOTM4IDAuMDk1MzUtMC4yNDcyOCAwLjEyMDkzLTAuMjI4MTggMC40OTQxNCAwLjM4MDg2IDAuMjE2MjggMC4zNTI5NiAwLjYyODY2IDAuODc4NjEgMC45MTYwMiAxLjE2OCAwLjY2MzggMC42Njg0NSAxLjU3NDkgMS40MjE3IDEuNjQwNiAxLjM1NzQgMC4wMjc3NS0wLjAyNzEzLTAuMjM4LTAuNDIxNzctMC41ODk4NC0wLjg3ODkxcy0xLjAxNTEtMS41MTg5LTEuNDc0Ni0yLjM1OTRjLTAuNTM1OTMtMC45ODAyOS0wLjg5OTctMS41Mjg2LTEuMDEzNy0xLjUyOTMtMC4zNzA0NS0wLjAwMjUtMC43MTU4OCAwLjU4MDA0LTAuOTE2MDIgMS41NDY5LTAuMjMwNTYgMS4xMTM4LTAuNjM2NzUgMC45MjcwOC0wLjk2NjgtMC40NDUzMS0wLjE5MDE5LTAuNzkwODUtMC4wOTEwNi0xLjg1NiAwLjI2MzY3LTIuODUzNSAwLjE2MTM3LTAuNDUzNzYgMC4yOTI5Ny0wLjg3MzczIDAuMjkyOTctMC45MzE2NHMtMC4yNTczMS0wLjU0MzQ4LTAuNTcyMjctMS4wODAxYy0wLjMxNS0wLjUzNy0wLjY4NTEtMS4yOTctMC44MjItMS42OS0wLjMzMjYtMC45NTQtMC40OTA1LTEuMjMyLTEuMTU4Mi0yLjA0My0wLjY4NzktMC44MzQ2LTAuNzUzLTEuMjIwMy0wLjIwNTEtMS4yMTY2IDAuNDI1NTQgMC4wMDI4MSAxLjExMjMgMC4yODk0NCAxLjgwMjcgMC43NTM5MSAwLjQzNzEgMC4yOTQwNCAwLjU4NTIzIDAuMzMzOTggMS4yODcxIDAuMzMzOTggMC44ODE0MiAwIDEuMDcwOSAwLjA3MjIgMi4yOTMgMC44NzY5NSAxLjI0NDUgMC44MTk1OCAyLjE3MjIgMS41ODEzIDIuODE0NSAyLjMxMjUgMC41NzA0IDAuNjQ5MzcgMC44ODIwMSAxLjIxMzggMi41NjA1IDQuNjU2MiAwLjY0NDMzIDEuMzIxNCAxLjIxNTggMS45NTkzIDIuMDAzOSAyLjIzMjQgMS4yMTczIDAuNDIxODUgMS42MzE3IDAuNjEzMTQgMi4xNjggMC45OTgwNWwwLjU2NjQxIDAuNDA2MjUtMC4zODA4NiAwLjA3NDIyYy0wLjIxMDMgMC4wNDAzMy0wLjY2ODQ3IDAuMTA2MTYtMS4wMTc2IDAuMTQ2NDgtMC43Mjc0MSAwLjA4NC0xLjIwMzEgMC4zODU3My0xLjIwMzEgMC43NjM2NyAwIDAuNDI1OTIgMS40NTEzIDEuNjQ1MyAyLjkwNjIgMi40NDE0IDAuNjk5MDMgMC4zODI0NyAxLjM3MTYgMC43NTkyNyAxLjQ5NDEgMC44Mzc4OSAwLjMyNTk4IDAuMjA5MjIgMC40MTQyNCAwLjE4Mzg5IDAuMzMwMDgtMC4wOTE4LTAuMTc2MjQtMC41NzczOC0wLjc3Mjc5LTEuMTM5OC0yLjQyOTctMi4yOTQ5LTAuOTcxOTctMC42Nzc2LTAuOTgxOTktMC42NTI0NCAwLjMxNjQxLTAuNzgxMjUgMC45MjUtMC4wOTEgMS4zOTItMC4yNDkgMS4zOTItMC40NzIgMC0wLjEwMi0wLjQ3LTAuNjQ0LTEuMDQ1LTEuMjAzLTAuOS0wLjg3Ni0xLjIwNC0xLjA5NC0yLjE5NS0xLjU3Ny0xLjM1LTAuNjU2LTEuODQyLTEuMTc3LTIuMTUzLTIuMjgzLTAuNDY0LTEuNjQ5LTEuNzEyLTMuNTg3LTMuMzcxLTUuMjMtMS43MTItMS42OTYtMy4zNDctMi42MzQ0LTQuODQ1LTIuNzgxNC0wLjYwOS0wLjA1OTgtMC45MjQtMC4xNTIyLTEuMjM5LTAuMzY1My0wLjUzMzItMC4zNjExLTEuNzcxNy0wLjc2ODQtMi4zNzY2LTAuNzgxMnptMi45NjI5IDMuMDAyYy0wLjEyMjY2LTAuMDA3OS0wLjIyOTQ1IDAuMDA4NS0wLjMwMjczIDAuMDU4NTktMC4yNzM0MSAwLjE4Njk5LTAuMjQwOTkgMC40MTUwNCAwLjA4MDA4IDAuNTU2NjQgMC4xNTA5MiAwLjA2NjU2IDAuMzY1MDEgMC4zMDE0NyAwLjQ3NjU2IDAuNTIxNDggMC4zNzUxIDAuNzM5NzggMC45NDk4NSAwLjI0NDUgMC42OTMzNi0wLjU5NzY2LTAuMDgwODUtMC4yNjU0Ni0wLjU3OTMtMC41MTU0Ny0wLjk0NzI3LTAuNTM5MDZ6Ii8+CiA8cGF0aCBmaWxsPSIjZmZmIiBkPSJtOC4wMjU0IDdjLTAuNzgyNS0wLjAxNjYtMS4xNDk0IDAuNTI0NC0wLjk4ODMgMS40NTcgMC4wNTIgMC4zMDA2IDAuMzE1MiAwLjczMDIgMC44ODI4IDEuNDQxNCAwLjYzMTIgMC43OTA2IDAuODg1MiAxLjIyMjYgMS4xNjAyIDEuOTcwNiAwLjQzMzYgMS4xNzkgMC42MzQgMS41NzUgMC45ODU5IDEuOTQzIDAuMjc0IDAuMjg3IDAuMjc0IDAuMjg4IDAuMDkgMC44NzItMC4yODQ4IDAuOTA1LTAuMzQzOCAyLjcyLTAuMTE1IDMuNTc0IDAuMzQyIDEuMjc3IDAuNzY0IDEuODU3IDEuMzUyIDEuODU3IDAuNDE5IDAgMC43NjMtMC4zNTEgMC44ODYtMC45MDQgMC4wNDMtMC4xOTIgMC4xMjMtMC40NjYgMC4xNzgtMC42MDkgMC4wOTUtMC4yNDggMC4xMjEtMC4yMjkgMC40OTQgMC4zOCAwLjIxNiAwLjM1MyAwLjYyOSAwLjg3OSAwLjkxNiAxLjE2OCAwLjY2NCAwLjY2OSAxLjU3NSAxLjQyMiAxLjY0MSAxLjM1OCAwLjAyOC0wLjAyNy0wLjIzOC0wLjQyMi0wLjU5LTAuODc5cy0xLjAxNS0xLjUxOS0xLjQ3NS0yLjM1OWMtMC41MzYtMC45ODEtMC44OTktMS41MjktMS4wMTMtMS41My0wLjM3MS0wLjAwMi0wLjcxNiAwLjU4LTAuOTE2IDEuNTQ3LTAuMjMxIDEuMTE0LTAuNjM3IDAuOTI3LTAuOTY3LTAuNDQ1LTAuMTktMC43OTEtMC4wOTEtMS44NTYgMC4yNjQtMi44NTQgMC4xNjEtMC40NTMgMC4yOTMtMC44NzMgMC4yOTMtMC45MzFzLTAuMjU4LTAuNTQ0LTAuNTczLTEuMDhjLTAuMzE1LTAuNTM3LTAuNjg1MS0xLjI5Ny0wLjgyMi0xLjY5LTAuMzMyNi0wLjk1NC0wLjQ5MDUtMS4yMzItMS4xNTgyLTIuMDQyOS0wLjY4NzktMC44MzQ4LTAuNzUzLTEuMjIwNC0wLjIwNTEtMS4yMTY4IDAuNDI1NSAwLjAwMjkgMS4xMTIzIDAuMjg5NSAxLjgwMjMgMC43NTM5IDAuNDM4IDAuMjk0MSAwLjU4NiAwLjMzNCAxLjI4OCAwLjMzNCAwLjg4MSAwIDEuMDcgMC4wNzIyIDIuMjkzIDAuODc3IDEuMjQ0IDAuODE5OCAyLjE3MiAxLjU4MTggMi44MTQgMi4zMTI4IDAuNTcgMC42NDkgMC44ODIgMS4yMTQgMi41NjEgNC42NTYgMC42NDQgMS4zMjEgMS4yMTUgMS45NTkgMi4wMDMgMi4yMzIgMS4yMTggMC40MjIgMS42MzIgMC42MTMgMi4xNjggMC45OThsMC41NjcgMC40MDctMC4zODEgMC4wNzRjLTAuMjEgMC4wNC0wLjY2OSAwLjEwNi0xLjAxOCAwLjE0Ni0wLjcyNyAwLjA4NC0xLjIwMyAwLjM4Ni0xLjIwMyAwLjc2NCAwIDAuNDI2IDEuNDUxIDEuNjQ1IDIuOTA2IDIuNDQxIDAuNyAwLjM4MyAxLjM3MiAwLjc2IDEuNDk1IDAuODM4IDAuMzI2IDAuMjEgMC40MTQgMC4xODQgMC4zMy0wLjA5MS0wLjE3Ny0wLjU3OC0wLjc3My0xLjE0LTIuNDMtMi4yOTUtMC45NzItMC42NzgtMC45ODItMC42NTMgMC4zMTYtMC43ODIgMC45MjYtMC4wOTIgMS4zOTMtMC4yNSAxLjM5My0wLjQ3MiAwLTAuMTAyLTAuNDctMC42NDQtMS4wNDUtMS4yMDMtMC45LTAuODc3LTEuMjA0LTEuMDk0LTIuMTk1LTEuNTc3LTEuMzUtMC42NTYtMS44NDItMS4xNzctMi4xNTMtMi4yODMtMC40NjQtMS42NS0xLjcxMi0zLjU4Ny0zLjM3MS01LjIzLTEuNzEyLTEuNjk2NS0zLjM0Ny0yLjYzNDUtNC44NDUtMi43ODE1LTAuNjA5LTAuMDU5OC0wLjkyNC0wLjE1MjItMS4yMzktMC4zNjUzLTAuNTMzMi0wLjM2MTEtMS43NzE3LTAuNzY4NC0yLjM3NjYtMC43ODEyem0yLjk2MjYgMy4wMDJjLTAuMTIyLTAuMDA3OS0wLjIyOSAwLjAwOC0wLjMwMiAwLjA1OS0wLjI3NCAwLjE4Ny0wLjI0MSAwLjQxNSAwLjA4IDAuNTU2IDAuMTUxIDAuMDY3IDAuMzY1IDAuMzAyIDAuNDc2IDAuNTIyIDAuMzc1IDAuNzM5IDAuOTUgMC4yNDQgMC42OTQtMC41OTgtMC4wODEtMC4yNjUtMC41OC0wLjUxNS0wLjk0OC0wLjUzOXoiLz4KIDxwYXRoIGZpbGw9IiNmZmYiIG9wYWNpdHk9Ii4xIiBkPSJtMy40MDA0IDJjLTAuNzc1NiAwLTEuNDAwNCAwLjYyNDgtMS40MDA0IDEuNDAwNHYxYzAtMC43NzU2IDAuNjI0OC0xLjQwMDQgMS40MDA0LTEuNDAwNGgyNS4yYzAuNzc1IDAgMS40IDAuNjI0OCAxLjQgMS40MDA0di0xYzAtMC43NzU2LTAuNjI1LTEuNDAwNC0xLjQtMS40MDA0aC0yNS4yeiIvPgogPHBhdGggb3BhY2l0eT0iLjIiIGQ9Im0yIDI4LjZ2MWMwIDAuNzc1IDAuNjI0OCAxLjQgMS40MDA0IDEuNGgyNS4yYzAuNzc1IDAgMS40LTAuNjI1IDEuNC0xLjR2LTFjMCAwLjc3NS0wLjYyNSAxLjQtMS40IDEuNGgtMjUuMmMtMC43NzUyIDAtMS40LTAuNjI1LTEuNC0xLjR6Ii8+Cjwvc3ZnPgo=", + "camel.apache.org/provider": "Apache Software Foundation", + "camel.apache.org/kamelet.group": "SQL", + "camel.apache.org/kamelet.namespace": "Database" + }, + "labels": { + "camel.apache.org/kamelet.type": "source" + } + }, + "spec": { + "definition": { + "title": "MySQL Source", + "description": "Query data from a MySQL Database.", + "required": [ + "serverName", + "username", + "password", + "query", + "databaseName" + ], + "type": "object", + "properties": { + "serverName": { + "title": "Server Name", + "description": "The server name for the data source.", + "type": "string", + "example": "localhost" + }, + "serverPort": { + "title": "Server Port", + "description": "The server port for the data source.", + "type": "string", + "default": 3306 + }, + "username": { + "title": "Username", + "description": "The username to access a secured MySQL Database.", + "type": "string", + "x-descriptors": [ + "urn:camel:group:credentials" + ] + }, + "password": { + "title": "Password", + "description": "The password to access a secured MySQL Database.", + "type": "string", + "format": "password", + "x-descriptors": [ + "urn:camel:group:credentials" + ] + }, + "query": { + "title": "Query", + "description": "The query to execute against the MySQL Database.", + "type": "string", + "example": "INSERT INTO accounts (username,city) VALUES (:#username,:#city)" + }, + "databaseName": { + "title": "Database Name", + "description": "The name of the MySQL Database.", + "type": "string" + }, + "consumedQuery": { + "title": "Consumed Query", + "description": "A query to run on a tuple consumed.", + "type": "string", + "example": "DELETE FROM accounts where user_id = :#user_id" + }, + "delay": { + "title": "Delay", + "description": "The number of milliseconds before the next poll", + "type": "integer", + "default": 500 + } + } + }, + "types": { + "out": { + "mediaType": "application/json" + } + }, + "dependencies": [ + "camel:jackson", + "camel:kamelet", + "camel:sql", + "mvn:org.apache.commons:commons-dbcp2:2.14.0" + ], + "template": { + "beans": [ + { + "name": "local-sql-mysql-source", + "type": "#class:org.apache.camel.component.sql.SqlComponent", + "properties": { + "autowiredEnabled": "false" + } + }, + { + "name": "dsBean", + "type": "#class:org.apache.commons.dbcp2.BasicDataSource", + "properties": { + "username": "{{username}}", + "password": "{{password}}", + "url": "jdbc:mysql://{{serverName}}:{{serverPort}}/{{databaseName}}", + "driverClassName": "com.mysql.cj.jdbc.Driver" + } + } + ], + "from": { + "uri": "{{local-sql-mysql-source}}:{{query}}", + "parameters": { + "dataSource": "#bean:{{dsBean}}", + "onConsume": "{{?consumedQuery}}", + "delay": "{{delay}}" + }, + "steps": [ + { + "marshal": { + "json": { + "library": "Jackson" + } + } + }, + { + "to": "kamelet:sink" + } + ] + } + } + }, + "propertiesSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "MySQL Source", + "description": "Query data from a MySQL Database.", + "required": [ + "serverName", + "username", + "password", + "query", + "databaseName" + ], + "properties": { + "serverName": { + "type": "string", + "title": "Server Name", + "description": "The server name for the data source." + }, + "serverPort": { + "type": "string", + "title": "Server Port", + "description": "The server port for the data source.", + "default": 3306 + }, + "username": { + "type": "string", + "title": "Username", + "description": "The username to access a secured MySQL Database." + }, + "password": { + "type": "string", + "title": "Password", + "description": "The password to access a secured MySQL Database.", + "format": "password" + }, + "query": { + "type": "string", + "title": "Query", + "description": "The query to execute against the MySQL Database." + }, + "databaseName": { + "type": "string", + "title": "Database Name", + "description": "The name of the MySQL Database." + }, + "consumedQuery": { + "type": "string", + "title": "Consumed Query", + "description": "A query to run on a tuple consumed." + }, + "delay": { + "type": "integer", + "title": "Delay", + "description": "The number of milliseconds before the next poll", + "default": 500 + } + } + } +} \ No newline at end of file