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

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit f1533fe73a9429b3251a12904bf298d7d2d2b1d9
Author: Nicola Ferraro <[email protected]>
AuthorDate: Tue Jun 23 21:26:41 2020 +0200

    kamelets: improving kamelet format
---
 examples/kamelets/timer.kamelet.yaml             |  24 +-
 pkg/apis/camel/group.go                          |   6 +
 pkg/apis/camel/v1alpha1/doc.go                   |   4 +
 pkg/apis/camel/v1alpha1/jsonschema_types.go      | 260 +++++++++++++++
 pkg/apis/camel/v1alpha1/kamelet_types.go         |  71 ++--
 pkg/apis/camel/v1alpha1/kamelet_types_support.go |  17 +
 pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go | 407 ++++++++++++++++++++++-
 pkg/controller/add_kamelet.go                    |  26 ++
 8 files changed, 768 insertions(+), 47 deletions(-)

diff --git a/examples/kamelets/timer.kamelet.yaml 
b/examples/kamelets/timer.kamelet.yaml
index 9a2ec5d..91848d0 100644
--- a/examples/kamelets/timer.kamelet.yaml
+++ b/examples/kamelets/timer.kamelet.yaml
@@ -3,17 +3,21 @@ kind: Kamelet
 metadata:
   name: timer
 spec:
-  displayName: "Timer"
-  description: "Produces produces periodic events with a custom payload"
-  parameters:
-    - name: message
-      description: The message to generate
-      schema:
+  definition:
+    title: "Timer"
+    description: "Produces produces periodic events with a custom payload"
+    required:
+      - message
+    properties:
+      message:
+        title: Message
+        description: The message to generate
         type: string
-  produces:
-    type: text.types.camel.apache.org
-    schema:
-      content:
+  types:
+    out:
+      mediaType: application/json
+      schema:
+        id: text.camel.apache.org
         type: string
   flow:
     from:
diff --git a/pkg/apis/camel/group.go b/pkg/apis/camel/group.go
new file mode 100644
index 0000000..90958df
--- /dev/null
+++ b/pkg/apis/camel/group.go
@@ -0,0 +1,6 @@
+// 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/pkg/apis/camel/v1alpha1/doc.go b/pkg/apis/camel/v1alpha1/doc.go
new file mode 100644
index 0000000..102912e
--- /dev/null
+++ b/pkg/apis/camel/v1alpha1/doc.go
@@ -0,0 +1,4 @@
+// Package v1alpha1 contains API Schema definitions for the camel v1alpha1 API 
group
+// +k8s:deepcopy-gen=package,register
+// +groupName=camel.apache.org
+package v1alpha1
diff --git a/pkg/apis/camel/v1alpha1/jsonschema_types.go 
b/pkg/apis/camel/v1alpha1/jsonschema_types.go
new file mode 100644
index 0000000..6ebdf1e
--- /dev/null
+++ b/pkg/apis/camel/v1alpha1/jsonschema_types.go
@@ -0,0 +1,260 @@
+/*
+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 v1alpha1
+
+// JSONSchemaProps is a JSON-Schema following Specification Draft 4 
(http://json-schema.org/).
+type JSONSchemaProps struct {
+       ID          string        `json:"id,omitempty" 
protobuf:"bytes,1,opt,name=id"`
+       Schema      JSONSchemaURL `json:"$schema,omitempty" 
protobuf:"bytes,2,opt,name=schema"`
+       Ref         *string       `json:"$ref,omitempty" 
protobuf:"bytes,3,opt,name=ref"`
+       Description string        `json:"description,omitempty" 
protobuf:"bytes,4,opt,name=description"`
+       Type        string        `json:"type,omitempty" 
protobuf:"bytes,5,opt,name=type"`
+
+       // 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,2559"
+       // - 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" 
protobuf:"bytes,6,opt,name=format"`
+
+       Title string `json:"title,omitempty" protobuf:"bytes,7,opt,name=title"`
+       // default is a default value for undefined object fields.
+       // Defaulting is a beta feature under the CustomResourceDefaulting 
feature gate.
+       // Defaulting requires spec.preserveUnknownFields to be false.
+       Default              *JSON                      
`json:"default,omitempty" protobuf:"bytes,8,opt,name=default"`
+       Maximum              *float64                   
`json:"maximum,omitempty" protobuf:"bytes,9,opt,name=maximum"`
+       ExclusiveMaximum     bool                       
`json:"exclusiveMaximum,omitempty" 
protobuf:"bytes,10,opt,name=exclusiveMaximum"`
+       Minimum              *float64                   
`json:"minimum,omitempty" protobuf:"bytes,11,opt,name=minimum"`
+       ExclusiveMinimum     bool                       
`json:"exclusiveMinimum,omitempty" 
protobuf:"bytes,12,opt,name=exclusiveMinimum"`
+       MaxLength            *int64                     
`json:"maxLength,omitempty" protobuf:"bytes,13,opt,name=maxLength"`
+       MinLength            *int64                     
`json:"minLength,omitempty" protobuf:"bytes,14,opt,name=minLength"`
+       Pattern              string                     
`json:"pattern,omitempty" protobuf:"bytes,15,opt,name=pattern"`
+       MaxItems             *int64                     
`json:"maxItems,omitempty" protobuf:"bytes,16,opt,name=maxItems"`
+       MinItems             *int64                     
`json:"minItems,omitempty" protobuf:"bytes,17,opt,name=minItems"`
+       UniqueItems          bool                       
`json:"uniqueItems,omitempty" protobuf:"bytes,18,opt,name=uniqueItems"`
+       MultipleOf           *float64                   
`json:"multipleOf,omitempty" protobuf:"bytes,19,opt,name=multipleOf"`
+       Enum                 []JSON                     `json:"enum,omitempty" 
protobuf:"bytes,20,rep,name=enum"`
+       MaxProperties        *int64                     
`json:"maxProperties,omitempty" protobuf:"bytes,21,opt,name=maxProperties"`
+       MinProperties        *int64                     
`json:"minProperties,omitempty" protobuf:"bytes,22,opt,name=minProperties"`
+       Required             []string                   
`json:"required,omitempty" protobuf:"bytes,23,rep,name=required"`
+       Items                *JSONSchemaPropsOrArray    `json:"items,omitempty" 
protobuf:"bytes,24,opt,name=items"`
+       AllOf                []JSONSchemaProps          `json:"allOf,omitempty" 
protobuf:"bytes,25,rep,name=allOf"`
+       OneOf                []JSONSchemaProps          `json:"oneOf,omitempty" 
protobuf:"bytes,26,rep,name=oneOf"`
+       AnyOf                []JSONSchemaProps          `json:"anyOf,omitempty" 
protobuf:"bytes,27,rep,name=anyOf"`
+       Not                  *JSONSchemaProps           `json:"not,omitempty" 
protobuf:"bytes,28,opt,name=not"`
+       Properties           map[string]JSONSchemaProps 
`json:"properties,omitempty" protobuf:"bytes,29,rep,name=properties"`
+       AdditionalProperties *JSONSchemaPropsOrBool     
`json:"additionalProperties,omitempty" 
protobuf:"bytes,30,opt,name=additionalProperties"`
+       PatternProperties    map[string]JSONSchemaProps 
`json:"patternProperties,omitempty" 
protobuf:"bytes,31,rep,name=patternProperties"`
+       Dependencies         JSONSchemaDependencies     
`json:"dependencies,omitempty" protobuf:"bytes,32,opt,name=dependencies"`
+       AdditionalItems      *JSONSchemaPropsOrBool     
`json:"additionalItems,omitempty" protobuf:"bytes,33,opt,name=additionalItems"`
+       Definitions          JSONSchemaDefinitions      
`json:"definitions,omitempty" protobuf:"bytes,34,opt,name=definitions"`
+       ExternalDocs         *ExternalDocumentation     
`json:"externalDocs,omitempty" protobuf:"bytes,35,opt,name=externalDocs"`
+       Example              *JSON                      
`json:"example,omitempty" protobuf:"bytes,36,opt,name=example"`
+       Nullable             bool                       
`json:"nullable,omitempty" protobuf:"bytes,37,opt,name=nullable"`
+
+       // x-kubernetes-preserve-unknown-fields stops the API server
+       // decoding step from pruning fields which are not specified
+       // in the validation schema. This affects fields recursively,
+       // but switches back to normal pruning behaviour if nested
+       // properties or additionalProperties are specified in the schema.
+       // This can either be true or undefined. False is forbidden.
+       XPreserveUnknownFields *bool 
`json:"x-kubernetes-preserve-unknown-fields,omitempty" 
protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields"`
+
+       // x-kubernetes-embedded-resource defines that the value is an
+       // embedded Kubernetes runtime.Object, with TypeMeta and
+       // ObjectMeta. The type must be object. It is allowed to further
+       // restrict the embedded object. kind, apiVersion and metadata
+       // are validated automatically. x-kubernetes-preserve-unknown-fields
+       // is allowed to be true, but does not have to be if the object
+       // is fully specified (up to kind, apiVersion, metadata).
+       XEmbeddedResource bool `json:"x-kubernetes-embedded-resource,omitempty" 
protobuf:"bytes,39,opt,name=xKubernetesEmbeddedResource"`
+
+       // x-kubernetes-int-or-string specifies that this value is
+       // either an integer or a string. If this is true, an empty
+       // type is allowed and type as child of anyOf is permitted
+       // if following one of the following patterns:
+       //
+       // 1) anyOf:
+       //    - type: integer
+       //    - type: string
+       // 2) allOf:
+       //    - anyOf:
+       //      - type: integer
+       //      - type: string
+       //    - ... zero or more
+       XIntOrString bool `json:"x-kubernetes-int-or-string,omitempty" 
protobuf:"bytes,40,opt,name=xKubernetesIntOrString"`
+
+       // x-kubernetes-list-map-keys annotates an array with the 
x-kubernetes-list-type `map` by specifying the keys used
+       // as the index of the map.
+       //
+       // This tag MUST only be used on lists that have the 
"x-kubernetes-list-type"
+       // extension set to "map". Also, the values specified for this 
attribute must
+       // be a scalar typed field of the child structure (no nesting is 
supported).
+       //
+       // The properties specified must either be required or have a default 
value,
+       // to ensure those properties are present for all list items.
+       //
+       // +optional
+       XListMapKeys []string `json:"x-kubernetes-list-map-keys,omitempty" 
protobuf:"bytes,41,rep,name=xKubernetesListMapKeys"`
+
+       // x-kubernetes-list-type annotates an array to further describe its 
topology.
+       // This extension must only be used on lists and may have 3 possible 
values:
+       //
+       // 1) `atomic`: the list is treated as a single entity, like a scalar.
+       //      Atomic lists will be entirely replaced when updated. This 
extension
+       //      may be used on any type of list (struct, scalar, ...).
+       // 2) `set`:
+       //      Sets are lists that must not have multiple items with the same 
value. Each
+       //      value must be a scalar, an object with x-kubernetes-map-type 
`atomic` or an
+       //      array with x-kubernetes-list-type `atomic`.
+       // 3) `map`:
+       //      These lists are like maps in that their elements have a 
non-index key
+       //      used to identify them. Order is preserved upon merge. The map 
tag
+       //      must only be used on a list with elements of type object.
+       // Defaults to atomic for arrays.
+       // +optional
+       XListType *string `json:"x-kubernetes-list-type,omitempty" 
protobuf:"bytes,42,opt,name=xKubernetesListType"`
+
+       // x-kubernetes-map-type annotates an object to further describe its 
topology.
+       // This extension must only be used when type is object and may have 2 
possible values:
+       //
+       // 1) `granular`:
+       //      These maps are actual maps (key-value pairs) and each fields 
are independent
+       //      from each other (they can each be manipulated by separate 
actors). This is
+       //      the default behaviour for all maps.
+       // 2) `atomic`: the list is treated as a single entity, like a scalar.
+       //      Atomic maps will be entirely replaced when updated.
+       // +optional
+       XMapType *string `json:"x-kubernetes-map-type,omitempty" 
protobuf:"bytes,43,opt,name=xKubernetesMapType"`
+}
+
+// JSON represents any valid JSON value.
+// These types are supported: bool, int64, float64, string, []interface{}, 
map[string]interface{} and nil.
+type JSON struct {
+       Raw []byte `protobuf:"bytes,1,opt,name=raw"`
+}
+
+// OpenAPISchemaType is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+//
+// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
+func (_ JSON) OpenAPISchemaType() []string {
+       // TODO: return actual types when anyOf is supported
+       return nil
+}
+
+// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+func (_ JSON) OpenAPISchemaFormat() string { return "" }
+
+// JSONSchemaURL represents a schema url.
+type JSONSchemaURL string
+
+// JSONSchemaPropsOrArray represents a value that can either be a 
JSONSchemaProps
+// or an array of JSONSchemaProps. Mainly here for serialization purposes.
+type JSONSchemaPropsOrArray struct {
+       Schema      *JSONSchemaProps  `protobuf:"bytes,1,opt,name=schema"`
+       JSONSchemas []JSONSchemaProps `protobuf:"bytes,2,rep,name=jSONSchemas"`
+}
+
+// OpenAPISchemaType is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+//
+// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
+func (_ JSONSchemaPropsOrArray) OpenAPISchemaType() []string {
+       // TODO: return actual types when anyOf is supported
+       return nil
+}
+
+// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+func (_ JSONSchemaPropsOrArray) OpenAPISchemaFormat() string { return "" }
+
+// JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value.
+// Defaults to true for the boolean property.
+type JSONSchemaPropsOrBool struct {
+       Allows bool             `protobuf:"varint,1,opt,name=allows"`
+       Schema *JSONSchemaProps `protobuf:"bytes,2,opt,name=schema"`
+}
+
+// OpenAPISchemaType is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+//
+// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
+func (_ JSONSchemaPropsOrBool) OpenAPISchemaType() []string {
+       // TODO: return actual types when anyOf is supported
+       return nil
+}
+
+// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+func (_ JSONSchemaPropsOrBool) OpenAPISchemaFormat() string { return "" }
+
+// JSONSchemaDependencies represent a dependencies property.
+type JSONSchemaDependencies map[string]JSONSchemaPropsOrStringArray
+
+// JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.
+type JSONSchemaPropsOrStringArray struct {
+       Schema   *JSONSchemaProps `protobuf:"bytes,1,opt,name=schema"`
+       Property []string         `protobuf:"bytes,2,rep,name=property"`
+}
+
+// OpenAPISchemaType is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+//
+// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
+func (_ JSONSchemaPropsOrStringArray) OpenAPISchemaType() []string {
+       // TODO: return actual types when anyOf is supported
+       return nil
+}
+
+// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
+// the OpenAPI spec of this type.
+func (_ JSONSchemaPropsOrStringArray) OpenAPISchemaFormat() string { return "" 
}
+
+// JSONSchemaDefinitions contains the models explicitly defined in this spec.
+type JSONSchemaDefinitions map[string]JSONSchemaProps
+
+// ExternalDocumentation allows referencing an external resource for extended 
documentation.
+type ExternalDocumentation struct {
+       Description string `json:"description,omitempty" 
protobuf:"bytes,1,opt,name=description"`
+       URL         string `json:"url,omitempty" 
protobuf:"bytes,2,opt,name=url"`
+}
diff --git a/pkg/apis/camel/v1alpha1/kamelet_types.go 
b/pkg/apis/camel/v1alpha1/kamelet_types.go
index 190a71d..0855489 100644
--- a/pkg/apis/camel/v1alpha1/kamelet_types.go
+++ b/pkg/apis/camel/v1alpha1/kamelet_types.go
@@ -1,53 +1,54 @@
+/*
+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 v1alpha1
 
 import (
        camelv1 "github.com/apache/camel-k/pkg/apis/camel/v1"
-       openapi "github.com/go-openapi/spec"
        corev1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
+const (
+       AnnotationIcon = "camel.apache.org/icon"
+)
+
 // KameletSpec defines the desired state of Kamelet
 type KameletSpec struct {
-       Info          KameletInfo         `json:"info,omitempty"`
-       Parameters    []KameletParameter  `json:"parameters,omitempty"`
-       Authorization AuthorizationSpec   `json:"authorization,omitempty"`
-       Sources       *camelv1.SourceSpec `json:"sources,omitempty"`
-       Flow          *camelv1.Flow       `json:"flow,omitempty"`
-       Consumes      *EventType          `json:"consumes,omitempty"`
-       Produces      *EventType          `json:"produces,omitempty"`
-       Dependencies  []string            `json:"dependencies,omitempty"`
-}
-
-type EventType struct {
-       Type   string      `json:"type,omitempty"`
-       Schema *DataSchema `json:"schema,omitempty"`
+       Definition    JSONSchemaProps             `json:"definition,omitempty"`
+       Sources       *camelv1.SourceSpec         `json:"sources,omitempty"`
+       Flow          *camelv1.Flow               `json:"flow,omitempty"`
+       Authorization AuthorizationSpec           
`json:"authorization,omitempty"`
+       Types         map[EventSlot]EventTypeSpec `json:"types,omitempty"`
+       Dependencies  []string                    
`json:"dependencies,omitempty"`
 }
 
-type DataSchema struct {
-       Ref     *corev1.ObjectReference `json:"ref,omitempty"`
-       Content *openapi.Schema         `json:"schema,omitempty"`
+type EventTypeSpec struct {
+       MediaType string           `json:"mediaType,omitempty"`
+       Schema    *JSONSchemaProps `json:"schema,omitempty"`
 }
 
-type KameletInfo struct {
-       DisplayName string      `json:"displayName,omitempty"`
-       Description string      `json:"description,omitempty"`
-       Group       string      `json:"group,omitempty"`
-       Icon        KameletIcon `json:"icon,omitempty"`
-}
-
-type KameletIcon struct {
-       Data      string `json:"data,omitempty"`
-       MediaType string `json:"mediaType,omitempty"`
-}
+type EventSlot string
 
-type KameletParameter struct {
-       Name        string            `json:"name,omitempty"`
-       Required    bool              `json:"required,omitempty"`
-       Description string            `json:"description,omitempty"`
-       Annotations map[string]string `json:"annotations,omitempty"`
-       Schema      *openapi.Schema   `json:"schema,omitempty"`
-}
+const (
+       EventSlotIn    EventSlot = "in"
+       EventSlotOut   EventSlot = "out"
+       EventSlotError EventSlot = "error"
+)
 
 // AuthorizationSpec is TODO (oauth information)
 type AuthorizationSpec struct {
diff --git a/pkg/apis/camel/v1alpha1/kamelet_types_support.go 
b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
index eb18093..b4f25c1 100644
--- a/pkg/apis/camel/v1alpha1/kamelet_types_support.go
+++ b/pkg/apis/camel/v1alpha1/kamelet_types_support.go
@@ -1,3 +1,20 @@
+/*
+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 v1alpha1
 
 import (
diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go 
b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
index 8c7d0d7..b81d3ca 100644
--- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go
@@ -5,16 +5,371 @@
 package v1alpha1
 
 import (
+       v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
        runtime "k8s.io/apimachinery/pkg/runtime"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *AuthorizationSpec) DeepCopyInto(out *AuthorizationSpec) {
+       *out = *in
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new AuthorizationSpec.
+func (in *AuthorizationSpec) DeepCopy() *AuthorizationSpec {
+       if in == nil {
+               return nil
+       }
+       out := new(AuthorizationSpec)
+       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
+       return
+}
+
+// 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 *JSON) DeepCopyInto(out *JSON) {
+       *out = *in
+       if in.Raw != nil {
+               in, out := &in.Raw, &out.Raw
+               *out = make([]byte, len(*in))
+               copy(*out, *in)
+       }
+       return
+}
+
+// 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 JSONSchemaDefinitions) DeepCopyInto(out *JSONSchemaDefinitions) {
+       {
+               in := &in
+               *out = make(JSONSchemaDefinitions, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+               return
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaDefinitions.
+func (in JSONSchemaDefinitions) DeepCopy() JSONSchemaDefinitions {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaDefinitions)
+       in.DeepCopyInto(out)
+       return *out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in JSONSchemaDependencies) DeepCopyInto(out *JSONSchemaDependencies) {
+       {
+               in := &in
+               *out = make(JSONSchemaDependencies, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+               return
+       }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaDependencies.
+func (in JSONSchemaDependencies) DeepCopy() JSONSchemaDependencies {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaDependencies)
+       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.Ref != nil {
+               in, out := &in.Ref, &out.Ref
+               *out = new(string)
+               **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(float64)
+               **out = **in
+       }
+       if in.Minimum != nil {
+               in, out := &in.Minimum, &out.Minimum
+               *out = new(float64)
+               **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.MultipleOf != nil {
+               in, out := &in.MultipleOf, &out.MultipleOf
+               *out = new(float64)
+               **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.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.Required != nil {
+               in, out := &in.Required, &out.Required
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = new(JSONSchemaPropsOrArray)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.AllOf != nil {
+               in, out := &in.AllOf, &out.AllOf
+               *out = make([]JSONSchemaProps, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.OneOf != nil {
+               in, out := &in.OneOf, &out.OneOf
+               *out = make([]JSONSchemaProps, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.AnyOf != nil {
+               in, out := &in.AnyOf, &out.AnyOf
+               *out = make([]JSONSchemaProps, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       if in.Not != nil {
+               in, out := &in.Not, &out.Not
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Properties != nil {
+               in, out := &in.Properties, &out.Properties
+               *out = make(map[string]JSONSchemaProps, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.AdditionalProperties != nil {
+               in, out := &in.AdditionalProperties, &out.AdditionalProperties
+               *out = new(JSONSchemaPropsOrBool)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.PatternProperties != nil {
+               in, out := &in.PatternProperties, &out.PatternProperties
+               *out = make(map[string]JSONSchemaProps, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.Dependencies != nil {
+               in, out := &in.Dependencies, &out.Dependencies
+               *out = make(JSONSchemaDependencies, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.AdditionalItems != nil {
+               in, out := &in.AdditionalItems, &out.AdditionalItems
+               *out = new(JSONSchemaPropsOrBool)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Definitions != nil {
+               in, out := &in.Definitions, &out.Definitions
+               *out = make(JSONSchemaDefinitions, len(*in))
+               for key, val := range *in {
+                       (*out)[key] = *val.DeepCopy()
+               }
+       }
+       if in.ExternalDocs != nil {
+               in, out := &in.ExternalDocs, &out.ExternalDocs
+               *out = new(ExternalDocumentation)
+               **out = **in
+       }
+       if in.Example != nil {
+               in, out := &in.Example, &out.Example
+               *out = new(JSON)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.XPreserveUnknownFields != nil {
+               in, out := &in.XPreserveUnknownFields, 
&out.XPreserveUnknownFields
+               *out = new(bool)
+               **out = **in
+       }
+       if in.XListMapKeys != nil {
+               in, out := &in.XListMapKeys, &out.XListMapKeys
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.XListType != nil {
+               in, out := &in.XListType, &out.XListType
+               *out = new(string)
+               **out = **in
+       }
+       if in.XMapType != nil {
+               in, out := &in.XMapType, &out.XMapType
+               *out = new(string)
+               **out = **in
+       }
+       return
+}
+
+// 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 *JSONSchemaPropsOrArray) DeepCopyInto(out *JSONSchemaPropsOrArray) {
+       *out = *in
+       if in.Schema != nil {
+               in, out := &in.Schema, &out.Schema
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.JSONSchemas != nil {
+               in, out := &in.JSONSchemas, &out.JSONSchemas
+               *out = make([]JSONSchemaProps, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaPropsOrArray.
+func (in *JSONSchemaPropsOrArray) DeepCopy() *JSONSchemaPropsOrArray {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaPropsOrArray)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *JSONSchemaPropsOrBool) DeepCopyInto(out *JSONSchemaPropsOrBool) {
+       *out = *in
+       if in.Schema != nil {
+               in, out := &in.Schema, &out.Schema
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaPropsOrBool.
+func (in *JSONSchemaPropsOrBool) DeepCopy() *JSONSchemaPropsOrBool {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaPropsOrBool)
+       in.DeepCopyInto(out)
+       return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, 
writing into out. in must be non-nil.
+func (in *JSONSchemaPropsOrStringArray) DeepCopyInto(out 
*JSONSchemaPropsOrStringArray) {
+       *out = *in
+       if in.Schema != nil {
+               in, out := &in.Schema, &out.Schema
+               *out = new(JSONSchemaProps)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Property != nil {
+               in, out := &in.Property, &out.Property
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, 
creating a new JSONSchemaPropsOrStringArray.
+func (in *JSONSchemaPropsOrStringArray) DeepCopy() 
*JSONSchemaPropsOrStringArray {
+       if in == nil {
+               return nil
+       }
+       out := new(JSONSchemaPropsOrStringArray)
+       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)
-       out.Spec = in.Spec
-       out.Status = in.Status
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
        return
 }
 
@@ -37,6 +392,24 @@ func (in *Kamelet) DeepCopyObject() runtime.Object {
 }
 
 // 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)
+       return
+}
+
+// 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
@@ -72,6 +445,29 @@ func (in *KameletList) DeepCopyObject() runtime.Object {
 // 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.Definition.DeepCopyInto(&out.Definition)
+       if in.Sources != nil {
+               in, out := &in.Sources, &out.Sources
+               *out = new(v1.SourceSpec)
+               (*in).DeepCopyInto(*out)
+       }
+       if in.Flow != nil {
+               in, out := &in.Flow, &out.Flow
+               *out = (*in).DeepCopy()
+       }
+       out.Authorization = in.Authorization
+       if in.Types != nil {
+               in, out := &in.Types, &out.Types
+               *out = make(map[string]JSONSchemaProps, 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)
+       }
        return
 }
 
@@ -88,6 +484,13 @@ func (in *KameletSpec) DeepCopy() *KameletSpec {
 // 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])
+               }
+       }
        return
 }
 
diff --git a/pkg/controller/add_kamelet.go b/pkg/controller/add_kamelet.go
new file mode 100644
index 0000000..7818bcd
--- /dev/null
+++ b/pkg/controller/add_kamelet.go
@@ -0,0 +1,26 @@
+/*
+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 controller
+
+import (
+       "github.com/apache/camel-k/pkg/controller/kamelet"
+)
+
+func init() {
+       // AddToManagerFuncs is a list of functions to create controllers and 
add them to a manager.
+       AddToManagerFuncs = append(AddToManagerFuncs, kamelet.Add)
+}

Reply via email to