Add a Json Schema Validator Kamelet Action
1 file changed
tree: 061f7ed4244043751db9b4f45163be62c723dae8
  1. .github/
  2. .mvn/
  3. docs/
  4. library/
  5. script/
  6. test/
  7. .asf.yaml
  8. .gitignore
  9. avro-deserialize-action.kamelet.yaml
  10. avro-serialize-action.kamelet.yaml
  11. aws-cloudwatch-sink.kamelet.yaml
  12. aws-ddb-streams-source.kamelet.yaml
  13. aws-ec2-sink.kamelet.yaml
  14. aws-kinesis-firehose-sink.kamelet.yaml
  15. aws-kinesis-sink.kamelet.yaml
  16. aws-kinesis-source.kamelet.yaml
  17. aws-lambda-sink.kamelet.yaml
  18. aws-s3-sink.kamelet.yaml
  19. aws-s3-source.kamelet.yaml
  20. aws-s3-streaming-upload-sink.kamelet.yaml
  21. aws-sns-fifo-sink.kamelet.yaml
  22. aws-sns-sink.kamelet.yaml
  23. aws-sqs-batch-sink.kamelet.yaml
  24. aws-sqs-fifo-sink.kamelet.yaml
  25. aws-sqs-sink.kamelet.yaml
  26. aws-sqs-source.kamelet.yaml
  27. aws-translate-action.kamelet.yaml
  28. azure-eventhubs-sink.kamelet.yaml
  29. azure-eventhubs-source.kamelet.yaml
  30. azure-storage-blob-sink.kamelet.yaml
  31. azure-storage-blob-source.kamelet.yaml
  32. azure-storage-queue-sink.kamelet.yaml
  33. azure-storage-queue-source.kamelet.yaml
  34. bitcoin-source.kamelet.yaml
  35. caffeine-action.kamelet.yaml
  36. cassandra-sink.kamelet.yaml
  37. cassandra-source.kamelet.yaml
  38. chuck-norris-source.kamelet.yaml
  39. chunk-template-action.kamelet.yaml
  40. cron-source.kamelet.yaml
  41. dns-dig-action.kamelet.yaml
  42. dns-ip-action.kamelet.yaml
  43. dns-lookup-action.kamelet.yaml
  44. dropbox-sink.kamelet.yaml
  45. dropbox-source.kamelet.yaml
  46. earthquake-source.kamelet.yaml
  47. elasticsearch-index-sink.kamelet.yaml
  48. elasticsearch-search-source.kamelet.yaml
  49. exec-sink.kamelet.yaml
  50. extract-field-action.kamelet.yaml
  51. fhir-source.kamelet.yaml
  52. file-watch-source.kamelet.yaml
  53. freemarker-template-action.kamelet.yaml
  54. ftp-sink.kamelet.yaml
  55. ftp-source.kamelet.yaml
  56. ftps-sink.kamelet.yaml
  57. ftps-source.kamelet.yaml
  58. github-source.kamelet.yaml
  59. google-calendar-source.kamelet.yaml
  60. google-mail-source.kamelet.yaml
  61. google-sheets-source.kamelet.yaml
  62. has-header-filter-action.kamelet.yaml
  63. header-matches-filter-action.kamelet.yaml
  64. hoist-field-action.kamelet.yaml
  65. http-secured-sink.kamelet.yaml
  66. http-secured-source.kamelet.yaml
  67. http-sink.kamelet.yaml
  68. http-source.kamelet.yaml
  69. infinispan-source.kamelet.yaml
  70. insert-field-action.kamelet.yaml
  71. insert-header-action.kamelet.yaml
  72. is-tombstone-filter-action.kamelet.yaml
  73. Jenkinsfile
  74. Jenkinsfile.deploy
  75. jira-source.kamelet.yaml
  76. jms-amqp-10-sink.kamelet.yaml
  77. jms-amqp-10-source.kamelet.yaml
  78. jms-apache-artemis-sink.kamelet.yaml
  79. jms-apache-artemis-source.kamelet.yaml
  80. json-deserialize-action.kamelet.yaml
  81. json-schema-validator-action.kamelet.yaml
  82. json-serialize-action.kamelet.yaml
  83. jsonata-action.kamelet.yaml
  84. kafka-manual-commit-action.kamelet.yaml
  85. kafka-not-secured-sink.kamelet.yaml
  86. kafka-not-secured-source.kamelet.yaml
  87. kafka-sink.kamelet.yaml
  88. kafka-source.kamelet.yaml
  89. KEYS
  90. LICENSE
  91. mail-imap-source.kamelet.yaml
  92. mariadb-sink.kamelet.yaml
  93. mariadb-source.kamelet.yaml
  94. mask-field-action.kamelet.yaml
  95. message-timestamp-router-action.kamelet.yaml
  96. minio-sink.kamelet.yaml
  97. minio-source.kamelet.yaml
  98. mongodb-sink.kamelet.yaml
  99. mongodb-source.kamelet.yaml
  100. mqtt-source.kamelet.yaml
  101. mustache-template-action.kamelet.yaml
  102. mvel-template-action.kamelet.yaml
  103. mvnw
  104. mvnw.cmd
  105. mysql-sink.kamelet.yaml
  106. mysql-source.kamelet.yaml
  107. nats-sink.kamelet.yaml
  108. nats-source.kamelet.yaml
  109. NOTICE
  110. openai-classification-action.kamelet.yaml
  111. openai-completion-action.kamelet.yaml
  112. pdf-action.kamelet.yaml
  113. pom.xml
  114. postgresql-sink.kamelet.yaml
  115. postgresql-source.kamelet.yaml
  116. predicate-filter-action.kamelet.yaml
  117. protobuf-deserialize-action.kamelet.yaml
  118. protobuf-serialize-action.kamelet.yaml
  119. rabbitmq-source.kamelet.yaml
  120. README.md
  121. regex-router-action.kamelet.yaml
  122. replace-field-action.kamelet.yaml
  123. salesforce-source.kamelet.yaml
  124. sftp-sink.kamelet.yaml
  125. sftp-source.kamelet.yaml
  126. slack-sink.kamelet.yaml
  127. slack-source.kamelet.yaml
  128. sqlserver-sink.kamelet.yaml
  129. sqlserver-source.kamelet.yaml
  130. ssh-source.kamelet.yaml
  131. string-template-action.kamelet.yaml
  132. telegram-sink.kamelet.yaml
  133. telegram-source.kamelet.yaml
  134. timer-source.kamelet.yaml
  135. timestamp-router-action.kamelet.yaml
  136. topic-name-matches-filter-action.kamelet.yaml
  137. twitter-directmessage-source.kamelet.yaml
  138. twitter-search-source.kamelet.yaml
  139. twitter-timeline-source.kamelet.yaml
  140. update-kamelets.xml
  141. value-to-key-action.kamelet.yaml
  142. velocity-template-action.kamelet.yaml
  143. webhook-source.kamelet.yaml
README.md

Apache Camel - Kamelet Catalog

This repository contains the default Kamelet catalog used by Apache Camel and its sub-projects.

Kamelets in this repository can be used natively in Apache Camel K integrations, without additional configuration steps: users just need to reference the Kamelets by name in the URI (e.g. kamelet:timer-source?message=Hello), or use them in a KameletBinding.

NOTE: Camel K (and other sub-projects) will only use a specific version of this Kamelet catalog. Refer to the release notes of the sub-project for more information.

Documents and guides about Kamelets can be found in the Kamelets User and Developer Guides.

Guidelines for contributions

Kamelets in this repository are intended to be generic connectors that any external platform can embed in order to leverage the Apache Camel integration capabilities.

All Kamelets posted here will be subject to the scrutiny of the Apache Camel PMC to assess their compliance with the ecosystem and, in any case, they MUST be in line with the general Apache Code of Conduct.

General Format

Kamelets MUST be provided in the Kubernetes YAML format, i.e. they MUST be resources that can be applied on a cluster using the Kubernetes kubectl CLI.

The file name of each Kamelet MUST follow this specific pattern: <kamelet-name>.kamelet.yaml. The <kamelet-name> MUST match field metadata -> name inside the Kamelet YAML.

For the time being, we'll accept only these kinds of Kamelets:

  • Sources: Kamelets producing data that can be forwarded to any chosen destination. In the Camel jargon, a source can be used consumer-side. Kamelets belonging to this category MUST be marked with label: camel.apache.org/kamelet.type=source.
  • Sinks: Kamelets that accept data with a specific datashape and forward it to an external system. In the Camel jargon, a sink can be used producer-side. Kamelets belonging to this category MUST be marked with label: camel.apache.org/kamelet.type=sink.
  • Actions: Kamelets that can be used as intermediate steps as they both accept and produce data, applying transformations to it or changing the behavior of the whole integration flow (e.g. using enterprise integration patterns). Kamelets belonging to this category MUST be marked with label: camel.apache.org/kamelet.type=action.

All Kamelets MUST provide a value for label camel.apache.org/kamelet.type.

All Kamelets MUST declare an icon in the camel.apache.org/kamelet.icon annotation using the embedded URL data:image format. An icon annotation CANNOT contain a link to an external location. A Kamelet SHOULD use the specific data:image/svg+xml;base64 format whenever it's possible.

Kamelets that are logically related (e.g. all Kamelets that allow doing things with Twitter) SHOULD be linked together using the label camel.apache.org/kamelet.group=<name of the group> (e.g. camel.apache.org/kamelet.group=Twitter) to ease visualization in tooling.

All Kamelets present in this repository MUST have the annotation camel.apache.org/provider set to "Apache Software Foundation".

We provide an example of Kamelet to give more context to the following sections:

apiVersion: camel.apache.org/v1alpha1
kind: Kamelet
metadata:
  name: timer-source
  annotations:
    camel.apache.org/kamelet.icon: data:image/svg+xml;base64,PD94...
    camel.apache.org/provider: "Apache Software Foundation"
  labels:
    camel.apache.org/kamelet.type: source
spec:
  definition:
    title: Timer Source
    description: Produces periodic events with a custom payload
    required:
      - message
    properties:
      period:
        title: Period
        description: The interval between two events in milliseconds
        type: integer
        default: 1000
      message:
        title: Message
        description: The message to generate
        type: string
        example: hello world
  types:
    out:
      mediaType: text/plain
  flow:
    from:
      uri: timer:tick
      parameters:
        period: "{{period}}"
      steps:
        - set-body:
            constant: "{{message}}"
        - to: kamelet:sink

Flow Code

The Camel route that defines the behavior of the Kamelet MUST be provided in YAML flow syntax. The Kamelet MAY declare additional supporting routes that MUST be written in YAML syntax (to provide better support in all Camel subprojects).

The code of a “source” Kamelet must send data to the kamelet:sink special endpoint. The code of a “sink” Kamelet must consume data from the special endpoint kamelet:source.

The Kamelet MAY declare dependencies on Camel components using the syntax camel:<component-name> (e.g. camel:telegram). Some Camel dependencies are implicitly added by the runtime when a certain Camel URI is used (e.g. there's no need to declare explicit dependency on camel:timer if the flow section uses the timer URI).

The Kamelet CAN declare dependencies on artifacts of one of the Camel subprojects. In case it does, the Kamelet must contain label camel.apache.org/requires.runtime=<name-of-the-project> (e.g. camel.apache.org/requires.runtime=camel-quarkus).

The Kamelet CAN declare dependencies on other artifacts in Maven Central, provided that they are released with a license compatible with Apache License 2.0 (syntax is mvn:group:artifact:version).

All source code dependencies (e.g. github:organization:project) MUST link to Apache Camel repositories only. Contributors are welcome to use this same repository to share libraries in the form of source code.

All these should be added to the spec -> dependencies section, like in the following example:

# ...
spec:
  # ...
  dependencies:
  - camel:telegram
  - mvn:org.apache.commons:commons-vfs2:2.7.0
  - github:apache/camel-kamelets
  flow:
    # ...

Configuration properties

Kamelets SHOULD declare their configuration properties in the spec -> definition section as a JSON-schema specification.

The top-level part of the JSON-schema document refer to the Kamelet itself, so the following properties are MANDATORY:

  • title: the visual name of the Kamelet
  • description: a detailed description of what the Kamelet is useful for

The properties part can then contain a set of configuration properties available for the Kamelet.

Property name id is reserved and implicit for all Kamelets.

Data Types

Kamelets SHOULD declare the mediaType of data that they produce or consume when it's known in advance. If technically possible, they SHOULD also indicate the schema of the corresponding data.

Kamelets MAY choose not to declare a mediaType when it varies depending on the configuration of the parameters. Contributors MAY consider to split a Kamelet into multiple instances if that can help determining unique types and schemas.

Testing

Kamelets SHOULD be accompained with testing code that verifies their correct behavior.

Yaks is the testing framework of choice for Kamelets and the one implemented in the CI.

Test code must be submitted in the test/<kamelet-name>/ directory in the root of this repository.

Kamelets submitted with tests that verify their correctness MUST be labeled with camel.apache.org/kamelet.verified=true.

NOTE: there‘s no way at the moment to inject credentials for external systems into the CI in order to write more advanced tests, but we can expect we’ll find an usable strategy in the long run

Releasing

This project is released as standard Apache Camel module.

To release it, first set the next release version in the kamelets:

export CAMEL_KAMELET_VERSION=x.y.z

./mvnw clean install -DreleaseVersion=$CAMEL_KAMELET_VERSION

Stage the commits in SVN:

git commit -am "Update Kamelets for release $CAMEL_KAMELET_VERSION"

git push upstream main

Check that everything is alright with a dryRun:

./mvnw release:prepare -Prelease \
  -DdryRun \
  -DreleaseVersion=$CAMEL_KAMELET_VERSION \
  -DdevelopmentVersion=main-SNAPSHOT \
  -Dtag=v$CAMEL_KAMELET_VERSION

Check the signatures of the files, then clean and prepare the actual release:

./mvnw release:clean -Prelease
./mvnw release:prepare -Prelease \
  -DreleaseVersion=$CAMEL_KAMELET_VERSION \
  -DdevelopmentVersion=main-SNAPSHOT \
  -Dtag=v$CAMEL_KAMELET_VERSION

Then perform the release:

./mvnw release:perform -Prelease

Restore Kamelets:

./mvnw clean install

Update remote git:

git commit -am "Restore Kamelets for development"

git push upstream main