Chapter 4. Kamelets reference
4.1. Kamelet structure
A Kamelet is typically coded in the YAML domain-specific language. The file name prefix is the name of the Kamelet. For example, a Kamelet with the name FTP sink has the filename ftp-sink.kamelet.yaml
.
Note that in OpenShift, a Kamelet is a resource that shows the name of the Kamelet (not the filename).
At a high level, a Kamelet resource describes:
-
A metadata section containing the ID of the Kamelet and other information, such as the type of Kamelet (
source
,sink
, oraction
). - A definition (JSON-schema specification) that contains a set of parameters that you can use to configure the Kamelet.
-
An optional
types
section containing information about input and output expected by the Kamelet. - A Camel template in YAML DSL that defines the implementation of the Kamelet.
The following diagram shows an example of a Kamelet and its parts.
Example Kamelet structure
telegram-text-source.kamelet.yaml apiVersion: camel.apache.org/v1alpha1 kind: Kamelet metadata: name: telegram-source 1 annotations: 2 camel.apache.org/catalog.version: "master-SNAPSHOT" camel.apache.org/kamelet.icon: "data:image/..." camel.apache.org/provider: "Red Hat" camel.apache.org/kamelet.group: "Telegram" labels: 3 camel.apache.org/kamelet.type: "source" spec: definition: 4 title: "Telegram Source" description: |- Receive all messages that people send to your telegram bot. To create a bot, contact the @botfather account using the Telegram app. The source attaches the following headers to the messages: -chat-id
/ce-chatid
: the ID of the chat where the message comes from required: - authorizationToken type: object properties: authorizationToken: title: Token description: The token to access your bot on Telegram, that you can obtain from the Telegram "Bot Father". type: string format: password x-descriptors: - urn:alm:descriptor:com.tectonic.ui:password types: 5 out: mediaType: application/json dependencies: - "camel:jackson" - "camel:kamelet" - "camel:telegram" template: 6 from: uri: telegram:bots parameters: authorizationToken: "{{authorizationToken}}" steps: - set-header: name: chat-id simple: "${header[CamelTelegramChatId]}" - set-header: name: ce-chatid simple: "${header[CamelTelegramChatId]}" - marshal: json: {} - to: "kamelet:sink"
- The Kamelet ID - Use this ID in Camel K integrations when you want to reference the Kamelet.
- Annotations, such as icon, provide display features for the Kamelet.
- Labels allow a user to query Kamelets (for example, by kind: "source", "sink", or “action”)
- Description of the Kamelet and parameters in JSON-schema specification format.
- The media type of the output (can include a schema).
- The route template that defines the behavior of the Kamelet.
4.2. Example source Kamelet
Here is the content of the example coffee-source
Kamelet:
apiVersion: camel.apache.org/v1alpha1 kind: Kamelet metadata: name: coffee-source labels: camel.apache.org/kamelet.type: "source" spec: definition: title: "Coffee Source" description: "Retrieve a random coffee from a catalog of coffees" properties: period: title: Period description: The interval between two events in seconds type: integer default: 1000 types: out: mediaType: application/json template: from: uri: timer:tick parameters: period: "{{period}}" steps: - to: "https://random-data-api.com/api/coffee/random_coffee" - to: "kamelet:sink"