This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git


The following commit(s) were added to refs/heads/main by this push:
     new 176f1976 feat(api): CRD generation (#2203)
176f1976 is described below

commit 176f1976dea55913be27f70962110748f125a244
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Thu Sep 19 14:36:35 2024 +0200

    feat(api): CRD generation (#2203)
    
    * feat(api): CRD generation
    
    * feat: kamelets crd java dependency
    
    * chore: crds generation doc and test
---
 crds/README.md                                  |   37 +
 crds/config/crd/camel.apache.org_kamelets.yaml  | 1318 +++++++++++++++++++++++
 crds/generate.sh                                |   42 +
 crds/go.mod                                     |   29 +
 crds/go.sum                                     |   91 ++
 crds/header.txt                                 |   16 +
 crds/pkg/apis/camel/group.go                    |   23 +
 crds/pkg/apis/camel/kamelets_test.go            |   64 ++
 crds/pkg/apis/camel/v1/common_types.go          |  117 ++
 crds/pkg/apis/camel/v1/jsonschema_types.go      |  108 ++
 crds/pkg/apis/camel/v1/kamelet_types.go         |  252 +++++
 crds/pkg/apis/camel/v1/register.go              |   55 +
 crds/pkg/apis/camel/v1/zz_generated.deepcopy.go |  552 ++++++++++
 library/camel-kamelets-crds/pom.xml             |   98 ++
 library/camel-kamelets-crds/src/main/resources  |    1 +
 pom.xml                                         |    1 +
 16 files changed, 2804 insertions(+)

diff --git a/crds/README.md b/crds/README.md
new file mode 100644
index 00000000..56e3ab40
--- /dev/null
+++ b/crds/README.md
@@ -0,0 +1,37 @@
+# Kamelets CRDs
+
+CRDs are [Kubernetes Custom 
Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
 used to extend the Kubernetes API. Kamelets are represented as a CRD and the 
version is stable in `v1` release.
+
+This specification is a contract and any change **must** be compatible with 
any existing user. In case of any doubts before doing any change, please 
discuss with the community.
+
+NOTE: Golang is required to do the needed changes
+
+# Changing the specification
+
+The specification is in a stable (`v1`) version. Make sure to understand the 
[Kubernetes API policy](https://kubernetes.io/docs/reference/using-api/) before 
performing any change. Each change to the specification is a potential break to 
any API client.
+
+## Adding a new parameter
+
+This operation is generally a safe operation and could be performed during the 
lifecycle of any version. It's important to notice that the addition of a new 
parameter should not be a mandatory parameter (to avoid breaking existing 
clients) and, in general, should not alter the behavior of any existing 
parameter.
+
+## Deprecating an existing parameter
+
+If any parameter is turning no longer needed, you can mark as deprecated. 
However, the functionality should be maintained in order to maintain 
compatibility with existing clients and the parameter kept in the specification 
as well.
+
+## Changing a parameter behavior
+
+This should not be performed within the lifecycle of a given version. If 
required, then, a new version should be issued with the new parameter.
+
+## Deleting a parameter
+
+This should not be performed within the lifecycle of a given version. If 
required, then, a new version should be issued with the new parameter. Mind 
that it would be advisable to issue a deprecation notice in the older version 
in order to let the clients know that the given parameter won't be supported in 
future upgraded versions.
+
+## How to apply any change
+
+The CRD is generated with Kubernetes [Controller 
Gen](https://book.kubebuilder.io/reference/controller-gen) client. You need to 
perform any required change to the spec by changing the Golang API struct type 
under `pkg/apis/camel`. Then, you just need to perform:
+
+```bash
+./generate.sh
+```
+
+The script will regenerate the autogenerated code and will run some test to 
validate against the existing Kamelets. Once it's over you will need to commit 
the changes and provide a PR.
\ No newline at end of file
diff --git a/crds/config/crd/camel.apache.org_kamelets.yaml 
b/crds/config/crd/camel.apache.org_kamelets.yaml
new file mode 100644
index 00000000..d0db14e6
--- /dev/null
+++ b/crds/config/crd/camel.apache.org_kamelets.yaml
@@ -0,0 +1,1318 @@
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.15.0
+  name: kamelets.camel.apache.org
+spec:
+  group: camel.apache.org
+  names:
+    categories:
+    - kamel
+    - camel
+    kind: Kamelet
+    listKind: KameletList
+    plural: kamelets
+    shortNames:
+    - kl
+    singular: kamelet
+  scope: Namespaced
+  versions:
+  - additionalPrinterColumns:
+    - description: The Kamelet type
+      jsonPath: .metadata.labels.camel\.apache\.org\/kamelet\.type
+      name: Type
+      type: string
+    - description: The Kamelet provider
+      jsonPath: .metadata.annotations.camel\.apache\.org\/provider
+      name: Provider
+      type: string
+    - description: The Kamelet bundled
+      jsonPath: .metadata.labels.camel\.apache\.org\/kamelet\.bundled
+      name: Bundled
+      type: string
+    - description: The Camel compatible version
+      jsonPath: .metadata.annotations.camel\.apache\.org\/catalog\.version
+      name: Camel Version
+      type: string
+    name: v1
+    schema:
+      openAPIV3Schema:
+        description: Kamelet is the Schema for the kamelets API.
+        properties:
+          apiVersion:
+            description: |-
+              APIVersion defines the versioned schema of this representation 
of an object.
+              Servers should convert recognized schemas to the latest internal 
value, and
+              may reject unrecognized values.
+              More info: 
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+            type: string
+          kind:
+            description: |-
+              Kind is a string value representing the REST resource this 
object represents.
+              Servers may infer this from the endpoint the client submits 
requests to.
+              Cannot be updated.
+              In CamelCase.
+              More info: 
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: the desired specification
+            properties:
+              dataTypes:
+                additionalProperties:
+                  description: DataTypesSpec represents the specification for 
a set
+                    of data types.
+                  properties:
+                    default:
+                      description: the default data type for this Kamelet
+                      type: string
+                    headers:
+                      additionalProperties:
+                        description: HeaderSpec represents the specification 
for a
+                          header used in the Kamelet.
+                        properties:
+                          default:
+                            type: string
+                          description:
+                            type: string
+                          required:
+                            type: boolean
+                          title:
+                            type: string
+                          type:
+                            type: string
+                        type: object
+                      description: one to many header specifications
+                      type: object
+                    types:
+                      additionalProperties:
+                        description: DataTypeSpec represents the specification 
for
+                          a data type.
+                        properties:
+                          dependencies:
+                            description: the list of Camel or Maven 
dependencies required
+                              by the data type
+                            items:
+                              type: string
+                            type: array
+                          description:
+                            description: optional description
+                            type: string
+                          format:
+                            description: the data type format name
+                            type: string
+                          headers:
+                            additionalProperties:
+                              description: HeaderSpec represents the 
specification
+                                for a header used in the Kamelet.
+                              properties:
+                                default:
+                                  type: string
+                                description:
+                                  type: string
+                                required:
+                                  type: boolean
+                                title:
+                                  type: string
+                                type:
+                                  type: string
+                              type: object
+                            description: one to many header specifications
+                            type: object
+                          mediaType:
+                            description: media type as expected for HTTP media 
types
+                              (ie, application/json)
+                            type: string
+                          schema:
+                            description: the expected schema for the data type
+                            properties:
+                              $schema:
+                                description: JSONSchemaURL represents a schema 
url.
+                                type: string
+                              description:
+                                type: string
+                              example:
+                                description: |-
+                                  JSON represents any valid JSON value.
+                                  These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                x-kubernetes-preserve-unknown-fields: true
+                              externalDocs:
+                                description: ExternalDocumentation allows 
referencing
+                                  an external resource for extended 
documentation.
+                                properties:
+                                  description:
+                                    type: string
+                                  url:
+                                    type: string
+                                type: object
+                              id:
+                                type: string
+                              properties:
+                                additionalProperties:
+                                  properties:
+                                    default:
+                                      description: default is a default value 
for
+                                        undefined object fields.
+                                      x-kubernetes-preserve-unknown-fields: 
true
+                                    deprecated:
+                                      type: boolean
+                                    description:
+                                      type: string
+                                    enum:
+                                      items:
+                                        description: |-
+                                          JSON represents any valid JSON value.
+                                          These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                        x-kubernetes-preserve-unknown-fields: 
true
+                                      type: array
+                                    example:
+                                      description: |-
+                                        JSON represents any valid JSON value.
+                                        These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                      x-kubernetes-preserve-unknown-fields: 
true
+                                    exclusiveMaximum:
+                                      type: boolean
+                                    exclusiveMinimum:
+                                      type: boolean
+                                    format:
+                                      description: |-
+                                        format is an OpenAPI v3 format string. 
Unknown formats are ignored. The following formats are validated:
+
+
+                                        - bsonobjectid: a bson object ID, i.e. 
a 24 characters hex string
+                                        - uri: an URI as parsed by Golang 
net/url.ParseRequestURI
+                                        - email: an email address as parsed by 
Golang net/mail.ParseAddress
+                                        - hostname: a valid representation for 
an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
+                                        - ipv4: an IPv4 IP as parsed by Golang 
net.ParseIP
+                                        - ipv6: an IPv6 IP as parsed by Golang 
net.ParseIP
+                                        - cidr: a CIDR as parsed by Golang 
net.ParseCIDR
+                                        - mac: a MAC address as parsed by 
Golang net.ParseMAC
+                                        - uuid: an UUID that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                        - uuid3: an UUID3 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                        - uuid4: an UUID4 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                        - uuid5: an UUID5 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                        - isbn: an ISBN10 or ISBN13 number 
string like "0321751043" or "978-0321751041"
+                                        - isbn10: an ISBN10 number string like 
"0321751043"
+                                        - isbn13: an ISBN13 number string like 
"978-0321751041"
+                                        - creditcard: a credit card number 
defined by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                                        - ssn: a U.S. social security number 
following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                                        - hexcolor: an hexadecimal color code 
like "#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                                        - rgbcolor: an RGB color code like rgb 
like "rgb(255,255,255)"
+                                        - byte: base64 encoded binary data
+                                        - password: any kind of string
+                                        - date: a date string like 
"2006-01-02" as defined by full-date in RFC3339
+                                        - duration: a duration string like "22 
ns" as parsed by Golang time.ParseDuration or compatible with Scala duration 
format
+                                        - datetime: a date time string like 
"2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                                      type: string
+                                    id:
+                                      type: string
+                                    maxItems:
+                                      format: int64
+                                      type: integer
+                                    maxLength:
+                                      format: int64
+                                      type: integer
+                                    maxProperties:
+                                      format: int64
+                                      type: integer
+                                    maximum:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    minItems:
+                                      format: int64
+                                      type: integer
+                                    minLength:
+                                      format: int64
+                                      type: integer
+                                    minProperties:
+                                      format: int64
+                                      type: integer
+                                    minimum:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    multipleOf:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    nullable:
+                                      type: boolean
+                                    pattern:
+                                      type: string
+                                    title:
+                                      type: string
+                                    type:
+                                      type: string
+                                    uniqueItems:
+                                      type: boolean
+                                    x-descriptors:
+                                      description: XDescriptors is a list of 
extended
+                                        properties that trigger a custom 
behavior
+                                        in external systems
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                type: object
+                              required:
+                                items:
+                                  type: string
+                                type: array
+                              title:
+                                type: string
+                              type:
+                                type: string
+                            type: object
+                          scheme:
+                            description: the data type component scheme
+                            type: string
+                        type: object
+                      description: one to many data type specifications
+                      type: object
+                  type: object
+                description: data specification types for the events 
consumed/produced
+                  by the Kamelet
+                type: object
+              definition:
+                description: defines the formal configuration of the Kamelet
+                properties:
+                  $schema:
+                    description: JSONSchemaURL represents a schema url.
+                    type: string
+                  description:
+                    type: string
+                  example:
+                    description: |-
+                      JSON represents any valid JSON value.
+                      These types are supported: bool, int64, float64, string, 
[]interface{}, map[string]interface{} and nil.
+                    x-kubernetes-preserve-unknown-fields: true
+                  externalDocs:
+                    description: ExternalDocumentation allows referencing an 
external
+                      resource for extended documentation.
+                    properties:
+                      description:
+                        type: string
+                      url:
+                        type: string
+                    type: object
+                  id:
+                    type: string
+                  properties:
+                    additionalProperties:
+                      properties:
+                        default:
+                          description: default is a default value for 
undefined object
+                            fields.
+                          x-kubernetes-preserve-unknown-fields: true
+                        deprecated:
+                          type: boolean
+                        description:
+                          type: string
+                        enum:
+                          items:
+                            description: |-
+                              JSON represents any valid JSON value.
+                              These types are supported: bool, int64, float64, 
string, []interface{}, map[string]interface{} and nil.
+                            x-kubernetes-preserve-unknown-fields: true
+                          type: array
+                        example:
+                          description: |-
+                            JSON represents any valid JSON value.
+                            These types are supported: bool, int64, float64, 
string, []interface{}, map[string]interface{} and nil.
+                          x-kubernetes-preserve-unknown-fields: true
+                        exclusiveMaximum:
+                          type: boolean
+                        exclusiveMinimum:
+                          type: boolean
+                        format:
+                          description: |-
+                            format is an OpenAPI v3 format string. Unknown 
formats are ignored. The following formats are validated:
+
+
+                            - bsonobjectid: a bson object ID, i.e. a 24 
characters hex string
+                            - uri: an URI as parsed by Golang 
net/url.ParseRequestURI
+                            - email: an email address as parsed by Golang 
net/mail.ParseAddress
+                            - hostname: a valid representation for an Internet 
host name, as defined by RFC 1034, section 3.1 [RFC1034].
+                            - ipv4: an IPv4 IP as parsed by Golang net.ParseIP
+                            - ipv6: an IPv6 IP as parsed by Golang net.ParseIP
+                            - cidr: a CIDR as parsed by Golang net.ParseCIDR
+                            - mac: a MAC address as parsed by Golang 
net.ParseMAC
+                            - uuid: an UUID that allows uppercase defined by 
the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                            - uuid3: an UUID3 that allows uppercase defined by 
the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                            - uuid4: an UUID4 that allows uppercase defined by 
the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                            - uuid5: an UUID5 that allows uppercase defined by 
the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                            - isbn: an ISBN10 or ISBN13 number string like 
"0321751043" or "978-0321751041"
+                            - isbn10: an ISBN10 number string like "0321751043"
+                            - isbn13: an ISBN13 number string like 
"978-0321751041"
+                            - creditcard: a credit card number defined by the 
regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                            - ssn: a U.S. social security number following the 
regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                            - hexcolor: an hexadecimal color code like 
"#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                            - rgbcolor: an RGB color code like rgb like 
"rgb(255,255,255)"
+                            - byte: base64 encoded binary data
+                            - password: any kind of string
+                            - date: a date string like "2006-01-02" as defined 
by full-date in RFC3339
+                            - duration: a duration string like "22 ns" as 
parsed by Golang time.ParseDuration or compatible with Scala duration format
+                            - datetime: a date time string like 
"2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                          type: string
+                        id:
+                          type: string
+                        maxItems:
+                          format: int64
+                          type: integer
+                        maxLength:
+                          format: int64
+                          type: integer
+                        maxProperties:
+                          format: int64
+                          type: integer
+                        maximum:
+                          description: A Number represents a JSON number 
literal.
+                          type: string
+                        minItems:
+                          format: int64
+                          type: integer
+                        minLength:
+                          format: int64
+                          type: integer
+                        minProperties:
+                          format: int64
+                          type: integer
+                        minimum:
+                          description: A Number represents a JSON number 
literal.
+                          type: string
+                        multipleOf:
+                          description: A Number represents a JSON number 
literal.
+                          type: string
+                        nullable:
+                          type: boolean
+                        pattern:
+                          type: string
+                        title:
+                          type: string
+                        type:
+                          type: string
+                        uniqueItems:
+                          type: boolean
+                        x-descriptors:
+                          description: XDescriptors is a list of extended 
properties
+                            that trigger a custom behavior in external systems
+                          items:
+                            type: string
+                          type: array
+                      type: object
+                    type: object
+                  required:
+                    items:
+                      type: string
+                    type: array
+                  title:
+                    type: string
+                  type:
+                    type: string
+                type: object
+              dependencies:
+                description: Camel dependencies needed by the Kamelet
+                items:
+                  type: string
+                type: array
+              sources:
+                description: sources in any Camel DSL supported
+                items:
+                  description: SourceSpec defines the configuration for one or 
more
+                    routes to be executed in a certain Camel DSL language.
+                  properties:
+                    compression:
+                      description: if the content is compressed (base64 
encrypted)
+                      type: boolean
+                    content:
+                      description: the source code (plain text)
+                      type: string
+                    contentKey:
+                      description: the confimap key holding the source content
+                      type: string
+                    contentRef:
+                      description: the confimap reference holding the source 
content
+                      type: string
+                    contentType:
+                      description: the content type (tipically text or binary)
+                      type: string
+                    from-kamelet:
+                      description: True if the spec is generated from a Kamelet
+                      type: boolean
+                    interceptors:
+                      description: |-
+                        Interceptors are optional identifiers the 
org.apache.camel.k.RoutesLoader
+                        uses to pre/post process sources
+                      items:
+                        type: string
+                      type: array
+                    language:
+                      description: specify which is the language (Camel DSL) 
used
+                        to interpret this source code
+                      type: string
+                    loader:
+                      description: |-
+                        Loader is an optional id of the 
org.apache.camel.k.RoutesLoader that will
+                        interpret this source at runtime
+                      type: string
+                    name:
+                      description: the name of the specification
+                      type: string
+                    path:
+                      description: the path where the file is stored
+                      type: string
+                    property-names:
+                      description: List of property names defined in the 
source (e.g.
+                        if type is "template")
+                      items:
+                        type: string
+                      type: array
+                    rawContent:
+                      description: the source code (binary)
+                      format: byte
+                      type: string
+                    type:
+                      description: Type defines the kind of source described 
by this
+                        object
+                      type: string
+                  type: object
+                type: array
+              template:
+                description: the main source in YAML DSL
+                type: object
+                x-kubernetes-preserve-unknown-fields: true
+              types:
+                additionalProperties:
+                  description: |-
+                    EventTypeSpec represents a specification for an event type.
+                    Deprecated: In favor of using DataTypeSpec.
+                  properties:
+                    mediaType:
+                      description: media type as expected for HTTP media types 
(ie,
+                        application/json)
+                      type: string
+                    schema:
+                      description: the expected schema for the event
+                      properties:
+                        $schema:
+                          description: JSONSchemaURL represents a schema url.
+                          type: string
+                        description:
+                          type: string
+                        example:
+                          description: |-
+                            JSON represents any valid JSON value.
+                            These types are supported: bool, int64, float64, 
string, []interface{}, map[string]interface{} and nil.
+                          x-kubernetes-preserve-unknown-fields: true
+                        externalDocs:
+                          description: ExternalDocumentation allows 
referencing an
+                            external resource for extended documentation.
+                          properties:
+                            description:
+                              type: string
+                            url:
+                              type: string
+                          type: object
+                        id:
+                          type: string
+                        properties:
+                          additionalProperties:
+                            properties:
+                              default:
+                                description: default is a default value for 
undefined
+                                  object fields.
+                                x-kubernetes-preserve-unknown-fields: true
+                              deprecated:
+                                type: boolean
+                              description:
+                                type: string
+                              enum:
+                                items:
+                                  description: |-
+                                    JSON represents any valid JSON value.
+                                    These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                  x-kubernetes-preserve-unknown-fields: true
+                                type: array
+                              example:
+                                description: |-
+                                  JSON represents any valid JSON value.
+                                  These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                x-kubernetes-preserve-unknown-fields: true
+                              exclusiveMaximum:
+                                type: boolean
+                              exclusiveMinimum:
+                                type: boolean
+                              format:
+                                description: |-
+                                  format is an OpenAPI v3 format string. 
Unknown formats are ignored. The following formats are validated:
+
+
+                                  - bsonobjectid: a bson object ID, i.e. a 24 
characters hex string
+                                  - uri: an URI as parsed by Golang 
net/url.ParseRequestURI
+                                  - email: an email address as parsed by 
Golang net/mail.ParseAddress
+                                  - hostname: a valid representation for an 
Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
+                                  - ipv4: an IPv4 IP as parsed by Golang 
net.ParseIP
+                                  - ipv6: an IPv6 IP as parsed by Golang 
net.ParseIP
+                                  - cidr: a CIDR as parsed by Golang 
net.ParseCIDR
+                                  - mac: a MAC address as parsed by Golang 
net.ParseMAC
+                                  - uuid: an UUID that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                  - uuid3: an UUID3 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                  - uuid4: an UUID4 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                  - uuid5: an UUID5 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                  - isbn: an ISBN10 or ISBN13 number string 
like "0321751043" or "978-0321751041"
+                                  - isbn10: an ISBN10 number string like 
"0321751043"
+                                  - isbn13: an ISBN13 number string like 
"978-0321751041"
+                                  - creditcard: a credit card number defined 
by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                                  - ssn: a U.S. social security number 
following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                                  - hexcolor: an hexadecimal color code like 
"#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                                  - rgbcolor: an RGB color code like rgb like 
"rgb(255,255,255)"
+                                  - byte: base64 encoded binary data
+                                  - password: any kind of string
+                                  - date: a date string like "2006-01-02" as 
defined by full-date in RFC3339
+                                  - duration: a duration string like "22 ns" 
as parsed by Golang time.ParseDuration or compatible with Scala duration format
+                                  - datetime: a date time string like 
"2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                                type: string
+                              id:
+                                type: string
+                              maxItems:
+                                format: int64
+                                type: integer
+                              maxLength:
+                                format: int64
+                                type: integer
+                              maxProperties:
+                                format: int64
+                                type: integer
+                              maximum:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              minItems:
+                                format: int64
+                                type: integer
+                              minLength:
+                                format: int64
+                                type: integer
+                              minProperties:
+                                format: int64
+                                type: integer
+                              minimum:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              multipleOf:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              nullable:
+                                type: boolean
+                              pattern:
+                                type: string
+                              title:
+                                type: string
+                              type:
+                                type: string
+                              uniqueItems:
+                                type: boolean
+                              x-descriptors:
+                                description: XDescriptors is a list of 
extended properties
+                                  that trigger a custom behavior in external 
systems
+                                items:
+                                  type: string
+                                type: array
+                            type: object
+                          type: object
+                        required:
+                          items:
+                            type: string
+                          type: array
+                        title:
+                          type: string
+                        type:
+                          type: string
+                      type: object
+                  type: object
+                description: |-
+                  data specification types for the events consumed/produced by 
the Kamelet
+                  Deprecated: In favor of using DataTypes
+                type: object
+              versions:
+                additionalProperties:
+                  description: KameletSpecBase specifies the base 
configuration of
+                    a Kamelet.
+                  properties:
+                    dataTypes:
+                      additionalProperties:
+                        description: DataTypesSpec represents the 
specification for
+                          a set of data types.
+                        properties:
+                          default:
+                            description: the default data type for this Kamelet
+                            type: string
+                          headers:
+                            additionalProperties:
+                              description: HeaderSpec represents the 
specification
+                                for a header used in the Kamelet.
+                              properties:
+                                default:
+                                  type: string
+                                description:
+                                  type: string
+                                required:
+                                  type: boolean
+                                title:
+                                  type: string
+                                type:
+                                  type: string
+                              type: object
+                            description: one to many header specifications
+                            type: object
+                          types:
+                            additionalProperties:
+                              description: DataTypeSpec represents the 
specification
+                                for a data type.
+                              properties:
+                                dependencies:
+                                  description: the list of Camel or Maven 
dependencies
+                                    required by the data type
+                                  items:
+                                    type: string
+                                  type: array
+                                description:
+                                  description: optional description
+                                  type: string
+                                format:
+                                  description: the data type format name
+                                  type: string
+                                headers:
+                                  additionalProperties:
+                                    description: HeaderSpec represents the 
specification
+                                      for a header used in the Kamelet.
+                                    properties:
+                                      default:
+                                        type: string
+                                      description:
+                                        type: string
+                                      required:
+                                        type: boolean
+                                      title:
+                                        type: string
+                                      type:
+                                        type: string
+                                    type: object
+                                  description: one to many header 
specifications
+                                  type: object
+                                mediaType:
+                                  description: media type as expected for HTTP 
media
+                                    types (ie, application/json)
+                                  type: string
+                                schema:
+                                  description: the expected schema for the 
data type
+                                  properties:
+                                    $schema:
+                                      description: JSONSchemaURL represents a 
schema
+                                        url.
+                                      type: string
+                                    description:
+                                      type: string
+                                    example:
+                                      description: |-
+                                        JSON represents any valid JSON value.
+                                        These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                      x-kubernetes-preserve-unknown-fields: 
true
+                                    externalDocs:
+                                      description: ExternalDocumentation 
allows referencing
+                                        an external resource for extended 
documentation.
+                                      properties:
+                                        description:
+                                          type: string
+                                        url:
+                                          type: string
+                                      type: object
+                                    id:
+                                      type: string
+                                    properties:
+                                      additionalProperties:
+                                        properties:
+                                          default:
+                                            description: default is a default 
value
+                                              for undefined object fields.
+                                            
x-kubernetes-preserve-unknown-fields: true
+                                          deprecated:
+                                            type: boolean
+                                          description:
+                                            type: string
+                                          enum:
+                                            items:
+                                              description: |-
+                                                JSON represents any valid JSON 
value.
+                                                These types are supported: 
bool, int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                              
x-kubernetes-preserve-unknown-fields: true
+                                            type: array
+                                          example:
+                                            description: |-
+                                              JSON represents any valid JSON 
value.
+                                              These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                            
x-kubernetes-preserve-unknown-fields: true
+                                          exclusiveMaximum:
+                                            type: boolean
+                                          exclusiveMinimum:
+                                            type: boolean
+                                          format:
+                                            description: |-
+                                              format is an OpenAPI v3 format 
string. Unknown formats are ignored. The following formats are validated:
+
+
+                                              - bsonobjectid: a bson object 
ID, i.e. a 24 characters hex string
+                                              - uri: an URI as parsed by 
Golang net/url.ParseRequestURI
+                                              - email: an email address as 
parsed by Golang net/mail.ParseAddress
+                                              - hostname: a valid 
representation for an Internet host name, as defined by RFC 1034, section 3.1 
[RFC1034].
+                                              - ipv4: an IPv4 IP as parsed by 
Golang net.ParseIP
+                                              - ipv6: an IPv6 IP as parsed by 
Golang net.ParseIP
+                                              - cidr: a CIDR as parsed by 
Golang net.ParseCIDR
+                                              - mac: a MAC address as parsed 
by Golang net.ParseMAC
+                                              - uuid: an UUID that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                              - uuid3: an UUID3 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                              - uuid4: an UUID4 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                              - uuid5: an UUID5 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                              - isbn: an ISBN10 or ISBN13 
number string like "0321751043" or "978-0321751041"
+                                              - isbn10: an ISBN10 number 
string like "0321751043"
+                                              - isbn13: an ISBN13 number 
string like "978-0321751041"
+                                              - creditcard: a credit card 
number defined by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                                              - ssn: a U.S. social security 
number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                                              - hexcolor: an hexadecimal color 
code like "#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                                              - rgbcolor: an RGB color code 
like rgb like "rgb(255,255,255)"
+                                              - byte: base64 encoded binary 
data
+                                              - password: any kind of string
+                                              - date: a date string like 
"2006-01-02" as defined by full-date in RFC3339
+                                              - duration: a duration string 
like "22 ns" as parsed by Golang time.ParseDuration or compatible with Scala 
duration format
+                                              - datetime: a date time string 
like "2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                                            type: string
+                                          id:
+                                            type: string
+                                          maxItems:
+                                            format: int64
+                                            type: integer
+                                          maxLength:
+                                            format: int64
+                                            type: integer
+                                          maxProperties:
+                                            format: int64
+                                            type: integer
+                                          maximum:
+                                            description: A Number represents a 
JSON
+                                              number literal.
+                                            type: string
+                                          minItems:
+                                            format: int64
+                                            type: integer
+                                          minLength:
+                                            format: int64
+                                            type: integer
+                                          minProperties:
+                                            format: int64
+                                            type: integer
+                                          minimum:
+                                            description: A Number represents a 
JSON
+                                              number literal.
+                                            type: string
+                                          multipleOf:
+                                            description: A Number represents a 
JSON
+                                              number literal.
+                                            type: string
+                                          nullable:
+                                            type: boolean
+                                          pattern:
+                                            type: string
+                                          title:
+                                            type: string
+                                          type:
+                                            type: string
+                                          uniqueItems:
+                                            type: boolean
+                                          x-descriptors:
+                                            description: XDescriptors is a 
list of
+                                              extended properties that trigger 
a custom
+                                              behavior in external systems
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      type: object
+                                    required:
+                                      items:
+                                        type: string
+                                      type: array
+                                    title:
+                                      type: string
+                                    type:
+                                      type: string
+                                  type: object
+                                scheme:
+                                  description: the data type component scheme
+                                  type: string
+                              type: object
+                            description: one to many data type specifications
+                            type: object
+                        type: object
+                      description: data specification types for the events 
consumed/produced
+                        by the Kamelet
+                      type: object
+                    definition:
+                      description: defines the formal configuration of the 
Kamelet
+                      properties:
+                        $schema:
+                          description: JSONSchemaURL represents a schema url.
+                          type: string
+                        description:
+                          type: string
+                        example:
+                          description: |-
+                            JSON represents any valid JSON value.
+                            These types are supported: bool, int64, float64, 
string, []interface{}, map[string]interface{} and nil.
+                          x-kubernetes-preserve-unknown-fields: true
+                        externalDocs:
+                          description: ExternalDocumentation allows 
referencing an
+                            external resource for extended documentation.
+                          properties:
+                            description:
+                              type: string
+                            url:
+                              type: string
+                          type: object
+                        id:
+                          type: string
+                        properties:
+                          additionalProperties:
+                            properties:
+                              default:
+                                description: default is a default value for 
undefined
+                                  object fields.
+                                x-kubernetes-preserve-unknown-fields: true
+                              deprecated:
+                                type: boolean
+                              description:
+                                type: string
+                              enum:
+                                items:
+                                  description: |-
+                                    JSON represents any valid JSON value.
+                                    These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                  x-kubernetes-preserve-unknown-fields: true
+                                type: array
+                              example:
+                                description: |-
+                                  JSON represents any valid JSON value.
+                                  These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                x-kubernetes-preserve-unknown-fields: true
+                              exclusiveMaximum:
+                                type: boolean
+                              exclusiveMinimum:
+                                type: boolean
+                              format:
+                                description: |-
+                                  format is an OpenAPI v3 format string. 
Unknown formats are ignored. The following formats are validated:
+
+
+                                  - bsonobjectid: a bson object ID, i.e. a 24 
characters hex string
+                                  - uri: an URI as parsed by Golang 
net/url.ParseRequestURI
+                                  - email: an email address as parsed by 
Golang net/mail.ParseAddress
+                                  - hostname: a valid representation for an 
Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
+                                  - ipv4: an IPv4 IP as parsed by Golang 
net.ParseIP
+                                  - ipv6: an IPv6 IP as parsed by Golang 
net.ParseIP
+                                  - cidr: a CIDR as parsed by Golang 
net.ParseCIDR
+                                  - mac: a MAC address as parsed by Golang 
net.ParseMAC
+                                  - uuid: an UUID that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                  - uuid3: an UUID3 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                  - uuid4: an UUID4 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                  - uuid5: an UUID5 that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                  - isbn: an ISBN10 or ISBN13 number string 
like "0321751043" or "978-0321751041"
+                                  - isbn10: an ISBN10 number string like 
"0321751043"
+                                  - isbn13: an ISBN13 number string like 
"978-0321751041"
+                                  - creditcard: a credit card number defined 
by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                                  - ssn: a U.S. social security number 
following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                                  - hexcolor: an hexadecimal color code like 
"#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                                  - rgbcolor: an RGB color code like rgb like 
"rgb(255,255,255)"
+                                  - byte: base64 encoded binary data
+                                  - password: any kind of string
+                                  - date: a date string like "2006-01-02" as 
defined by full-date in RFC3339
+                                  - duration: a duration string like "22 ns" 
as parsed by Golang time.ParseDuration or compatible with Scala duration format
+                                  - datetime: a date time string like 
"2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                                type: string
+                              id:
+                                type: string
+                              maxItems:
+                                format: int64
+                                type: integer
+                              maxLength:
+                                format: int64
+                                type: integer
+                              maxProperties:
+                                format: int64
+                                type: integer
+                              maximum:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              minItems:
+                                format: int64
+                                type: integer
+                              minLength:
+                                format: int64
+                                type: integer
+                              minProperties:
+                                format: int64
+                                type: integer
+                              minimum:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              multipleOf:
+                                description: A Number represents a JSON number 
literal.
+                                type: string
+                              nullable:
+                                type: boolean
+                              pattern:
+                                type: string
+                              title:
+                                type: string
+                              type:
+                                type: string
+                              uniqueItems:
+                                type: boolean
+                              x-descriptors:
+                                description: XDescriptors is a list of 
extended properties
+                                  that trigger a custom behavior in external 
systems
+                                items:
+                                  type: string
+                                type: array
+                            type: object
+                          type: object
+                        required:
+                          items:
+                            type: string
+                          type: array
+                        title:
+                          type: string
+                        type:
+                          type: string
+                      type: object
+                    dependencies:
+                      description: Camel dependencies needed by the Kamelet
+                      items:
+                        type: string
+                      type: array
+                    sources:
+                      description: sources in any Camel DSL supported
+                      items:
+                        description: SourceSpec defines the configuration for 
one
+                          or more routes to be executed in a certain Camel DSL 
language.
+                        properties:
+                          compression:
+                            description: if the content is compressed (base64 
encrypted)
+                            type: boolean
+                          content:
+                            description: the source code (plain text)
+                            type: string
+                          contentKey:
+                            description: the confimap key holding the source 
content
+                            type: string
+                          contentRef:
+                            description: the confimap reference holding the 
source
+                              content
+                            type: string
+                          contentType:
+                            description: the content type (tipically text or 
binary)
+                            type: string
+                          from-kamelet:
+                            description: True if the spec is generated from a 
Kamelet
+                            type: boolean
+                          interceptors:
+                            description: |-
+                              Interceptors are optional identifiers the 
org.apache.camel.k.RoutesLoader
+                              uses to pre/post process sources
+                            items:
+                              type: string
+                            type: array
+                          language:
+                            description: specify which is the language (Camel 
DSL)
+                              used to interpret this source code
+                            type: string
+                          loader:
+                            description: |-
+                              Loader is an optional id of the 
org.apache.camel.k.RoutesLoader that will
+                              interpret this source at runtime
+                            type: string
+                          name:
+                            description: the name of the specification
+                            type: string
+                          path:
+                            description: the path where the file is stored
+                            type: string
+                          property-names:
+                            description: List of property names defined in the 
source
+                              (e.g. if type is "template")
+                            items:
+                              type: string
+                            type: array
+                          rawContent:
+                            description: the source code (binary)
+                            format: byte
+                            type: string
+                          type:
+                            description: Type defines the kind of source 
described
+                              by this object
+                            type: string
+                        type: object
+                      type: array
+                    template:
+                      description: the main source in YAML DSL
+                      type: object
+                      x-kubernetes-preserve-unknown-fields: true
+                    types:
+                      additionalProperties:
+                        description: |-
+                          EventTypeSpec represents a specification for an 
event type.
+                          Deprecated: In favor of using DataTypeSpec.
+                        properties:
+                          mediaType:
+                            description: media type as expected for HTTP media 
types
+                              (ie, application/json)
+                            type: string
+                          schema:
+                            description: the expected schema for the event
+                            properties:
+                              $schema:
+                                description: JSONSchemaURL represents a schema 
url.
+                                type: string
+                              description:
+                                type: string
+                              example:
+                                description: |-
+                                  JSON represents any valid JSON value.
+                                  These types are supported: bool, int64, 
float64, string, []interface{}, map[string]interface{} and nil.
+                                x-kubernetes-preserve-unknown-fields: true
+                              externalDocs:
+                                description: ExternalDocumentation allows 
referencing
+                                  an external resource for extended 
documentation.
+                                properties:
+                                  description:
+                                    type: string
+                                  url:
+                                    type: string
+                                type: object
+                              id:
+                                type: string
+                              properties:
+                                additionalProperties:
+                                  properties:
+                                    default:
+                                      description: default is a default value 
for
+                                        undefined object fields.
+                                      x-kubernetes-preserve-unknown-fields: 
true
+                                    deprecated:
+                                      type: boolean
+                                    description:
+                                      type: string
+                                    enum:
+                                      items:
+                                        description: |-
+                                          JSON represents any valid JSON value.
+                                          These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                        x-kubernetes-preserve-unknown-fields: 
true
+                                      type: array
+                                    example:
+                                      description: |-
+                                        JSON represents any valid JSON value.
+                                        These types are supported: bool, 
int64, float64, string, []interface{}, map[string]interface{} and nil.
+                                      x-kubernetes-preserve-unknown-fields: 
true
+                                    exclusiveMaximum:
+                                      type: boolean
+                                    exclusiveMinimum:
+                                      type: boolean
+                                    format:
+                                      description: |-
+                                        format is an OpenAPI v3 format string. 
Unknown formats are ignored. The following formats are validated:
+
+
+                                        - bsonobjectid: a bson object ID, i.e. 
a 24 characters hex string
+                                        - uri: an URI as parsed by Golang 
net/url.ParseRequestURI
+                                        - email: an email address as parsed by 
Golang net/mail.ParseAddress
+                                        - hostname: a valid representation for 
an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
+                                        - ipv4: an IPv4 IP as parsed by Golang 
net.ParseIP
+                                        - ipv6: an IPv6 IP as parsed by Golang 
net.ParseIP
+                                        - cidr: a CIDR as parsed by Golang 
net.ParseCIDR
+                                        - mac: a MAC address as parsed by 
Golang net.ParseMAC
+                                        - uuid: an UUID that allows uppercase 
defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                        - uuid3: an UUID3 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+                                        - uuid4: an UUID4 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                        - uuid5: an UUID5 that allows 
uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+                                        - isbn: an ISBN10 or ISBN13 number 
string like "0321751043" or "978-0321751041"
+                                        - isbn10: an ISBN10 number string like 
"0321751043"
+                                        - isbn13: an ISBN13 number string like 
"978-0321751041"
+                                        - creditcard: a credit card number 
defined by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+                                        - ssn: a U.S. social security number 
following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
+                                        - hexcolor: an hexadecimal color code 
like "#FFFFFF" following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+                                        - rgbcolor: an RGB color code like rgb 
like "rgb(255,255,255)"
+                                        - byte: base64 encoded binary data
+                                        - password: any kind of string
+                                        - date: a date string like 
"2006-01-02" as defined by full-date in RFC3339
+                                        - duration: a duration string like "22 
ns" as parsed by Golang time.ParseDuration or compatible with Scala duration 
format
+                                        - datetime: a date time string like 
"2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
+                                      type: string
+                                    id:
+                                      type: string
+                                    maxItems:
+                                      format: int64
+                                      type: integer
+                                    maxLength:
+                                      format: int64
+                                      type: integer
+                                    maxProperties:
+                                      format: int64
+                                      type: integer
+                                    maximum:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    minItems:
+                                      format: int64
+                                      type: integer
+                                    minLength:
+                                      format: int64
+                                      type: integer
+                                    minProperties:
+                                      format: int64
+                                      type: integer
+                                    minimum:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    multipleOf:
+                                      description: A Number represents a JSON 
number
+                                        literal.
+                                      type: string
+                                    nullable:
+                                      type: boolean
+                                    pattern:
+                                      type: string
+                                    title:
+                                      type: string
+                                    type:
+                                      type: string
+                                    uniqueItems:
+                                      type: boolean
+                                    x-descriptors:
+                                      description: XDescriptors is a list of 
extended
+                                        properties that trigger a custom 
behavior
+                                        in external systems
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                type: object
+                              required:
+                                items:
+                                  type: string
+                                type: array
+                              title:
+                                type: string
+                              type:
+                                type: string
+                            type: object
+                        type: object
+                      description: |-
+                        data specification types for the events 
consumed/produced by the Kamelet
+                        Deprecated: In favor of using DataTypes
+                      type: object
+                  type: object
+                description: |-
+                  the optional versions available for this Kamelet. This field 
may not be taken in account by Camel core and is meant to support
+                  any user defined versioning model on cluster only. If the 
user wants to use any given version, she must materialize a file with the given 
version spec
+                  as the `main` Kamelet spec on the runtime.
+                type: object
+            type: object
+          status:
+            default:
+              phase: Ready
+            description: |-
+              the actual status of the resource
+              Deprecated no longer in use
+            properties:
+              conditions:
+                description: Conditions --
+                items:
+                  description: KameletCondition describes the state of a 
resource
+                    at a certain point.
+                  properties:
+                    lastTransitionTime:
+                      description: Last time the condition transitioned from 
one status
+                        to another.
+                      format: date-time
+                      type: string
+                    lastUpdateTime:
+                      description: The last time this condition was updated.
+                      format: date-time
+                      type: string
+                    message:
+                      description: A human-readable message indicating details 
about
+                        the transition.
+                      type: string
+                    reason:
+                      description: The reason for the condition's last 
transition.
+                      type: string
+                    status:
+                      description: Status of the condition, one of True, 
False, Unknown.
+                      type: string
+                    type:
+                      description: Type of kamelet condition.
+                      type: string
+                  required:
+                  - status
+                  - type
+                  type: object
+                type: array
+              observedGeneration:
+                description: ObservedGeneration is the most recent generation 
observed
+                  for this Kamelet.
+                format: int64
+                type: integer
+              phase:
+                description: Phase --
+                type: string
+              properties:
+                description: Properties --
+                items:
+                  description: KameletProperty specify the behavior of a 
property
+                    in a Kamelet.
+                  properties:
+                    default:
+                      description: the default value of the property (if any)
+                      type: string
+                    name:
+                      description: the name of the property
+                      type: string
+                  type: object
+                type: array
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
diff --git a/crds/generate.sh b/crds/generate.sh
new file mode 100755
index 00000000..90f91c42
--- /dev/null
+++ b/crds/generate.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+deploy_crd_file() {
+  source=$1
+  # Make a copy to serve as the base for post-processing
+  cp "$source" "${source}.orig"
+  # Post-process source
+  cat ./header.txt > "$source"
+  echo "" >> "$source"
+  cat ${source}.orig >> "$source"
+
+  for dest in "${@:2}"; do
+    cp "$source" "$dest"
+  done
+
+  # Remove the copy as no longer required
+  rm -f "${source}.orig"
+}
+
+go install sigs.k8s.io/controller-tools/cmd/[email protected]
+$(go env GOPATH)/bin/controller-gen object paths=./...
+$(go env GOPATH)/bin/controller-gen crd paths=./...
+# Let's also run some test to validate the project
+go test ./...
+go build ./...
+
+deploy_crd_file ./config/crd/camel.apache.org_kamelets.yaml
diff --git a/crds/go.mod b/crds/go.mod
new file mode 100644
index 00000000..f11ee788
--- /dev/null
+++ b/crds/go.mod
@@ -0,0 +1,29 @@
+module github.com/apache/camel-kamelets
+
+go 1.22
+
+require (
+       github.com/stretchr/testify v1.8.4
+       k8s.io/api v0.29.7
+       k8s.io/apimachinery v0.29.7
+)
+
+require (
+       github.com/davecgh/go-spew v1.1.1 // indirect
+       github.com/go-logr/logr v1.4.2 // indirect
+       github.com/gogo/protobuf v1.3.2 // indirect
+       github.com/google/gofuzz v1.2.0 // indirect
+       github.com/json-iterator/go v1.1.12 // indirect
+       github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
+       github.com/modern-go/reflect2 v1.0.2 // indirect
+       github.com/pmezard/go-difflib v1.0.0 // indirect
+       golang.org/x/net v0.26.0 // indirect
+       golang.org/x/text v0.16.0 // indirect
+       gopkg.in/inf.v0 v0.9.1 // indirect
+       gopkg.in/yaml.v2 v2.4.0 // indirect
+       gopkg.in/yaml.v3 v3.0.1 // indirect
+       k8s.io/klog/v2 v2.130.1 // indirect
+       k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
+       sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+       sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+)
diff --git a/crds/go.sum b/crds/go.sum
new file mode 100644
index 00000000..7b5f8144
--- /dev/null
+++ b/crds/go.sum
@@ -0,0 +1,91 @@
+github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 
h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
+github.com/go-logr/logr v1.4.2/go.mod 
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod 
h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/google/go-cmp v0.5.9/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/json-iterator/go v1.1.12 
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod 
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kisielk/errcheck v1.5.0/go.mod 
h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod 
h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod 
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd 
h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 
h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod 
h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rogpeppe/go-internal v1.10.0 
h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/rogpeppe/go-internal v1.10.0/go.mod 
h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.8.4 
h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod 
h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/yuin/goldmark v1.1.27/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod 
h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
+golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
+golang.org/x/text v0.16.0/go.mod 
h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod 
h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod 
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+k8s.io/api v0.29.7 h1:Q2/thp7YYESgy0MGzxT9RvA/6doLJHBXSFH8GGLxSbc=
+k8s.io/api v0.29.7/go.mod h1:mPimdbyuIjwoLtBEVIGVUYb4BKOE+44XHt/n4IqKsLA=
+k8s.io/apimachinery v0.29.7 h1:ICXzya58Q7hyEEfnTrbmdfX1n1schSepX2KUfC2/ykc=
+k8s.io/apimachinery v0.29.7/go.mod 
h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
+k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
+k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 
h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A=
+k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd 
h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
+sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod 
h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 
h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod 
h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/crds/header.txt b/crds/header.txt
new file mode 100644
index 00000000..3baaf375
--- /dev/null
+++ b/crds/header.txt
@@ -0,0 +1,16 @@
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
diff --git a/crds/pkg/apis/camel/group.go b/crds/pkg/apis/camel/group.go
new file mode 100644
index 00000000..4b483da2
--- /dev/null
+++ b/crds/pkg/apis/camel/group.go
@@ -0,0 +1,23 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package camel contains camel API versions.
+//
+// This file ensures Go source parsers acknowledge the camel package
+// and any child packages. It can be removed if any other Go source files are
+// added to this package.
+package camel
diff --git a/crds/pkg/apis/camel/kamelets_test.go 
b/crds/pkg/apis/camel/kamelets_test.go
new file mode 100644
index 00000000..dbb4d301
--- /dev/null
+++ b/crds/pkg/apis/camel/kamelets_test.go
@@ -0,0 +1,64 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package camel
+
+import (
+       "io/fs"
+       "os"
+       "path"
+       "path/filepath"
+       "strings"
+       "testing"
+
+       v1 "github.com/apache/camel-kamelets/pkg/apis/camel/v1"
+       "github.com/stretchr/testify/assert"
+       "gopkg.in/yaml.v3"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestBasicKameletSpec(t *testing.T) {
+       k := v1.Kamelet{
+               ObjectMeta: metav1.ObjectMeta{
+                       Name:      "my-kamelet",
+                       Namespace: "my-ns",
+               },
+               Spec: v1.KameletSpec{KameletSpecBase: 
v1.KameletSpecBase{Sources: []v1.SourceSpec{{DataSpec: v1.DataSpec{}}}}},
+       }
+       cloned := k.DeepCopy()
+       assert.Equal(t, cloned, &k)
+}
+
+func TestLibraryKamelets(t *testing.T) {
+       dir := "../../../../kamelets"
+       // We can use all the Kamelets in the catalog in order to validate the 
spec and viceversa, validate the Kamelets against the existing spec
+       err := filepath.WalkDir(dir, func(p string, f fs.DirEntry, err error) 
error {
+               assert.NoError(t, err)
+               if !(strings.HasSuffix(f.Name(), ".yaml") || 
strings.HasSuffix(f.Name(), ".yml")) {
+                       return nil
+               }
+               var kamelet *v1.Kamelet
+               yamlContent, err := os.ReadFile(path.Join(dir, f.Name()))
+               assert.NotEmpty(t, yamlContent)
+               assert.NoError(t, err)
+               err = yaml.Unmarshal(yamlContent, &kamelet)
+               assert.NoError(t, err)
+               assert.NotNil(t, kamelet, "Could not marshal Kamelet %s", 
f.Name())
+               return nil
+       })
+       assert.NoError(t, err)
+}
diff --git a/crds/pkg/apis/camel/v1/common_types.go 
b/crds/pkg/apis/camel/v1/common_types.go
new file mode 100644
index 00000000..4ac2e097
--- /dev/null
+++ b/crds/pkg/apis/camel/v1/common_types.go
@@ -0,0 +1,117 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1
+
+import (
+       corev1 "k8s.io/api/core/v1"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// +kubebuilder:object:generate=false
+
+// ResourceCondition is a common type for all conditions.
+type ResourceCondition interface {
+       GetType() string
+       GetStatus() corev1.ConditionStatus
+       GetLastUpdateTime() metav1.Time
+       GetLastTransitionTime() metav1.Time
+       GetReason() string
+       GetMessage() string
+}
+
+// RawMessage is a raw encoded JSON value.
+// It implements Marshaler and Unmarshaler and can
+// be used to delay JSON decoding or precompute a JSON encoding.
+// +kubebuilder:validation:Type=""
+// +kubebuilder:validation:Format=""
+// +kubebuilder:pruning:PreserveUnknownFields
+type RawMessage []byte
+
+// SourceSpec defines the configuration for one or more routes to be executed 
in a certain Camel DSL language.
+type SourceSpec struct {
+       // contains configuration related to the source code
+       DataSpec `json:",inline"`
+       // specify which is the language (Camel DSL) used to interpret this 
source code
+       Language Language `json:"language,omitempty"`
+       // Loader is an optional id of the org.apache.camel.k.RoutesLoader that 
will
+       // interpret this source at runtime
+       Loader string `json:"loader,omitempty"`
+       // Interceptors are optional identifiers the 
org.apache.camel.k.RoutesLoader
+       // uses to pre/post process sources
+       Interceptors []string `json:"interceptors,omitempty"`
+       // Type defines the kind of source described by this object
+       Type SourceType `json:"type,omitempty"`
+       // List of property names defined in the source (e.g. if type is 
"template")
+       PropertyNames []string `json:"property-names,omitempty"`
+       // True if the spec is generated from a Kamelet
+       FromKamelet bool `json:"from-kamelet,omitempty"`
+}
+
+// SourceType represents an available source type.
+type SourceType string
+
+const (
+       // SourceTypeDefault is used to represent a source code.
+       SourceTypeDefault SourceType = ""
+       // SourceTypeTemplate is used to represent a template.
+       SourceTypeTemplate SourceType = "template"
+       // SourceTypeErrorHandler is used to represent an error handler.
+       SourceTypeErrorHandler SourceType = "errorHandler"
+)
+
+// DataSpec represents the way the source is materialized in the running `Pod`.
+type DataSpec struct {
+       // the name of the specification
+       Name string `json:"name,omitempty"`
+       // the path where the file is stored
+       Path string `json:"path,omitempty"`
+       // the source code (plain text)
+       Content string `json:"content,omitempty"`
+       // the source code (binary)
+       RawContent []byte `json:"rawContent,omitempty"`
+       // the confimap reference holding the source content
+       ContentRef string `json:"contentRef,omitempty"`
+       // the confimap key holding the source content
+       ContentKey string `json:"contentKey,omitempty"`
+       // the content type (tipically text or binary)
+       ContentType string `json:"contentType,omitempty"`
+       // if the content is compressed (base64 encrypted)
+       Compression bool `json:"compression,omitempty"`
+}
+
+// Language represents a supported language (Camel DSL).
+type Language string
+
+const (
+       // LanguageJavaSource used for Java.
+       LanguageJavaSource Language = "java"
+       // LanguageGroovy used for Groovy.
+       LanguageGroovy Language = "groovy"
+       // LanguageJavaScript  used for Javascript.
+       LanguageJavaScript Language = "js"
+       // LanguageXML used for XML.
+       LanguageXML Language = "xml"
+       // LanguageKotlin used for Kotlin.
+       LanguageKotlin Language = "kts"
+       // LanguageYaml used for YAML.
+       LanguageYaml Language = "yaml"
+       // LanguageKamelet used for Kamelets.
+       LanguageKamelet Language = "kamelet"
+       // LanguageJavaShell used for Java Shell.
+       LanguageJavaShell Language = "jsh"
+)
diff --git a/crds/pkg/apis/camel/v1/jsonschema_types.go 
b/crds/pkg/apis/camel/v1/jsonschema_types.go
new file mode 100644
index 00000000..41d70a70
--- /dev/null
+++ b/crds/pkg/apis/camel/v1/jsonschema_types.go
@@ -0,0 +1,108 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// NOTE: this file has been originally copied from 
https://github.com/kubernetes/apiextensions-apiserver/blob/33bb2d8b009bae408e40818a93877459efeb4cb1/pkg/apis/apiextensions/v1/types_jsonschema.go
+
+package v1
+
+import (
+       "encoding/json"
+)
+
+type JSONSchemaProp struct {
+       ID          string `json:"id,omitempty"`
+       Deprecated  bool   `json:"deprecated,omitempty"`
+       Description string `json:"description,omitempty"`
+       Type        string `json:"type,omitempty"`
+       // format is an OpenAPI v3 format string. Unknown formats are ignored. 
The following formats are validated:
+       //
+       // - bsonobjectid: a bson object ID, i.e. a 24 characters hex string
+       // - uri: an URI as parsed by Golang net/url.ParseRequestURI
+       // - email: an email address as parsed by Golang net/mail.ParseAddress
+       // - hostname: a valid representation for an Internet host name, as 
defined by RFC 1034, section 3.1 [RFC1034].
+       // - ipv4: an IPv4 IP as parsed by Golang net.ParseIP
+       // - ipv6: an IPv6 IP as parsed by Golang net.ParseIP
+       // - cidr: a CIDR as parsed by Golang net.ParseCIDR
+       // - mac: a MAC address as parsed by Golang net.ParseMAC
+       // - uuid: an UUID that allows uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+       // - uuid3: an UUID3 that allows uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
+       // - uuid4: an UUID4 that allows uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+       // - uuid5: an UUID5 that allows uppercase defined by the regex 
(?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
+       // - isbn: an ISBN10 or ISBN13 number string like "0321751043" or 
"978-0321751041"
+       // - isbn10: an ISBN10 number string like "0321751043"
+       // - isbn13: an ISBN13 number string like "978-0321751041"
+       // - creditcard: a credit card number defined by the regex 
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$
 with any non digit characters mixed in
+       // - ssn: a U.S. social security number following the regex ^\\d{3}[- 
]?\\d{2}[- ]?\\d{4}$
+       // - hexcolor: an hexadecimal color code like "#FFFFFF" following the 
regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
+       // - rgbcolor: an RGB color code like rgb like "rgb(255,255,255)"
+       // - byte: base64 encoded binary data
+       // - password: any kind of string
+       // - date: a date string like "2006-01-02" as defined by full-date in 
RFC3339
+       // - duration: a duration string like "22 ns" as parsed by Golang 
time.ParseDuration or compatible with Scala duration format
+       // - datetime: a date time string like "2014-12-15T19:30:20.000Z" as 
defined by date-time in RFC3339.
+       Format string `json:"format,omitempty"`
+       Title  string `json:"title,omitempty"`
+       // default is a default value for undefined object fields.
+       Default          *JSON        `json:"default,omitempty"`
+       Maximum          *json.Number `json:"maximum,omitempty"`
+       ExclusiveMaximum bool         `json:"exclusiveMaximum,omitempty"`
+       Minimum          *json.Number `json:"minimum,omitempty"`
+       ExclusiveMinimum bool         `json:"exclusiveMinimum,omitempty"`
+       MaxLength        *int64       `json:"maxLength,omitempty"`
+       MinLength        *int64       `json:"minLength,omitempty"`
+       Pattern          string       `json:"pattern,omitempty"`
+       MaxItems         *int64       `json:"maxItems,omitempty"`
+       MinItems         *int64       `json:"minItems,omitempty"`
+       UniqueItems      bool         `json:"uniqueItems,omitempty"`
+       MaxProperties    *int64       `json:"maxProperties,omitempty"`
+       MinProperties    *int64       `json:"minProperties,omitempty"`
+       MultipleOf       *json.Number `json:"multipleOf,omitempty"`
+       Enum             []JSON       `json:"enum,omitempty"`
+       Example          *JSON        `json:"example,omitempty"`
+       Nullable         bool         `json:"nullable,omitempty"`
+       // XDescriptors is a list of extended properties that trigger a custom 
behavior in external systems
+       XDescriptors []string `json:"x-descriptors,omitempty"`
+}
+
+// JSONSchemaProps is a JSON-Schema following Specification Draft 4 
(http://json-schema.org/).
+type JSONSchemaProps struct {
+       ID           string                    `json:"id,omitempty"`
+       Description  string                    `json:"description,omitempty"`
+       Title        string                    `json:"title,omitempty"`
+       Properties   map[string]JSONSchemaProp `json:"properties,omitempty"`
+       Required     []string                  `json:"required,omitempty"`
+       Example      *JSON                     `json:"example,omitempty"`
+       ExternalDocs *ExternalDocumentation    `json:"externalDocs,omitempty"`
+       Schema       JSONSchemaURL             `json:"$schema,omitempty"`
+       Type         string                    `json:"type,omitempty"`
+}
+
+// +kubebuilder:validation:Type=""
+// JSON represents any valid JSON value.
+// These types are supported: bool, int64, float64, string, []interface{}, 
map[string]interface{} and nil.
+type JSON struct {
+       RawMessage `json:",inline"`
+}
+
+// JSONSchemaURL represents a schema url.
+type JSONSchemaURL string
+
+// ExternalDocumentation allows referencing an external resource for extended 
documentation.
+type ExternalDocumentation struct {
+       Description string `json:"description,omitempty"`
+       URL         string `json:"url,omitempty"`
+}
diff --git a/crds/pkg/apis/camel/v1/kamelet_types.go 
b/crds/pkg/apis/camel/v1/kamelet_types.go
new file mode 100644
index 00000000..3a571d46
--- /dev/null
+++ b/crds/pkg/apis/camel/v1/kamelet_types.go
@@ -0,0 +1,252 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1
+
+import (
+       corev1 "k8s.io/api/core/v1"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+const (
+       // AnnotationIcon label used by icons.
+       AnnotationIcon = "camel.apache.org/kamelet.icon"
+       // KameletBundledLabel label used by bundling.
+       KameletBundledLabel = "camel.apache.org/kamelet.bundled"
+       // KameletReadOnlyLabel label used to identify readonly Kamelets.
+       KameletReadOnlyLabel = "camel.apache.org/kamelet.readonly"
+       // KameletTypeLabel label used to identify Kamelet type.
+       KameletTypeLabel = "camel.apache.org/kamelet.type"
+       // KameletGroupLabel label used to group Kamelets.
+       KameletGroupLabel = "camel.apache.org/kamelet.group"
+       // KameletDataTypeLabel label used to override the default Kamelet 
action data type.
+       KameletDataTypeLabel = "camel.apache.org/kamelet.data.type"
+
+       // KameletTypeSink type Sink.
+       KameletTypeSink = "sink"
+       // KameletTypeSource type Source.
+       KameletTypeSource = "source"
+       // KameletTypeAction type Action.
+       KameletTypeAction = "action"
+)
+
+var (
+       // reservedKameletNames used to mark reserved names.
+       reservedKameletNames = map[string]bool{"source": true, "sink": true}
+       // KameletIDProperty used to identify.
+       KameletIDProperty = "id"
+       // KameletVersionProperty used to specify the version to use.
+       KameletVersionProperty = "kameletVersion"
+)
+
+// +genclient
+// +kubebuilder:object:root=true
+// +kubebuilder:storageversion
+// 
+kubebuilder:resource:path=kamelets,scope=Namespaced,shortName=kl,categories=kamel;camel
+// +kubebuilder:subresource:status
+// 
+kubebuilder:printcolumn:name="Type",type=string,JSONPath=`.metadata.labels.camel\.apache\.org\/kamelet\.type`,description="The
 Kamelet type"
+// 
+kubebuilder:printcolumn:name="Provider",type=string,JSONPath=`.metadata.annotations.camel\.apache\.org\/provider`,description="The
 Kamelet provider"
+// 
+kubebuilder:printcolumn:name="Bundled",type=string,JSONPath=`.metadata.labels.camel\.apache\.org\/kamelet\.bundled`,description="The
 Kamelet bundled"
+// +kubebuilder:printcolumn:name="Camel 
Version",type=string,JSONPath=`.metadata.annotations.camel\.apache\.org\/catalog\.version`,description="The
 Camel compatible version"
+
+// Kamelet is the Schema for the kamelets API.
+type Kamelet struct {
+       metav1.TypeMeta   `json:",inline"`
+       metav1.ObjectMeta `json:"metadata,omitempty"`
+
+       // the desired specification
+       Spec KameletSpec `json:"spec,omitempty"`
+       // the actual status of the resource
+       // +kubebuilder:default:={phase:"Ready"}
+       // Deprecated no longer in use
+       Status KameletStatus `json:"status,omitempty"`
+}
+
+// KameletSpec specifies the configuration required to execute a Kamelet.
+type KameletSpec struct {
+       KameletSpecBase `json:",inline"`
+       // the optional versions available for this Kamelet. This field may not 
be taken in account by Camel core and is meant to support
+       // any user defined versioning model on cluster only. If the user wants 
to use any given version, she must materialize a file with the given version 
spec
+       // as the `main` Kamelet spec on the runtime.
+       Versions map[string]KameletSpecBase `json:"versions,omitempty"`
+}
+
+// KameletSpecBase specifies the base configuration of a Kamelet.
+type KameletSpecBase struct {
+       // defines the formal configuration of the Kamelet
+       Definition *JSONSchemaProps `json:"definition,omitempty"`
+       // sources in any Camel DSL supported
+       Sources []SourceSpec `json:"sources,omitempty"`
+       // the main source in YAML DSL
+       Template *Template `json:"template,omitempty"`
+       // data specification types for the events consumed/produced by the 
Kamelet
+       // Deprecated: In favor of using DataTypes
+       Types map[TypeSlot]EventTypeSpec `json:"types,omitempty"`
+       // data specification types for the events consumed/produced by the 
Kamelet
+       DataTypes map[TypeSlot]DataTypesSpec `json:"dataTypes,omitempty"`
+       // Camel dependencies needed by the Kamelet
+       Dependencies []string `json:"dependencies,omitempty"`
+}
+
+// Template is an unstructured object representing a Kamelet template in 
YAML/JSON DSL.
+type Template struct {
+       // an unstructured raw message
+       RawMessage `json:",inline"`
+}
+
+// TypeSlot represent a kind of data (ie, input, output, ...).
+type TypeSlot string
+
+const (
+       // TypeSlotIn is used for the input events.
+       TypeSlotIn TypeSlot = "in"
+       // TypeSlotOut is used for the output events.
+       TypeSlotOut TypeSlot = "out"
+       // TypeSlotError is used for the error events.
+       TypeSlotError TypeSlot = "error"
+)
+
+// EventTypeSpec represents a specification for an event type.
+// Deprecated: In favor of using DataTypeSpec.
+type EventTypeSpec struct {
+       // media type as expected for HTTP media types (ie, application/json)
+       MediaType string `json:"mediaType,omitempty"`
+       // the expected schema for the event
+       Schema *JSONSchemaProps `json:"schema,omitempty"`
+}
+
+// DataTypesSpec represents the specification for a set of data types.
+type DataTypesSpec struct {
+       // the default data type for this Kamelet
+       Default string `json:"default,omitempty"`
+       // one to many data type specifications
+       Types map[string]DataTypeSpec `json:"types,omitempty"`
+       // one to many header specifications
+       Headers map[string]HeaderSpec `json:"headers,omitempty"`
+}
+
+// DataTypeSpec represents the specification for a data type.
+type DataTypeSpec struct {
+       // the data type component scheme
+       Scheme string `json:"scheme,omitempty"`
+       // the data type format name
+       Format string `json:"format,omitempty"`
+       // optional description
+       Description string `json:"description,omitempty"`
+       // media type as expected for HTTP media types (ie, application/json)
+       MediaType string `json:"mediaType,omitempty"`
+       // the list of Camel or Maven dependencies required by the data type
+       Dependencies []string `json:"dependencies,omitempty"`
+       // one to many header specifications
+       Headers map[string]HeaderSpec `json:"headers,omitempty"`
+       // the expected schema for the data type
+       Schema *JSONSchemaProps `json:"schema,omitempty"`
+}
+
+// DataTypeReference references to the specification of a data type by its 
scheme and format name.
+type DataTypeReference struct {
+       // the data type component scheme
+       Scheme string `json:"scheme,omitempty"`
+       // the data type format name
+       Format string `json:"format,omitempty"`
+}
+
+// HeaderSpec represents the specification for a header used in the Kamelet.
+type HeaderSpec struct {
+       Type        string `json:"type,omitempty"`
+       Title       string `json:"title,omitempty"`
+       Description string `json:"description,omitempty"`
+       Required    bool   `json:"required,omitempty"`
+       Default     string `json:"default,omitempty"`
+}
+
+// KameletStatus defines the observed state of Kamelet.
+type KameletStatus struct {
+       // ObservedGeneration is the most recent generation observed for this 
Kamelet.
+       ObservedGeneration int64 `json:"observedGeneration,omitempty"`
+       // Phase --
+       Phase KameletPhase `json:"phase,omitempty"`
+       // Conditions --
+       Conditions []KameletCondition `json:"conditions,omitempty"`
+       // Properties --
+       Properties []KameletProperty `json:"properties,omitempty"`
+}
+
+// KameletProperty specify the behavior of a property in a Kamelet.
+type KameletProperty struct {
+       // the name of the property
+       Name string `json:"name,omitempty"`
+       // the default value of the property (if any)
+       Default string `json:"default,omitempty"`
+}
+
+// KameletCondition describes the state of a resource at a certain point.
+type KameletCondition struct {
+       // Type of kamelet condition.
+       Type KameletConditionType `json:"type"`
+       // Status of the condition, one of True, False, Unknown.
+       Status corev1.ConditionStatus `json:"status"`
+       // The last time this condition was updated.
+       LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
+       // Last time the condition transitioned from one status to another.
+       LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
+       // The reason for the condition's last transition.
+       Reason string `json:"reason,omitempty"`
+       // A human-readable message indicating details about the transition.
+       Message string `json:"message,omitempty"`
+}
+
+// KameletConditionType --.
+type KameletConditionType string
+
+const (
+       // KameletConditionReady --.
+       KameletConditionReady KameletConditionType = "Ready"
+)
+
+const (
+       // KameletConditionReasonInvalidName --.
+       KameletConditionReasonInvalidName string = "InvalidName"
+       // KameletConditionReasonInvalidProperty --.
+       KameletConditionReasonInvalidProperty string = "InvalidProperty"
+       // KameletConditionReasonInvalidTemplate --.
+       KameletConditionReasonInvalidTemplate string = "InvalidTemplate"
+)
+
+// KameletPhase --.
+type KameletPhase string
+
+const (
+       // KameletKind --.
+       KameletKind string = "Kamelet"
+
+       // KameletPhaseNone --.
+       KameletPhaseNone KameletPhase = ""
+       // KameletPhaseReady --.
+       KameletPhaseReady KameletPhase = "Ready"
+       // KameletPhaseError --.
+       KameletPhaseError KameletPhase = "Error"
+)
+
+// +kubebuilder:object:root=true
+
+// KameletList contains a list of Kamelet.
+type KameletList struct {
+       metav1.TypeMeta `json:",inline"`
+       metav1.ListMeta `json:"metadata,omitempty"`
+       Items           []Kamelet `json:"items"`
+}
diff --git a/crds/pkg/apis/camel/v1/register.go 
b/crds/pkg/apis/camel/v1/register.go
new file mode 100644
index 00000000..d36d093e
--- /dev/null
+++ b/crds/pkg/apis/camel/v1/register.go
@@ -0,0 +1,55 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// NOTE: Boilerplate only.  Ignore this file.
+
+// Package v1 contains API Schema definitions for the camel v1 API group
+// +kubebuilder:object:generate=true
+// +groupName=camel.apache.org
+package v1
+
+import (
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/runtime"
+       "k8s.io/apimachinery/pkg/runtime/schema"
+)
+
+var (
+       // SchemeGroupVersion is group version used to register these objects.
+       SchemeGroupVersion = schema.GroupVersion{Group: "camel.apache.org", 
Version: "v1"}
+
+       // SchemeBuilder is used to add go types to the GroupVersionKind scheme.
+       SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
+
+       // AddToScheme is a shortcut to SchemeBuilder.AddToScheme.
+       AddToScheme = SchemeBuilder.AddToScheme
+)
+
+// Resource takes an unqualified resource and returns a Group qualified 
GroupResource.
+func Resource(resource string) schema.GroupResource {
+       return SchemeGroupVersion.WithResource(resource).GroupResource()
+}
+
+// Adds the list of known types to Scheme.
+func addKnownTypes(scheme *runtime.Scheme) error {
+       scheme.AddKnownTypes(SchemeGroupVersion,
+               &Kamelet{},
+               &KameletList{},
+       )
+       metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
+       return nil
+}
diff --git a/crds/pkg/apis/camel/v1/zz_generated.deepcopy.go 
b/crds/pkg/apis/camel/v1/zz_generated.deepcopy.go
new file mode 100644
index 00000000..e51386d2
--- /dev/null
+++ b/crds/pkg/apis/camel/v1/zz_generated.deepcopy.go
@@ -0,0 +1,552 @@
+//go:build !ignore_autogenerated
+
+// Code generated by controller-gen. DO NOT EDIT.
+
+package v1
+
+import (
+       "encoding/json"
+       "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *DataSpec) DeepCopyInto(out *DataSpec) {
+       *out = *in
+       if in.RawContent != nil {
+               in, out := &in.RawContent, &out.RawContent
+               *out = make([]byte, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new DataSpec.
+func (in *DataSpec) DeepCopy() *DataSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(DataSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *DataTypeReference) DeepCopyInto(out *DataTypeReference) {
+       *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new DataTypeReference.
+func (in *DataTypeReference) DeepCopy() *DataTypeReference {
+       if in == nil {
+               return nil
+       }
+       out := new(DataTypeReference)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *DataTypeSpec) DeepCopyInto(out *DataTypeSpec) {
+       *out = *in
+       if in.Dependencies != nil {
+               in, out := &in.Dependencies, &out.Dependencies
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Headers != nil {
+               in, out := &in.Headers, &out.Headers
+               *out = make(map[string]HeaderSpec, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = val
+               }
+       }
+       if in.Schema != nil {
+               in, out := &in.Schema, &out.Schema
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new DataTypeSpec.
+func (in *DataTypeSpec) DeepCopy() *DataTypeSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(DataTypeSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *DataTypesSpec) DeepCopyInto(out *DataTypesSpec) {
+       *out = *in
+       if in.Types != nil {
+               in, out := &in.Types, &out.Types
+               *out = make(map[string]DataTypeSpec, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.Headers != nil {
+               in, out := &in.Headers, &out.Headers
+               *out = make(map[string]HeaderSpec, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = val
+               }
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new DataTypesSpec.
+func (in *DataTypesSpec) DeepCopy() *DataTypesSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(DataTypesSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *EventTypeSpec) DeepCopyInto(out *EventTypeSpec) {
+       *out = *in
+       if in.Schema != nil {
+               in, out := &in.Schema, &out.Schema
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new EventTypeSpec.
+func (in *EventTypeSpec) DeepCopy() *EventTypeSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(EventTypeSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *ExternalDocumentation) DeepCopyInto(out *ExternalDocumentation) {
+       *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new ExternalDocumentation.
+func (in *ExternalDocumentation) DeepCopy() *ExternalDocumentation {
+       if in == nil {
+               return nil
+       }
+       out := new(ExternalDocumentation)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *HeaderSpec) DeepCopyInto(out *HeaderSpec) {
+       *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new HeaderSpec.
+func (in *HeaderSpec) DeepCopy() *HeaderSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(HeaderSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *JSON) DeepCopyInto(out *JSON) {
+       *out = *in
+       if in.RawMessage != nil {
+               in, out := &in.RawMessage, &out.RawMessage
+               *out = make(RawMessage, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSON.
+func (in *JSON) DeepCopy() *JSON {
+       if in == nil {
+               return nil
+       }
+       out := new(JSON)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *JSONSchemaProp) DeepCopyInto(out *JSONSchemaProp) {
+       *out = *in
+       if in.Default != nil {
+               in, out := &in.Default, &out.Default
+               *out = new(JSON)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Maximum != nil {
+               in, out := &in.Maximum, &out.Maximum
+               *out = new(json.Number)
+               **out = **in
+       }
+       if in.Minimum != nil {
+               in, out := &in.Minimum, &out.Minimum
+               *out = new(json.Number)
+               **out = **in
+       }
+       if in.MaxLength != nil {
+               in, out := &in.MaxLength, &out.MaxLength
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MinLength != nil {
+               in, out := &in.MinLength, &out.MinLength
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MaxItems != nil {
+               in, out := &in.MaxItems, &out.MaxItems
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MinItems != nil {
+               in, out := &in.MinItems, &out.MinItems
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MaxProperties != nil {
+               in, out := &in.MaxProperties, &out.MaxProperties
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MinProperties != nil {
+               in, out := &in.MinProperties, &out.MinProperties
+               *out = new(int64)
+               **out = **in
+       }
+       if in.MultipleOf != nil {
+               in, out := &in.MultipleOf, &out.MultipleOf
+               *out = new(json.Number)
+               **out = **in
+       }
+       if in.Enum != nil {
+               in, out := &in.Enum, &out.Enum
+               *out = make([]JSON, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.Example != nil {
+               in, out := &in.Example, &out.Example
+               *out = new(JSON)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.XDescriptors != nil {
+               in, out := &in.XDescriptors, &out.XDescriptors
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaProp.
+func (in *JSONSchemaProp) DeepCopy() *JSONSchemaProp {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaProp)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *JSONSchemaProps) DeepCopyInto(out *JSONSchemaProps) {
+       *out = *in
+       if in.Properties != nil {
+               in, out := &in.Properties, &out.Properties
+               *out = make(map[string]JSONSchemaProp, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.Required != nil {
+               in, out := &in.Required, &out.Required
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Example != nil {
+               in, out := &in.Example, &out.Example
+               *out = new(JSON)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.ExternalDocs != nil {
+               in, out := &in.ExternalDocs, &out.ExternalDocs
+               *out = new(ExternalDocumentation)
+               **out = **in
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaProps.
+func (in *JSONSchemaProps) DeepCopy() *JSONSchemaProps {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaProps)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *Kamelet) DeepCopyInto(out *Kamelet) {
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new Kamelet.
+func (in *Kamelet) DeepCopy() *Kamelet {
+       if in == nil {
+               return nil
+       }
+       out := new(Kamelet)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, 
creating a new runtime.Object.
+func (in *Kamelet) DeepCopyObject() runtime.Object {
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletCondition) DeepCopyInto(out *KameletCondition) {
+       *out = *in
+       in.LastUpdateTime.DeepCopyInto(&out.LastUpdateTime)
+       in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletCondition.
+func (in *KameletCondition) DeepCopy() *KameletCondition {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletCondition)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletList) DeepCopyInto(out *KameletList) {
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]Kamelet, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletList.
+func (in *KameletList) DeepCopy() *KameletList {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletList)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, 
creating a new runtime.Object.
+func (in *KameletList) DeepCopyObject() runtime.Object {
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletProperty) DeepCopyInto(out *KameletProperty) {
+       *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletProperty.
+func (in *KameletProperty) DeepCopy() *KameletProperty {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletProperty)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletSpec) DeepCopyInto(out *KameletSpec) {
+       *out = *in
+       in.KameletSpecBase.DeepCopyInto(&out.KameletSpecBase)
+       if in.Versions != nil {
+               in, out := &in.Versions, &out.Versions
+               *out = make(map[string]KameletSpecBase, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletSpec.
+func (in *KameletSpec) DeepCopy() *KameletSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletSpecBase) DeepCopyInto(out *KameletSpecBase) {
+       *out = *in
+       if in.Definition != nil {
+               in, out := &in.Definition, &out.Definition
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Sources != nil {
+               in, out := &in.Sources, &out.Sources
+               *out = make([]SourceSpec, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.Template != nil {
+               in, out := &in.Template, &out.Template
+               *out = new(Template)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Types != nil {
+               in, out := &in.Types, &out.Types
+               *out = make(map[TypeSlot]EventTypeSpec, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.DataTypes != nil {
+               in, out := &in.DataTypes, &out.DataTypes
+               *out = make(map[TypeSlot]DataTypesSpec, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.Dependencies != nil {
+               in, out := &in.Dependencies, &out.Dependencies
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletSpecBase.
+func (in *KameletSpecBase) DeepCopy() *KameletSpecBase {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletSpecBase)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *KameletStatus) DeepCopyInto(out *KameletStatus) {
+       *out = *in
+       if in.Conditions != nil {
+               in, out := &in.Conditions, &out.Conditions
+               *out = make([]KameletCondition, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.Properties != nil {
+               in, out := &in.Properties, &out.Properties
+               *out = make([]KameletProperty, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new KameletStatus.
+func (in *KameletStatus) DeepCopy() *KameletStatus {
+       if in == nil {
+               return nil
+       }
+       out := new(KameletStatus)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in RawMessage) DeepCopyInto(out *RawMessage) {
+       {
+               in := &in
+               *out = make(RawMessage, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new RawMessage.
+func (in RawMessage) DeepCopy() RawMessage {
+       if in == nil {
+               return nil
+       }
+       out := new(RawMessage)
+       in.DeepCopyInto(out)
+       return *out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *SourceSpec) DeepCopyInto(out *SourceSpec) {
+       *out = *in
+       in.DataSpec.DeepCopyInto(&out.DataSpec)
+       if in.Interceptors != nil {
+               in, out := &in.Interceptors, &out.Interceptors
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.PropertyNames != nil {
+               in, out := &in.PropertyNames, &out.PropertyNames
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new SourceSpec.
+func (in *SourceSpec) DeepCopy() *SourceSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(SourceSpec)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *Template) DeepCopyInto(out *Template) {
+       *out = *in
+       if in.RawMessage != nil {
+               in, out := &in.RawMessage, &out.RawMessage
+               *out = make(RawMessage, len(*in))
+               copy(*out, *in)
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new Template.
+func (in *Template) DeepCopy() *Template {
+       if in == nil {
+               return nil
+       }
+       out := new(Template)
+       in.DeepCopyInto(out)
+       return out
+}
diff --git a/library/camel-kamelets-crds/pom.xml 
b/library/camel-kamelets-crds/pom.xml
new file mode 100644
index 00000000..a012771f
--- /dev/null
+++ b/library/camel-kamelets-crds/pom.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+         http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+      <groupId>org.apache.camel.kamelets</groupId>
+      <artifactId>camel-kamelets-parent</artifactId>
+      <version>4.9.0-SNAPSHOT</version>
+      <relativePath>../../pom.xml</relativePath>
+  </parent>
+
+  <artifactId>camel-kamelets-crds</artifactId>
+  <packaging>jar</packaging>
+
+  <name>Camel Kamelets CRDs</name>
+  <description>Camel Kamelets CRDs</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+    <maven.compiler.release>17</maven.compiler.release>
+    <maven.compiler.source>17</maven.compiler.source>
+    <maven.compiler.target>17</maven.compiler.target>
+
+    <fabric8-version>6.13.3</fabric8-version>
+    <maven-surefire-plugin-version>3.5.0</maven-surefire-plugin-version>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+          <dependency>
+              <groupId>io.fabric8</groupId>
+              <artifactId>kubernetes-client-bom-with-deps</artifactId>
+              <version>${fabric8-version}</version>
+              <type>pom</type>
+              <scope>import</scope>
+          </dependency>
+      </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.fabric8</groupId>
+      <artifactId>kubernetes-client</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.fabric8</groupId>
+      <artifactId>generator-annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.sundr</groupId>
+      <artifactId>builder-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>io.fabric8</groupId>
+        <artifactId>java-generator-maven-plugin</artifactId>
+        <version>${fabric8-version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <source>../../crds/config/crd</source>
+          <extraAnnotations>true</extraAnnotations>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/library/camel-kamelets-crds/src/main/resources 
b/library/camel-kamelets-crds/src/main/resources
new file mode 120000
index 00000000..046323d3
--- /dev/null
+++ b/library/camel-kamelets-crds/src/main/resources
@@ -0,0 +1 @@
+../../../../crds/config/crd/
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f20d24bd..e68d2744 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
     <description>Camel Kamelets Library Parent</description>
 
     <modules>
+        <module>library/camel-kamelets-crds</module>
         <module>library/camel-kamelets</module>
         <module>library/camel-kamelets-catalog</module>
         <module>library/kamelets-maven-plugin</module>


Reply via email to