You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/04/28 15:46:40 UTC

[camel-kamelets] branch main updated (b6e3be6 -> 2cef6e1)

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

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


    from b6e3be6  Regen GH Action should run tests
     new 0e1630c  Add validator bound to the CI and fix kamelets
     new 2cef6e1  Fix infinispan kamelet

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../workflows/validate.yaml                        |  44 +++-
 aws-kinesis-firehose-sink.kamelet.yaml             |   2 +-
 aws-s3-sink.kamelet.yaml                           |   2 +-
 aws-s3-source.kamelet.yaml                         |   4 +-
 aws-sns-fifo-sink.kamelet.yaml                     |   2 +-
 aws-sns-sink.kamelet.yaml                          |   2 +-
 aws-sqs-batch-sink.kamelet.yaml                    |   2 +-
 aws-sqs-fifo-sink.kamelet.yaml                     |   2 +-
 aws-sqs-sink.kamelet.yaml                          |   2 +-
 aws-sqs-source.kamelet.yaml                        |   6 +-
 azure-eventhubs-sink.kamelet.yaml                  |   6 +-
 azure-eventhubs-source.kamelet.yaml                |  12 +-
 azure-storage-blob-source.kamelet.yaml             |   2 +-
 bitcoin-source.kamelet.yaml                        |   2 +-
 .../twitter-directmessage-source.kamelet.yaml      |   0
 .../kamelets/twitter-search-source.kamelet.yaml    |   0
 .../kamelets/twitter-timeline-source.kamelet.yaml  |   0
 cassandra-sink.kamelet.yaml                        |   4 +-
 docs/README.md                                     |  13 +-
 docs/generator/go.mod                              |   8 -
 .../ROOT/pages/aws-kinesis-firehose-sink.adoc      |   4 +-
 docs/modules/ROOT/pages/aws-s3-sink.adoc           |   2 +-
 docs/modules/ROOT/pages/aws-s3-source.adoc         |   4 +-
 docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc     |   2 +-
 docs/modules/ROOT/pages/aws-sns-sink.adoc          |   2 +-
 docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc    |   2 +-
 docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc     |   2 +-
 docs/modules/ROOT/pages/aws-sqs-sink.adoc          |   2 +-
 docs/modules/ROOT/pages/aws-sqs-source.adoc        |   6 +-
 docs/modules/ROOT/pages/azure-eventhubs-sink.adoc  |  12 +-
 .../modules/ROOT/pages/azure-eventhubs-source.adoc |  24 +--
 .../ROOT/pages/azure-storage-blob-source.adoc      |   2 +-
 docs/modules/ROOT/pages/bitcoin-source.adoc        |   2 +-
 docs/modules/ROOT/pages/cassandra-sink.adoc        |   3 +-
 docs/modules/ROOT/pages/cron-source.adoc           |   2 +-
 docs/modules/ROOT/pages/dropbox-sink.adoc          |   8 +-
 docs/modules/ROOT/pages/dropbox-source.adoc        |  14 +-
 docs/modules/ROOT/pages/earthquake-source.adoc     |   4 +-
 .../ROOT/pages/elasticsearch-search-source.adoc    |   8 +-
 docs/modules/ROOT/pages/exec-sink.adoc             |   6 +-
 docs/modules/ROOT/pages/fhir-source.adoc           |   4 +-
 docs/modules/ROOT/pages/file-watch-source.adoc     |   6 +-
 docs/modules/ROOT/pages/github-source.adoc         |   2 +-
 docs/modules/ROOT/pages/google-mail-source.adoc    |  10 +-
 docs/modules/ROOT/pages/http-source.adoc           |   4 +-
 docs/modules/ROOT/pages/infinispan-source.adoc     |   5 +-
 docs/modules/ROOT/pages/kafka-source.adoc          |   4 +-
 docs/modules/ROOT/pages/minio-sink.adoc            |   2 +-
 docs/modules/ROOT/pages/minio-source.adoc          |   4 +-
 docs/modules/ROOT/pages/nats-source.adoc           |   7 +-
 docs/modules/ROOT/pages/ssh-source.adoc            |  16 +-
 dropbox-sink.kamelet.yaml                          |   4 +-
 dropbox-source.kamelet.yaml                        |   8 +-
 earthquake-source.kamelet.yaml                     |   4 +-
 elasticsearch-search-source.kamelet.yaml           |   4 +-
 exec-sink.kamelet.yaml                             |   7 +-
 fhir-source.kamelet.yaml                           |   4 +-
 file-watch-source.kamelet.yaml                     |   4 +-
 github-source.kamelet.yaml                         |   2 +-
 google-mail-source.kamelet.yaml                    |   8 +-
 http-source.kamelet.yaml                           |   4 +-
 infinispan-source.kamelet.yaml                     |   7 +-
 kafka-source.kamelet.yaml                          |   2 +-
 minio-sink.kamelet.yaml                            |   2 +-
 minio-source.kamelet.yaml                          |   4 +-
 nats-source.kamelet.yaml                           |   6 +-
 script/generator/README.md                         |   8 +
 {docs => script}/generator/generator.go            |   0
 script/generator/go.mod                            |  10 +
 {docs => script}/generator/go.sum                  |  92 ++++++++
 script/validator/README.md                         |   8 +
 script/validator/go.mod                            |  12 ++
 script/validator/go.sum                            | 208 ++++++++++++++++++
 script/validator/validator.go                      | 239 +++++++++++++++++++++
 ssh-source.kamelet.yaml                            |  10 +-
 ...ml => twitter-directmessage-source.kamelet.yaml |   0
 ...elet.yaml => twitter-search-source.kamelet.yaml |   0
 ...et.yaml => twitter-timeline-source.kamelet.yaml |   0
 78 files changed, 769 insertions(+), 178 deletions(-)
 copy test/earthquake-source/yaks-config.yaml => .github/workflows/validate.yaml (60%)
 rename twitter-directmessage.kamelet.yaml => camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage-source.kamelet.yaml (100%)
 mode change 100755 => 100644
 rename twitter-search.kamelet.yaml => camel-kamelets-catalog/src/main/resources/kamelets/twitter-search-source.kamelet.yaml (100%)
 mode change 100755 => 100644
 rename twitter-timeline.kamelet.yaml => camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline-source.kamelet.yaml (100%)
 mode change 100755 => 100644
 delete mode 100644 docs/generator/go.mod
 create mode 100644 script/generator/README.md
 rename {docs => script}/generator/generator.go (100%)
 create mode 100644 script/generator/go.mod
 rename {docs => script}/generator/go.sum (52%)
 create mode 100644 script/validator/README.md
 create mode 100644 script/validator/go.mod
 create mode 100644 script/validator/go.sum
 create mode 100644 script/validator/validator.go
 rename camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage.kamelet.yaml => twitter-directmessage-source.kamelet.yaml (100%)
 mode change 100644 => 100755
 rename camel-kamelets-catalog/src/main/resources/kamelets/twitter-search.kamelet.yaml => twitter-search-source.kamelet.yaml (100%)
 mode change 100644 => 100755
 rename camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline.kamelet.yaml => twitter-timeline-source.kamelet.yaml (100%)
 mode change 100644 => 100755

[camel-kamelets] 02/02: Fix infinispan kamelet

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2cef6e1c384c761d4a3265027a9237db06ab3b8a
Author: nicolaferraro <ni...@gmail.com>
AuthorDate: Wed Apr 28 17:39:32 2021 +0200

    Fix infinispan kamelet
---
 docs/modules/ROOT/pages/cron-source.adoc       | 2 +-
 docs/modules/ROOT/pages/infinispan-source.adoc | 5 +++--
 infinispan-source.kamelet.yaml                 | 7 +++----
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/docs/modules/ROOT/pages/cron-source.adoc b/docs/modules/ROOT/pages/cron-source.adoc
index 7d9010b..88253c9 100644
--- a/docs/modules/ROOT/pages/cron-source.adoc
+++ b/docs/modules/ROOT/pages/cron-source.adoc
@@ -12,7 +12,7 @@ The following table summarizes the configuration options available for the `cron
 |===
 | Property| Name| Description| Type| Default| Example
 | *message {empty}* *| Message| The message to generate| string| | `"hello world"`
-| *schedule {empty}* *| Cron Schedule| A cron expression that will be used to trigger events generations| string| | `"0/3 10 * * * ?"`
+| *schedule {empty}* *| Cron Schedule| A cron expression that will be used to trigger events generation.| string| | `"0/3 10 * * * ?"`
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/infinispan-source.adoc b/docs/modules/ROOT/pages/infinispan-source.adoc
index 9bf52aa..118d9aa 100644
--- a/docs/modules/ROOT/pages/infinispan-source.adoc
+++ b/docs/modules/ROOT/pages/infinispan-source.adoc
@@ -11,10 +11,10 @@ The following table summarizes the configuration options available for the `infi
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *hosts {empty}* *| Hosts| Specifies the host of the cache on Infinispan instance| String| `1000`| 
+| *hosts {empty}* *| Hosts| Specifies the host of the cache on Infinispan instance| String| | 
 | *password {empty}* *| Password| Password to connect to Infinispan.| string| | 
 | *username {empty}* *| Username| Username to connect to Infinispan.| string| | 
-| eventTypes| ElasticSearch cluster name| Specifies the set of event types to register by the consumer.Multiple event can be separated by comma. The possible event types are CLIENT_CACHE_ENTRY_CREATED, CLIENT_CACHE_ENTRY_MODIFIED, CLIENT_CACHE_ENTRY_REMOVED, CLIENT_CACHE_ENTRY_EXPIRED, CLIENT_CACHE_FAILOVER| string| | 
+| eventTypes| Infinispan Cluster Name| Specifies the set of event types to register by the consumer.Multiple event can be separated by comma. The possible event types are CLIENT_CACHE_ENTRY_CREATED, CLIENT_CACHE_ENTRY_MODIFIED, CLIENT_CACHE_ENTRY_REMOVED, CLIENT_CACHE_ENTRY_EXPIRED, CLIENT_CACHE_FAILOVER| string| | 
 | saslMechanism| SASL Mechanism| The SASL Mechanism to use| String| `"DIGEST-MD5"`| 
 | secure| Secure| If the Infinispan instance is secured or not| boolean| `true`| 
 | securityRealm| Security Realm| Define the security realm to access the infinispan instance| string| `"default"`| 
@@ -45,6 +45,7 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: infinispan-source
     properties:
+      hosts: "The Hosts"
       password: "The Password"
       username: "The Username"
   sink:
diff --git a/infinispan-source.kamelet.yaml b/infinispan-source.kamelet.yaml
index a28f560..3e9a57d 100755
--- a/infinispan-source.kamelet.yaml
+++ b/infinispan-source.kamelet.yaml
@@ -25,13 +25,12 @@ spec:
       - hosts
       - username
       - password
-      - hostAddresses
+      - hosts
     properties:
       hosts:
         title: Hosts
         description: Specifies the host of the cache on Infinispan instance
         type: String
-        default: 1000
       secure:
         title: Secure
         description: If the Infinispan instance is secured or not
@@ -61,7 +60,7 @@ spec:
         type: string
         default: "infinispan"
       eventTypes:
-        title: ElasticSearch cluster name
+        title: Infinispan Cluster Name
         description: Specifies the set of event types to register by the consumer.Multiple event can be separated by comma. The possible event types are CLIENT_CACHE_ENTRY_CREATED, CLIENT_CACHE_ENTRY_MODIFIED, CLIENT_CACHE_ENTRY_REMOVED, CLIENT_CACHE_ENTRY_EXPIRED, CLIENT_CACHE_FAILOVER
         type: string
   flow:
@@ -77,4 +76,4 @@ spec:
         securityServerName: "{{securityServerName}}"
         eventTypes: "{{eventTypes}}"
       steps:
-        - to: kamelet:sink
+        - to: kamelet:sink
\ No newline at end of file

[camel-kamelets] 01/02: Add validator bound to the CI and fix kamelets

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0e1630c7c2458b64493aa92d1d9af87b1684c4e0
Author: nicolaferraro <ni...@gmail.com>
AuthorDate: Wed Apr 28 17:16:32 2021 +0200

    Add validator bound to the CI and fix kamelets
---
 .github/workflows/validate.yaml                    |  53 +++++
 aws-kinesis-firehose-sink.kamelet.yaml             |   2 +-
 aws-s3-sink.kamelet.yaml                           |   2 +-
 aws-s3-source.kamelet.yaml                         |   4 +-
 aws-sns-fifo-sink.kamelet.yaml                     |   2 +-
 aws-sns-sink.kamelet.yaml                          |   2 +-
 aws-sqs-batch-sink.kamelet.yaml                    |   2 +-
 aws-sqs-fifo-sink.kamelet.yaml                     |   2 +-
 aws-sqs-sink.kamelet.yaml                          |   2 +-
 aws-sqs-source.kamelet.yaml                        |   6 +-
 azure-eventhubs-sink.kamelet.yaml                  |   6 +-
 azure-eventhubs-source.kamelet.yaml                |  12 +-
 azure-storage-blob-source.kamelet.yaml             |   2 +-
 bitcoin-source.kamelet.yaml                        |   2 +-
 .../twitter-directmessage-source.kamelet.yaml      |   0
 .../kamelets/twitter-search-source.kamelet.yaml    |   0
 .../kamelets/twitter-timeline-source.kamelet.yaml  |   0
 cassandra-sink.kamelet.yaml                        |   4 +-
 docs/README.md                                     |  13 +-
 docs/generator/go.mod                              |   8 -
 .../ROOT/pages/aws-kinesis-firehose-sink.adoc      |   4 +-
 docs/modules/ROOT/pages/aws-s3-sink.adoc           |   2 +-
 docs/modules/ROOT/pages/aws-s3-source.adoc         |   4 +-
 docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc     |   2 +-
 docs/modules/ROOT/pages/aws-sns-sink.adoc          |   2 +-
 docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc    |   2 +-
 docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc     |   2 +-
 docs/modules/ROOT/pages/aws-sqs-sink.adoc          |   2 +-
 docs/modules/ROOT/pages/aws-sqs-source.adoc        |   6 +-
 docs/modules/ROOT/pages/azure-eventhubs-sink.adoc  |  12 +-
 .../modules/ROOT/pages/azure-eventhubs-source.adoc |  24 +--
 .../ROOT/pages/azure-storage-blob-source.adoc      |   2 +-
 docs/modules/ROOT/pages/bitcoin-source.adoc        |   2 +-
 docs/modules/ROOT/pages/cassandra-sink.adoc        |   3 +-
 docs/modules/ROOT/pages/dropbox-sink.adoc          |   8 +-
 docs/modules/ROOT/pages/dropbox-source.adoc        |  14 +-
 docs/modules/ROOT/pages/earthquake-source.adoc     |   4 +-
 .../ROOT/pages/elasticsearch-search-source.adoc    |   8 +-
 docs/modules/ROOT/pages/exec-sink.adoc             |   6 +-
 docs/modules/ROOT/pages/fhir-source.adoc           |   4 +-
 docs/modules/ROOT/pages/file-watch-source.adoc     |   6 +-
 docs/modules/ROOT/pages/github-source.adoc         |   2 +-
 docs/modules/ROOT/pages/google-mail-source.adoc    |  10 +-
 docs/modules/ROOT/pages/http-source.adoc           |   4 +-
 docs/modules/ROOT/pages/kafka-source.adoc          |   4 +-
 docs/modules/ROOT/pages/minio-sink.adoc            |   2 +-
 docs/modules/ROOT/pages/minio-source.adoc          |   4 +-
 docs/modules/ROOT/pages/nats-source.adoc           |   7 +-
 docs/modules/ROOT/pages/ssh-source.adoc            |  16 +-
 dropbox-sink.kamelet.yaml                          |   4 +-
 dropbox-source.kamelet.yaml                        |   8 +-
 earthquake-source.kamelet.yaml                     |   4 +-
 elasticsearch-search-source.kamelet.yaml           |   4 +-
 exec-sink.kamelet.yaml                             |   7 +-
 fhir-source.kamelet.yaml                           |   4 +-
 file-watch-source.kamelet.yaml                     |   4 +-
 github-source.kamelet.yaml                         |   2 +-
 google-mail-source.kamelet.yaml                    |   8 +-
 http-source.kamelet.yaml                           |   4 +-
 kafka-source.kamelet.yaml                          |   2 +-
 minio-sink.kamelet.yaml                            |   2 +-
 minio-source.kamelet.yaml                          |   4 +-
 nats-source.kamelet.yaml                           |   6 +-
 script/generator/README.md                         |   8 +
 {docs => script}/generator/generator.go            |   0
 script/generator/go.mod                            |  10 +
 {docs => script}/generator/go.sum                  |  92 ++++++++
 script/validator/README.md                         |   8 +
 script/validator/go.mod                            |  12 ++
 script/validator/go.sum                            | 208 ++++++++++++++++++
 script/validator/validator.go                      | 239 +++++++++++++++++++++
 ssh-source.kamelet.yaml                            |  10 +-
 ...ml => twitter-directmessage-source.kamelet.yaml |   0
 ...elet.yaml => twitter-search-source.kamelet.yaml |   0
 ...et.yaml => twitter-timeline-source.kamelet.yaml |   0
 75 files changed, 780 insertions(+), 162 deletions(-)

diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml
new file mode 100644
index 0000000..5f9afbd
--- /dev/null
+++ b/.github/workflows/validate.yaml
@@ -0,0 +1,53 @@
+# ---------------------------------------------------------------------------
+# 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.
+# ---------------------------------------------------------------------------
+
+name: validate
+
+on:
+  pull_request:
+    branches:
+      - main
+    paths-ignore:
+      - '**.adoc'
+      - 'KEYS'
+      - 'LICENSE'
+      - 'NOTICE'
+  push:
+    branches:
+      - main
+    paths-ignore:
+      - '**.adoc'
+      - 'KEYS'
+      - 'LICENSE'
+      - 'NOTICE'
+
+jobs:
+  validate:
+    runs-on: ubuntu-latest
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v2
+    - name: Install Go
+      uses: actions/setup-go@v1
+      with:
+        go-version: 1.13.x
+    - name: Run Validator
+      run: |
+        echo "Running Kamelet validator..."
+
+        cd script/validator
+        go run . ../../
diff --git a/aws-kinesis-firehose-sink.kamelet.yaml b/aws-kinesis-firehose-sink.kamelet.yaml
index 33ac7c4..7d992e7 100644
--- a/aws-kinesis-firehose-sink.kamelet.yaml
+++ b/aws-kinesis-firehose-sink.kamelet.yaml
@@ -19,7 +19,7 @@ spec:
       - region
     properties:
       streamName:
-        title: Stream name
+        title: Stream Name
         description: The name of the stream we want to send to data to
         type: string
       accessKey:
diff --git a/aws-s3-sink.kamelet.yaml b/aws-s3-sink.kamelet.yaml
index 5caafb2..85d061e 100644
--- a/aws-s3-sink.kamelet.yaml
+++ b/aws-s3-sink.kamelet.yaml
@@ -56,7 +56,7 @@ spec:
         type: string
         example: "http://another-s3-endpoint:9000"
       autoCreateBucket:
-        title: Autocreate bucket
+        title: Autocreate Bucket
         description: Setting the autocreation of the S3 bucket bucketName.
         type: boolean
         x-descriptors:
diff --git a/aws-s3-source.kamelet.yaml b/aws-s3-source.kamelet.yaml
index 77f9bee..8c4ab4c 100644
--- a/aws-s3-source.kamelet.yaml
+++ b/aws-s3-source.kamelet.yaml
@@ -23,7 +23,7 @@ spec:
         description: The S3 Bucket name or ARN
         type: string
       deleteAfterRead:
-        title: Auto-delete objects
+        title: Auto-delete Objects
         description: Delete objects after consuming them
         type: boolean
         x-descriptors:
@@ -47,7 +47,7 @@ spec:
         type: string
         example: eu-west-1
       autoCreateBucket:
-        title: Autocreate bucket
+        title: Autocreate Bucket
         description: Setting the autocreation of the S3 bucket bucketName. 
         type: boolean
         x-descriptors:
diff --git a/aws-sns-fifo-sink.kamelet.yaml b/aws-sns-fifo-sink.kamelet.yaml
index 21bcc58..af43b31 100644
--- a/aws-sns-fifo-sink.kamelet.yaml
+++ b/aws-sns-fifo-sink.kamelet.yaml
@@ -45,7 +45,7 @@ spec:
         type: boolean
         default: false
       autoCreateTopic:
-        title: Autocreate topic
+        title: Autocreate Topic
         description: Setting the autocreation of the SNS topic. 
         type: boolean
         x-descriptors:
diff --git a/aws-sns-sink.kamelet.yaml b/aws-sns-sink.kamelet.yaml
index 6a668e0..3925568 100644
--- a/aws-sns-sink.kamelet.yaml
+++ b/aws-sns-sink.kamelet.yaml
@@ -40,7 +40,7 @@ spec:
         type: string
         example: eu-west-1
       autoCreateTopic:
-        title: Autocreate topic
+        title: Autocreate Topic
         description: Setting the autocreation of the SNS topic. 
         type: boolean
         x-descriptors:
diff --git a/aws-sqs-batch-sink.kamelet.yaml b/aws-sqs-batch-sink.kamelet.yaml
index 8a95a76..56c15f7 100644
--- a/aws-sqs-batch-sink.kamelet.yaml
+++ b/aws-sqs-batch-sink.kamelet.yaml
@@ -41,7 +41,7 @@ spec:
         type: string
         example: eu-west-1
       autoCreateQueue:
-        title: Autocreate queue
+        title: Autocreate Queue
         description: Setting the autocreation of the SQS queue. 
         type: boolean
         x-descriptors:
diff --git a/aws-sqs-fifo-sink.kamelet.yaml b/aws-sqs-fifo-sink.kamelet.yaml
index dd2a427..f4a07b9 100644
--- a/aws-sqs-fifo-sink.kamelet.yaml
+++ b/aws-sqs-fifo-sink.kamelet.yaml
@@ -45,7 +45,7 @@ spec:
         type: boolean
         default: false
       autoCreateQueue:
-        title: Autocreate queue
+        title: Autocreate Queue
         description: Setting the autocreation of the SQS queue. 
         type: boolean
         x-descriptors:
diff --git a/aws-sqs-sink.kamelet.yaml b/aws-sqs-sink.kamelet.yaml
index d4151fe..e45bd03 100644
--- a/aws-sqs-sink.kamelet.yaml
+++ b/aws-sqs-sink.kamelet.yaml
@@ -40,7 +40,7 @@ spec:
         type: string
         example: eu-west-1
       autoCreateQueue:
-        title: Autocreate queue
+        title: Autocreate Queue
         description: Setting the autocreation of the SQS queue. 
         type: boolean
         x-descriptors:
diff --git a/aws-sqs-source.kamelet.yaml b/aws-sqs-source.kamelet.yaml
index 20e7326..47337b2 100644
--- a/aws-sqs-source.kamelet.yaml
+++ b/aws-sqs-source.kamelet.yaml
@@ -20,10 +20,10 @@ spec:
     properties:
       queueNameOrArn:
         title: Queue Name
-        description: The SQS Queue name or ARN
+        description: The SQS Queue Name or ARN
         type: string
       deleteAfterRead:
-        title: Auto-delete messages
+        title: Auto-delete Messages
         description: Delete messages after consuming them
         type: boolean
         x-descriptors:
@@ -47,7 +47,7 @@ spec:
         type: string
         example: eu-west-1
       autoCreateQueue:
-        title: Autocreate queue
+        title: Autocreate Queue
         description: Setting the autocreation of the SQS queue. 
         type: boolean
         x-descriptors:
diff --git a/azure-eventhubs-sink.kamelet.yaml b/azure-eventhubs-sink.kamelet.yaml
index 9208f06..0082ef6 100644
--- a/azure-eventhubs-sink.kamelet.yaml
+++ b/azure-eventhubs-sink.kamelet.yaml
@@ -29,16 +29,16 @@ spec:
         description: The eventhubs namespace
         type: string
       eventhubName:
-        title: Eventhubs name
+        title: Eventhubs Name
         description: The eventhub name
         type: boolean
         type: string
       sharedAccessName:
-        title: Share access name
+        title: Share Access Name
         description: EventHubs SAS key name
         type: string
       sharedAccessKey:
-        title: Share access key
+        title: Share Access Key
         description: The key for EventHubs SAS key name
         type: string
         x-descriptors:
diff --git a/azure-eventhubs-source.kamelet.yaml b/azure-eventhubs-source.kamelet.yaml
index 863f3df..3a1ab67 100644
--- a/azure-eventhubs-source.kamelet.yaml
+++ b/azure-eventhubs-source.kamelet.yaml
@@ -26,30 +26,30 @@ spec:
         description: The eventhubs namespace
         type: string
       eventhubName:
-        title: Eventhubs name
+        title: Eventhubs Name
         description: The eventhub name
         type: boolean
         type: string
       sharedAccessName:
-        title: Share access name
+        title: Share Access Name
         description: EventHubs SAS key name
         type: string
       sharedAccessKey:
-        title: Share access key
+        title: Share Access Key
         description: The key for EventHubs SAS key name
         type: string
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:password
       blobAccountName:
-        title: Azure Storage Blob account name
+        title: Azure Storage Blob Account Name
         description: The name of the storage blob account to be use
         type: string
       blobContainerName:
-        title: Azure Storage Blob container name
+        title: Azure Storage Blob Container Name
         description: The name of the storage blob container to be use
         type: string
       blobAccessKey:
-        title: Azure Storage Blob access key
+        title: Azure Storage Blob Access Key
         description: The key for Azure Storage Blob service associated with the Blob account name
         type: string
         x-descriptors:
diff --git a/azure-storage-blob-source.kamelet.yaml b/azure-storage-blob-source.kamelet.yaml
index 93aa156..3b77cef 100644
--- a/azure-storage-blob-source.kamelet.yaml
+++ b/azure-storage-blob-source.kamelet.yaml
@@ -19,7 +19,7 @@ spec:
       - accessKey
     properties:
       period:
-        title: Period between polls
+        title: Period between Polls
         description: The interval between fetches to the Azure Storage Container in milliseconds
         type: integer
         default: 10000
diff --git a/bitcoin-source.kamelet.yaml b/bitcoin-source.kamelet.yaml
index 9d35788..21ccaa0 100644
--- a/bitcoin-source.kamelet.yaml
+++ b/bitcoin-source.kamelet.yaml
@@ -14,7 +14,7 @@ spec:
       Provides a feed of the value of the Bitcoin compared to USDT using the Binance service.
     properties:
       period:
-        title: Period between updates
+        title: Period between Updates
         description: The interval between updates in milliseconds
         type: integer
         default: 10000
diff --git a/twitter-directmessage.kamelet.yaml b/camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage-source.kamelet.yaml
old mode 100755
new mode 100644
similarity index 100%
rename from twitter-directmessage.kamelet.yaml
rename to camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage-source.kamelet.yaml
diff --git a/twitter-search.kamelet.yaml b/camel-kamelets-catalog/src/main/resources/kamelets/twitter-search-source.kamelet.yaml
old mode 100755
new mode 100644
similarity index 100%
rename from twitter-search.kamelet.yaml
rename to camel-kamelets-catalog/src/main/resources/kamelets/twitter-search-source.kamelet.yaml
diff --git a/twitter-timeline.kamelet.yaml b/camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline-source.kamelet.yaml
old mode 100755
new mode 100644
similarity index 100%
rename from twitter-timeline.kamelet.yaml
rename to camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline-source.kamelet.yaml
diff --git a/cassandra-sink.kamelet.yaml b/cassandra-sink.kamelet.yaml
index 6a9d428..cf62e89 100644
--- a/cassandra-sink.kamelet.yaml
+++ b/cassandra-sink.kamelet.yaml
@@ -20,7 +20,7 @@ spec:
       - keyspace
       - username
       - password
-      - query
+      - preparedStatement
     properties:
       host:
         title: Host
@@ -53,7 +53,7 @@ spec:
         type: string
         default: ANY
       preparedStatement:
-        title: The Prepared statement
+        title: Prepared Statement
         description: The Prepared statement to execute against the Cassandra cluster table
         type: string
   dependencies:
diff --git a/docs/README.md b/docs/README.md
index 4f51d31..4a8ce33 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -2,18 +2,13 @@
 
 This section contains the Kamelet catalog website, auto-generated from the source Kamelets.
 
-## Building
-
-To generate the adoc and svg files for the website (you need `go`):
-
-```
-# From the /docs/generator directory
-go run . ../../ ../modules/ROOT/
-```
-
 To preview the website:
 
 ```
 # From the /docs directory
 yarn preview
 ```
+
+## Generator
+
+The generator tool has been moved in the /script/generator directory
diff --git a/docs/generator/go.mod b/docs/generator/go.mod
deleted file mode 100644
index 85f55e1..0000000
--- a/docs/generator/go.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-module github.com/apache/camel-kamelets/docs/generator
-
-go 1.14
-
-require (
-	github.com/apache/camel-k/pkg/apis/camel v1.3.1
-	k8s.io/apimachinery v0.18.9
-)
diff --git a/docs/modules/ROOT/pages/aws-kinesis-firehose-sink.adoc b/docs/modules/ROOT/pages/aws-kinesis-firehose-sink.adoc
index 8187b9b..155e61c 100644
--- a/docs/modules/ROOT/pages/aws-kinesis-firehose-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-kinesis-firehose-sink.adoc
@@ -14,7 +14,7 @@ The following table summarizes the configuration options available for the `aws-
 | *accessKey {empty}* *| Access Key| The access key obtained from AWS| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| *streamName {empty}* *| Stream name| The name of the stream we want to send to data to| string| | 
+| *streamName {empty}* *| Stream Name| The name of the stream we want to send to data to| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -49,7 +49,7 @@ spec:
       accessKey: "The Access Key"
       region: "eu-west-1"
       secretKey: "The Secret Key"
-      streamName: "The Stream name"
+      streamName: "The Stream Name"
 
 ----
 
diff --git a/docs/modules/ROOT/pages/aws-s3-sink.adoc b/docs/modules/ROOT/pages/aws-s3-sink.adoc
index a2703f5..9289761 100644
--- a/docs/modules/ROOT/pages/aws-s3-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-s3-sink.adoc
@@ -21,7 +21,7 @@ The following table summarizes the configuration options available for the `aws-
 | *bucketNameOrArn {empty}* *| Bucket Name| The S3 Bucket name or ARN.| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to.| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS.| string| | 
-| autoCreateBucket| Autocreate bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
+| autoCreateBucket| Autocreate Bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
 | overrideEndpoint| Override Endpoint| Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride.| boolean| `false`| 
 | uriEndpointOverride| Override Endpoint URI| Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option.| string| | `"http://another-s3-endpoint:9000"`
 |===
diff --git a/docs/modules/ROOT/pages/aws-s3-source.adoc b/docs/modules/ROOT/pages/aws-s3-source.adoc
index 66d4b52..11570b4 100644
--- a/docs/modules/ROOT/pages/aws-s3-source.adoc
+++ b/docs/modules/ROOT/pages/aws-s3-source.adoc
@@ -15,8 +15,8 @@ The following table summarizes the configuration options available for the `aws-
 | *bucketNameOrArn {empty}* *| Bucket Name| The S3 Bucket name or ARN| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| autoCreateBucket| Autocreate bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
-| deleteAfterRead| Auto-delete objects| Delete objects after consuming them| boolean| `true`| 
+| autoCreateBucket| Autocreate Bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
+| deleteAfterRead| Auto-delete Objects| Delete objects after consuming them| boolean| `true`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc b/docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc
index 37256fa..d8a9058 100644
--- a/docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-sns-fifo-sink.adoc
@@ -15,7 +15,7 @@ The following table summarizes the configuration options available for the `aws-
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
 | *topicNameOrArn {empty}* *| Topic Name| The SNS Topic name or ARN| string| | 
-| autoCreateTopic| Autocreate topic| Setting the autocreation of the SNS topic.| boolean| `false`| 
+| autoCreateTopic| Autocreate Topic| Setting the autocreation of the SNS topic.| boolean| `false`| 
 | contentBasedDeduplication| Content-Based Deduplication| Use content-based deduplication (should be enabled in the SQS FIFO queue first)| boolean| `false`| 
 |===
 
diff --git a/docs/modules/ROOT/pages/aws-sns-sink.adoc b/docs/modules/ROOT/pages/aws-sns-sink.adoc
index 9ce2f28..0f74eb9 100644
--- a/docs/modules/ROOT/pages/aws-sns-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-sns-sink.adoc
@@ -15,7 +15,7 @@ The following table summarizes the configuration options available for the `aws-
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
 | *topicNameOrArn {empty}* *| Topic Name| The SQS Topic name or ARN| string| | 
-| autoCreateTopic| Autocreate topic| Setting the autocreation of the SNS topic.| boolean| `false`| 
+| autoCreateTopic| Autocreate Topic| Setting the autocreation of the SNS topic.| boolean| `false`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc b/docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc
index 4caee88..aa37b3e 100644
--- a/docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-sqs-batch-sink.adoc
@@ -16,7 +16,7 @@ The following table summarizes the configuration options available for the `aws-
 | *queueNameOrArn {empty}* *| Queue Name| The SQS Queue name or ARN| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| autoCreateQueue| Autocreate queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
+| autoCreateQueue| Autocreate Queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc b/docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc
index 8db85a3..f6b43f9 100644
--- a/docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-sqs-fifo-sink.adoc
@@ -15,7 +15,7 @@ The following table summarizes the configuration options available for the `aws-
 | *queueNameOrArn {empty}* *| Queue Name| The SQS Queue name or ARN| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| autoCreateQueue| Autocreate queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
+| autoCreateQueue| Autocreate Queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
 | contentBasedDeduplication| Content-Based Deduplication| Use content-based deduplication (should be enabled in the SQS FIFO queue first)| boolean| `false`| 
 |===
 
diff --git a/docs/modules/ROOT/pages/aws-sqs-sink.adoc b/docs/modules/ROOT/pages/aws-sqs-sink.adoc
index 0ea5c3a..95fa148 100644
--- a/docs/modules/ROOT/pages/aws-sqs-sink.adoc
+++ b/docs/modules/ROOT/pages/aws-sqs-sink.adoc
@@ -15,7 +15,7 @@ The following table summarizes the configuration options available for the `aws-
 | *queueNameOrArn {empty}* *| Queue Name| The SQS Queue name or ARN| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| autoCreateQueue| Autocreate queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
+| autoCreateQueue| Autocreate Queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/aws-sqs-source.adoc b/docs/modules/ROOT/pages/aws-sqs-source.adoc
index 55957d8..5d1dfca 100644
--- a/docs/modules/ROOT/pages/aws-sqs-source.adoc
+++ b/docs/modules/ROOT/pages/aws-sqs-source.adoc
@@ -12,11 +12,11 @@ The following table summarizes the configuration options available for the `aws-
 |===
 | Property| Name| Description| Type| Default| Example
 | *accessKey {empty}* *| Access Key| The access key obtained from AWS| string| | 
-| *queueNameOrArn {empty}* *| Queue Name| The SQS Queue name or ARN| string| | 
+| *queueNameOrArn {empty}* *| Queue Name| The SQS Queue Name or ARN| string| | 
 | *region {empty}* *| AWS Region| The AWS region to connect to| string| | `"eu-west-1"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from AWS| string| | 
-| autoCreateQueue| Autocreate queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
-| deleteAfterRead| Auto-delete messages| Delete messages after consuming them| boolean| `true`| 
+| autoCreateQueue| Autocreate Queue| Setting the autocreation of the SQS queue.| boolean| `false`| 
+| deleteAfterRead| Auto-delete Messages| Delete messages after consuming them| boolean| `true`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/azure-eventhubs-sink.adoc b/docs/modules/ROOT/pages/azure-eventhubs-sink.adoc
index 78e47ff..3afd386 100644
--- a/docs/modules/ROOT/pages/azure-eventhubs-sink.adoc
+++ b/docs/modules/ROOT/pages/azure-eventhubs-sink.adoc
@@ -17,10 +17,10 @@ The following table summarizes the configuration options available for the `azur
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *eventhubName {empty}* *| Eventhubs name| The eventhub name| string| | 
+| *eventhubName {empty}* *| Eventhubs Name| The eventhub name| string| | 
 | *namespaceName {empty}* *| Eventhubs Namespace| The eventhubs namespace| string| | 
-| *sharedAccessKey {empty}* *| Share access key| The key for EventHubs SAS key name| string| | 
-| *sharedAccessName {empty}* *| Share access name| EventHubs SAS key name| string| | 
+| *sharedAccessKey {empty}* *| Share Access Key| The key for EventHubs SAS key name| string| | 
+| *sharedAccessName {empty}* *| Share Access Name| EventHubs SAS key name| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -52,10 +52,10 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: azure-eventhubs-sink
     properties:
-      eventhubName: "The Eventhubs name"
+      eventhubName: "The Eventhubs Name"
       namespaceName: "The Eventhubs Namespace"
-      sharedAccessKey: "The Share access key"
-      sharedAccessName: "The Share access name"
+      sharedAccessKey: "The Share Access Key"
+      sharedAccessName: "The Share Access Name"
 
 ----
 
diff --git a/docs/modules/ROOT/pages/azure-eventhubs-source.adoc b/docs/modules/ROOT/pages/azure-eventhubs-source.adoc
index 9e7acd0..1a1af7f 100644
--- a/docs/modules/ROOT/pages/azure-eventhubs-source.adoc
+++ b/docs/modules/ROOT/pages/azure-eventhubs-source.adoc
@@ -11,13 +11,13 @@ The following table summarizes the configuration options available for the `azur
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *blobAccessKey {empty}* *| Azure Storage Blob access key| The key for Azure Storage Blob service associated with the Blob account name| string| | 
-| *blobAccountName {empty}* *| Azure Storage Blob account name| The name of the storage blob account to be use| string| | 
-| *blobContainerName {empty}* *| Azure Storage Blob container name| The name of the storage blob container to be use| string| | 
-| *eventhubName {empty}* *| Eventhubs name| The eventhub name| string| | 
+| *blobAccessKey {empty}* *| Azure Storage Blob Access Key| The key for Azure Storage Blob service associated with the Blob account name| string| | 
+| *blobAccountName {empty}* *| Azure Storage Blob Account Name| The name of the storage blob account to be use| string| | 
+| *blobContainerName {empty}* *| Azure Storage Blob Container Name| The name of the storage blob container to be use| string| | 
+| *eventhubName {empty}* *| Eventhubs Name| The eventhub name| string| | 
 | *namespaceName {empty}* *| Eventhubs Namespace| The eventhubs namespace| string| | 
-| *sharedAccessKey {empty}* *| Share access key| The key for EventHubs SAS key name| string| | 
-| *sharedAccessName {empty}* *| Share access name| EventHubs SAS key name| string| | 
+| *sharedAccessKey {empty}* *| Share Access Key| The key for EventHubs SAS key name| string| | 
+| *sharedAccessName {empty}* *| Share Access Name| EventHubs SAS key name| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -44,13 +44,13 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: azure-eventhubs-source
     properties:
-      blobAccessKey: "The Azure Storage Blob access key"
-      blobAccountName: "The Azure Storage Blob account name"
-      blobContainerName: "The Azure Storage Blob container name"
-      eventhubName: "The Eventhubs name"
+      blobAccessKey: "The Azure Storage Blob Access Key"
+      blobAccountName: "The Azure Storage Blob Account Name"
+      blobContainerName: "The Azure Storage Blob Container Name"
+      eventhubName: "The Eventhubs Name"
       namespaceName: "The Eventhubs Namespace"
-      sharedAccessKey: "The Share access key"
-      sharedAccessName: "The Share access name"
+      sharedAccessKey: "The Share Access Key"
+      sharedAccessName: "The Share Access Name"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/docs/modules/ROOT/pages/azure-storage-blob-source.adoc b/docs/modules/ROOT/pages/azure-storage-blob-source.adoc
index 703d9a7..edb8450 100644
--- a/docs/modules/ROOT/pages/azure-storage-blob-source.adoc
+++ b/docs/modules/ROOT/pages/azure-storage-blob-source.adoc
@@ -14,7 +14,7 @@ The following table summarizes the configuration options available for the `azur
 | *accessKey {empty}* *| Access Key| The Azure Storage Blob access Key.| string| | 
 | *accountName {empty}* *| Account Name| The Azure Storage Blob account name.| string| | 
 | *containerName {empty}* *| Container Name| The Azure Storage Blob container name.| string| | 
-| *period {empty}* *| Period between polls| The interval between fetches to the Azure Storage Container in milliseconds| integer| `10000`| 
+| *period {empty}* *| Period between Polls| The interval between fetches to the Azure Storage Container in milliseconds| integer| `10000`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/bitcoin-source.adoc b/docs/modules/ROOT/pages/bitcoin-source.adoc
index 9130b62..6c52ca1 100644
--- a/docs/modules/ROOT/pages/bitcoin-source.adoc
+++ b/docs/modules/ROOT/pages/bitcoin-source.adoc
@@ -11,7 +11,7 @@ The following table summarizes the configuration options available for the `bitc
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| period| Period between updates| The interval between updates in milliseconds| integer| `10000`| 
+| period| Period between Updates| The interval between updates in milliseconds| integer| `10000`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/cassandra-sink.adoc b/docs/modules/ROOT/pages/cassandra-sink.adoc
index bfd5c03..5863e92 100644
--- a/docs/modules/ROOT/pages/cassandra-sink.adoc
+++ b/docs/modules/ROOT/pages/cassandra-sink.adoc
@@ -17,9 +17,9 @@ The following table summarizes the configuration options available for the `cass
 | *keyspace {empty}* *| Keyspace| Keyspace to use| string| | `"customers"`
 | *password {empty}* *| Password| The password to use for accessing a secured Cassandra Cluster| string| | 
 | *port {empty}* *| Port| Port number of cassandra server(s)| string| | `9042`
+| *preparedStatement {empty}* *| Prepared Statement| The Prepared statement to execute against the Cassandra cluster table| string| | 
 | *username {empty}* *| Username| The username to use for accessing a secured Cassandra Cluster| string| | 
 | consistencyLevel| Consistency Level| Consistency level to use. The value can be one of ANY, ONE, TWO, THREE, QUORUM, ALL, LOCAL_QUORUM, EACH_QUORUM, SERIAL, LOCAL_SERIAL, LOCAL_ONE| string| `"ANY"`| 
-| preparedStatement| The Prepared statement| The Prepared statement to execute against the Cassandra cluster table| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -55,6 +55,7 @@ spec:
       keyspace: "customers"
       password: "The Password"
       port: 9042
+      preparedStatement: "The Prepared Statement"
       username: "The Username"
 
 ----
diff --git a/docs/modules/ROOT/pages/dropbox-sink.adoc b/docs/modules/ROOT/pages/dropbox-sink.adoc
index b71a5b7..24f6d0a 100644
--- a/docs/modules/ROOT/pages/dropbox-sink.adoc
+++ b/docs/modules/ROOT/pages/dropbox-sink.adoc
@@ -18,8 +18,8 @@ The following table summarizes the configuration options available for the `drop
 |===
 | Property| Name| Description| Type| Default| Example
 | *accessToken {empty}* *| Dropbox Access Token| The access Token to use to access Dropbox| string| | 
-| *clientIdentifier {empty}* *| The client identifier| Dropbox App client Identifier| string| | 
-| *remotePath {empty}* *| Remote path| Original file or folder to work with| string| | 
+| *clientIdentifier {empty}* *| Client Identifier| Dropbox App client Identifier| string| | 
+| *remotePath {empty}* *| Remote Path| Original file or folder to work with| string| | 
 | *uploadMode {empty}* *| Upload Mode| Which mode to upload. in case of add the new file will be renamed if a file with the same name already exists on dropbox. in case of force if a file with the same name already exists on dropbox, this will be overwritten. The value can be one of add, force.| string| `"add"`| 
 |===
 
@@ -53,8 +53,8 @@ spec:
       name: dropbox-sink
     properties:
       accessToken: "The Dropbox Access Token"
-      clientIdentifier: "The The client identifier"
-      remotePath: "The Remote path"
+      clientIdentifier: "The Client Identifier"
+      remotePath: "The Remote Path"
 
 ----
 
diff --git a/docs/modules/ROOT/pages/dropbox-source.adoc b/docs/modules/ROOT/pages/dropbox-source.adoc
index 10601a6..695faba 100644
--- a/docs/modules/ROOT/pages/dropbox-source.adoc
+++ b/docs/modules/ROOT/pages/dropbox-source.adoc
@@ -12,10 +12,10 @@ The following table summarizes the configuration options available for the `drop
 |===
 | Property| Name| Description| Type| Default| Example
 | *accessToken {empty}* *| Dropbox Access Token| The access Token to use to access Dropbox| string| | 
-| *clientIdentifier {empty}* *| The client identifier| Dropbox App client Identifier| string| | 
-| *period {empty}* *| Period between polls| The interval between fetches to the Dropbox remote path in milliseconds| integer| `10000`| 
-| *query {empty}* *| Querys| A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set, all files will be matched.| string| | 
-| *remotePath {empty}* *| Remote path| Original file or folder to work with| string| | 
+| *clientIdentifier {empty}* *| Client Identifier| Dropbox App client Identifier| string| | 
+| *period {empty}* *| Period between Polls| The interval between fetches to the Dropbox remote path in milliseconds| integer| `10000`| 
+| *query {empty}* *| Queries| A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set, all files will be matched.| string| | 
+| *remotePath {empty}* *| Remote Path| Original file or folder to work with| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -43,9 +43,9 @@ spec:
       name: dropbox-source
     properties:
       accessToken: "The Dropbox Access Token"
-      clientIdentifier: "The The client identifier"
-      query: "The Querys"
-      remotePath: "The Remote path"
+      clientIdentifier: "The Client Identifier"
+      query: "The Queries"
+      remotePath: "The Remote Path"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/docs/modules/ROOT/pages/earthquake-source.adoc b/docs/modules/ROOT/pages/earthquake-source.adoc
index b664673..e3a023e 100644
--- a/docs/modules/ROOT/pages/earthquake-source.adoc
+++ b/docs/modules/ROOT/pages/earthquake-source.adoc
@@ -11,8 +11,8 @@ The following table summarizes the configuration options available for the `eart
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| lookAhead| Look-ahead minutes| The amount of minutes to look ahead when starting the integration afresh| integer| `120`| 
-| period| Period between polls| The interval between fetches to the earthquake API in milliseconds| integer| `60000`| 
+| lookAhead| Look-ahead Minutes| The amount of minutes to look ahead when starting the integration afresh| integer| `120`| 
+| period| Period between Polls| The interval between fetches to the earthquake API in milliseconds| integer| `60000`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/elasticsearch-search-source.adoc b/docs/modules/ROOT/pages/elasticsearch-search-source.adoc
index 5203d56..16524c4 100644
--- a/docs/modules/ROOT/pages/elasticsearch-search-source.adoc
+++ b/docs/modules/ROOT/pages/elasticsearch-search-source.adoc
@@ -11,8 +11,8 @@ The following table summarizes the configuration options available for the `elas
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *clusterName {empty}* *| ElasticSearch cluster name| Name of the cluster.| string| | 
-| *hostAddresses {empty}* *| Host addresses| Comma separated list with ip:port formatted remote transport addresses to use.| string| | 
+| *clusterName {empty}* *| ElasticSearch Cluster Name| Name of the cluster.| string| | 
+| *hostAddresses {empty}* *| Host Addresses| Comma separated list with ip:port formatted remote transport addresses to use.| string| | 
 | *indexName {empty}* *| Index in ElasticSearch| The name of the index to act against.| string| | 
 | *query {empty}* *| Query| The query we want to use to search on ElasticSearch.| string| | 
 | enableSSL| Enable SSL| Do we want to connect using SSL?| boolean| `true`| 
@@ -45,8 +45,8 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: elasticsearch-search-source
     properties:
-      clusterName: "The ElasticSearch cluster name"
-      hostAddresses: "The Host addresses"
+      clusterName: "The ElasticSearch Cluster Name"
+      hostAddresses: "The Host Addresses"
       indexName: "The Index in ElasticSearch"
       query: "The Query"
   sink:
diff --git a/docs/modules/ROOT/pages/exec-sink.adoc b/docs/modules/ROOT/pages/exec-sink.adoc
index 0b7defa..0199360 100644
--- a/docs/modules/ROOT/pages/exec-sink.adoc
+++ b/docs/modules/ROOT/pages/exec-sink.adoc
@@ -7,7 +7,7 @@ Execute system commands
 
 The Kamelet expects the following headers to be set:
 
-- `args/ `ce-args`: as the args to be set on the executable.
+- `args` / `ce-args`: as the args to be set on the executable.
 
 If the header won't be set the executable will be run without arguments.
 
@@ -17,7 +17,7 @@ The following table summarizes the configuration options available for the `exec
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *executable {empty}* *| Executable command| The command to execute| string| | 
+| *executable {empty}* *| Executable Command| The command to execute| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -49,7 +49,7 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: exec-sink
     properties:
-      executable: "The Executable command"
+      executable: "The Executable Command"
 
 ----
 
diff --git a/docs/modules/ROOT/pages/fhir-source.adoc b/docs/modules/ROOT/pages/fhir-source.adoc
index dee17a4..b410db4 100644
--- a/docs/modules/ROOT/pages/fhir-source.adoc
+++ b/docs/modules/ROOT/pages/fhir-source.adoc
@@ -14,8 +14,8 @@ The following table summarizes the configuration options available for the `fhir
 | *password {empty}* *| Password| The password to access the Fhir server| string| | 
 | *serverUrl {empty}* *| Server URL| The Fhir server url| string| | 
 | *username {empty}* *| Username| The username to access the Fhir server| string| | 
-| encoding| encoding| Encoding to use for all request. Possible values are JSON and XML| string| `"JSON"`| 
-| fhirVersion| Fhir version| The FHIR Version to use. There are 6 enums and the value can be one of DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5| string| `"R4"`| 
+| encoding| Encoding| Encoding to use for all request. Possible values are JSON and XML| string| `"JSON"`| 
+| fhirVersion| Fhir Version| The FHIR Version to use. There are 6 enums and the value can be one of DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5| string| `"R4"`| 
 | prettyPrint| Json Pretty Print| Define if the Json must be pretty print or not| boolean| `true`| 
 | url| URL| The Fhir resource type url| string| `"/Patient"`| 
 |===
diff --git a/docs/modules/ROOT/pages/file-watch-source.adoc b/docs/modules/ROOT/pages/file-watch-source.adoc
index 4cc21b9..d379b4a 100644
--- a/docs/modules/ROOT/pages/file-watch-source.adoc
+++ b/docs/modules/ROOT/pages/file-watch-source.adoc
@@ -11,8 +11,8 @@ The following table summarizes the configuration options available for the `file
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *events {empty}* *| The events| The type of events to consume| boolean| `"CREATE,MODIFY,DELETE"`| 
-| *path {empty}* *| The path| Path of file or folder to watch| string| | 
+| *events {empty}* *| Events| The type of events to consume| boolean| `"CREATE,MODIFY,DELETE"`| 
+| *path {empty}* *| Path to Watch| Path of file or folder to watch| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -39,7 +39,7 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: file-watch-source
     properties:
-      path: "The The path"
+      path: "The Path to Watch"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/docs/modules/ROOT/pages/github-source.adoc b/docs/modules/ROOT/pages/github-source.adoc
index 8ed2d86..a1670d6 100644
--- a/docs/modules/ROOT/pages/github-source.adoc
+++ b/docs/modules/ROOT/pages/github-source.adoc
@@ -14,7 +14,7 @@ The following table summarizes the configuration options available for the `gith
 | *oauthToken {empty}* *| OAuth Token| Oauth token| string| | 
 | *repoName {empty}* *| Repository Name| The Github Repository name| string| | 
 | *repoOwner {empty}* *| Repository Owner| The repository owner| string| | 
-| *type {empty}* *| Event type| The type of event to consume. One of event, pullRequest, pullRequestComment or tag| string| `"event"`| 
+| *type {empty}* *| Event Type| The type of event to consume. One of event, pullRequest, pullRequestComment or tag| string| `"event"`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/google-mail-source.adoc b/docs/modules/ROOT/pages/google-mail-source.adoc
index 15a7bf1..71c6f8b 100644
--- a/docs/modules/ROOT/pages/google-mail-source.adoc
+++ b/docs/modules/ROOT/pages/google-mail-source.adoc
@@ -13,14 +13,14 @@ The following table summarizes the configuration options available for the `goog
 | Property| Name| Description| Type| Default| Example
 | *accessToken {empty}* *| Access Token| OAuth 2 access token for google mail application. This typically expires after an hour so refreshToken is recommended for long term usage.| string| | 
 | *applicationName {empty}* *| Application name| Google Mail application name| string| | 
-| *clientId {empty}* *| Client Id| Client ID of the gmail application| string| | 
+| *clientId {empty}* *| Client ID| Client ID of the gmail application| string| | 
 | *clientSecret {empty}* *| Client Secret| Client Secret of the gmail application| string| | 
 | *index {empty}* *| Index| An index for the google mail endpoint| string| | 
 | *refreshToken {empty}* *| Refresh Token| OAuth 2 refresh token for google mail application. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.| string| | 
 | delay| Delay| Milliseconds before the next poll| integer| `500`| 
-| labels| Gmail labels| Comma separated list of labels to take into account| string| | `"inbox"`
-| markAsRead| Mark as read| Mark the message as read once it has been consumed| boolean| `true`| 
-| query| Gmail query| The query to execute on gmail box| string| `"is:unread"`| `"is:unread -category:(promotions OR social)"`
+| labels| Gmail Labels| Comma separated list of labels to take into account| string| | `"inbox"`
+| markAsRead| Mark as Read| Mark the message as read once it has been consumed| boolean| `true`| 
+| query| Gmail Query| The query to execute on gmail box| string| `"is:unread"`| `"is:unread -category:(promotions OR social)"`
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -49,7 +49,7 @@ spec:
     properties:
       accessToken: "The Access Token"
       applicationName: "The Application name"
-      clientId: "The Client Id"
+      clientId: "The Client ID"
       clientSecret: "The Client Secret"
       index: "The Index"
       refreshToken: "The Refresh Token"
diff --git a/docs/modules/ROOT/pages/http-source.adoc b/docs/modules/ROOT/pages/http-source.adoc
index 721a456..eaa1936 100644
--- a/docs/modules/ROOT/pages/http-source.adoc
+++ b/docs/modules/ROOT/pages/http-source.adoc
@@ -12,8 +12,8 @@ The following table summarizes the configuration options available for the `http
 |===
 | Property| Name| Description| Type| Default| Example
 | *url {empty}* *| URL| The URL to fetch for data| string| | `"https://gist.githubusercontent.com/nicolaferraro/e3c72ace3c751f9f88273896611ce5fe/raw/3b6f54060bacb56b6719b7386a4645cb59ad6cc1/quote.json"`
-| contentType| Content type| The content type accepted for the resource| string| `"application/json"`| 
-| period| Period between updates| The interval between fetches in milliseconds| integer| `10000`| 
+| contentType| Content Type| The content type accepted for the resource| string| `"application/json"`| 
+| period| Period between Updates| The interval between fetches in milliseconds| integer| `10000`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/kafka-source.adoc b/docs/modules/ROOT/pages/kafka-source.adoc
index 5095592..e8e2295 100644
--- a/docs/modules/ROOT/pages/kafka-source.adoc
+++ b/docs/modules/ROOT/pages/kafka-source.adoc
@@ -12,7 +12,7 @@ The following table summarizes the configuration options available for the `kafk
 |===
 | Property| Name| Description| Type| Default| Example
 | *brokers {empty}* *| Brokers| Comma separated list of Kafka Broker URLs| string| | 
-| *topic {empty}* *| Topic names| Comma separated list of Kafka topic names| string| | 
+| *topic {empty}* *| Topic Names| Comma separated list of Kafka topic names| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -40,7 +40,7 @@ spec:
       name: kafka-source
     properties:
       brokers: "The Brokers"
-      topic: "The Topic names"
+      topic: "The Topic Names"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/docs/modules/ROOT/pages/minio-sink.adoc b/docs/modules/ROOT/pages/minio-sink.adoc
index 1596986..a554f90 100644
--- a/docs/modules/ROOT/pages/minio-sink.adoc
+++ b/docs/modules/ROOT/pages/minio-sink.adoc
@@ -21,7 +21,7 @@ The following table summarizes the configuration options available for the `mini
 | *bucketName {empty}* *| Bucket Name| The Minio Bucket name| string| | 
 | *endpoint {empty}* *| Endpoint| The Minio Endpoint, it can be an URL, domain name, IPv4 address or IPv6 address.| string| | `"http://localhost:9000"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from Minio| string| | 
-| autoCreateBucket| Autocreate bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
+| autoCreateBucket| Autocreate Bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/minio-source.adoc b/docs/modules/ROOT/pages/minio-source.adoc
index f0a2ff2..8f45e81 100644
--- a/docs/modules/ROOT/pages/minio-source.adoc
+++ b/docs/modules/ROOT/pages/minio-source.adoc
@@ -15,8 +15,8 @@ The following table summarizes the configuration options available for the `mini
 | *bucketName {empty}* *| Bucket Name| The Minio Bucket name| string| | 
 | *endpoint {empty}* *| Endpoint| The Minio Endpoint, it can be an URL, domain name, IPv4 address or IPv6 address.| string| | `"http://localhost:9000"`
 | *secretKey {empty}* *| Secret Key| The secret key obtained from Minio| string| | 
-| autoCreateBucket| Autocreate bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
-| deleteAfterRead| Auto-delete objects| Delete objects after consuming them| boolean| `true`| 
+| autoCreateBucket| Autocreate Bucket| Setting the autocreation of the S3 bucket bucketName.| boolean| `false`| 
+| deleteAfterRead| Auto-delete Objects| Delete objects after consuming them| boolean| `true`| 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
diff --git a/docs/modules/ROOT/pages/nats-source.adoc b/docs/modules/ROOT/pages/nats-source.adoc
index cd6afec..005c21b 100644
--- a/docs/modules/ROOT/pages/nats-source.adoc
+++ b/docs/modules/ROOT/pages/nats-source.adoc
@@ -11,8 +11,8 @@ The following table summarizes the configuration options available for the `nats
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *topic {empty}* *| topic| NATS Topic name| string| | 
-| brokers| servers| Comma separated list of NATS Servers| string| | 
+| *servers {empty}* *| Servers| Comma separated list of NATS Servers| string| | 
+| *topic {empty}* *| Topic| NATS Topic name| string| | 
 |===
 
 NOTE: Fields marked with ({empty}*) are mandatory.
@@ -39,7 +39,8 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: nats-source
     properties:
-      topic: "The topic"
+      servers: "The Servers"
+      topic: "The Topic"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/docs/modules/ROOT/pages/ssh-source.adoc b/docs/modules/ROOT/pages/ssh-source.adoc
index 2424690..73e7a9f 100644
--- a/docs/modules/ROOT/pages/ssh-source.adoc
+++ b/docs/modules/ROOT/pages/ssh-source.adoc
@@ -11,11 +11,11 @@ The following table summarizes the configuration options available for the `ssh-
 [width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
 |===
 | Property| Name| Description| Type| Default| Example
-| *host {empty}* *| SSH Host| The SSH Host| string| | 
-| *password {empty}* *| The SSH password| The SSH password to use| string| | 
-| *pollCommand {empty}* *| The Poll command| The command to run while polling the SSH session| string| | `"date"`
-| *port {empty}* *| SSH Port| The SSH Port| string| `22`| 
-| *username {empty}* *| The SSH username| The SSH username to use| string| | 
+| *host {empty}* *| Host| The SSH Host| string| | 
+| *password {empty}* *| Password| The SSH password to use| string| | 
+| *pollCommand {empty}* *| Poll Command| The command to run while polling the SSH session| string| | `"date"`
+| *port {empty}* *| Port| The SSH Port| string| `22`| 
+| *username {empty}* *| Username| The SSH username to use| string| | 
 | delay| Delay| Milliseconds before the next poll| integer| `500`| 
 |===
 
@@ -43,10 +43,10 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: ssh-source
     properties:
-      host: "The SSH Host"
-      password: "The The SSH password"
+      host: "The Host"
+      password: "The Password"
       pollCommand: "date"
-      username: "The The SSH username"
+      username: "The Username"
   sink:
     ref:
       kind: InMemoryChannel
diff --git a/dropbox-sink.kamelet.yaml b/dropbox-sink.kamelet.yaml
index ed060c1..bb072c9 100644
--- a/dropbox-sink.kamelet.yaml
+++ b/dropbox-sink.kamelet.yaml
@@ -31,11 +31,11 @@ spec:
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:password
       clientIdentifier:
-        title: The client identifier
+        title: Client Identifier
         description: Dropbox App client Identifier
         type: string
       remotePath:
-        title: Remote path
+        title: Remote Path
         description: Original file or folder to work with
         type: string
       uploadMode:
diff --git a/dropbox-source.kamelet.yaml b/dropbox-source.kamelet.yaml
index 5a1a3d4..19b1732 100644
--- a/dropbox-source.kamelet.yaml
+++ b/dropbox-source.kamelet.yaml
@@ -20,7 +20,7 @@ spec:
       - query
     properties:
       period:
-        title: Period between polls
+        title: Period between Polls
         description: The interval between fetches to the Dropbox remote path in milliseconds
         type: integer
         default: 10000
@@ -31,15 +31,15 @@ spec:
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:password
       clientIdentifier:
-        title: The client identifier
+        title: Client Identifier
         description: Dropbox App client Identifier
         type: string
       remotePath:
-        title: Remote path
+        title: Remote Path
         description: Original file or folder to work with
         type: string
       query:
-        title: Querys
+        title: Queries
         description: A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set, all files will be matched.
         type: string
   flow:
diff --git a/earthquake-source.kamelet.yaml b/earthquake-source.kamelet.yaml
index 1954140..8afb6e6 100755
--- a/earthquake-source.kamelet.yaml
+++ b/earthquake-source.kamelet.yaml
@@ -16,12 +16,12 @@ spec:
       Get data about current earthquake events happening in the world using the USGS API
     properties:
       period:
-        title: Period between polls
+        title: Period between Polls
         description: The interval between fetches to the earthquake API in milliseconds
         type: integer
         default: 60000
       lookAhead:
-        title: Look-ahead minutes
+        title: Look-ahead Minutes
         description: The amount of minutes to look ahead when starting the integration afresh
         type: integer
         default: 120
diff --git a/elasticsearch-search-source.kamelet.yaml b/elasticsearch-search-source.kamelet.yaml
index 83953bd..3aa8ce3 100755
--- a/elasticsearch-search-source.kamelet.yaml
+++ b/elasticsearch-search-source.kamelet.yaml
@@ -51,7 +51,7 @@ spec:
         type: boolean
         default: true
       hostAddresses:
-        title: Host addresses
+        title: Host Addresses
         description: Comma separated list with ip:port formatted remote transport addresses to use.
         type: string
       indexName:
@@ -59,7 +59,7 @@ spec:
         description: The name of the index to act against.
         type: string
       clusterName:
-        title: ElasticSearch cluster name
+        title: ElasticSearch Cluster Name
         description: Name of the cluster.
         type: string
   dependencies:
diff --git a/exec-sink.kamelet.yaml b/exec-sink.kamelet.yaml
index 78bbadf..ed89525 100644
--- a/exec-sink.kamelet.yaml
+++ b/exec-sink.kamelet.yaml
@@ -15,15 +15,14 @@ spec:
 
       The Kamelet expects the following headers to be set:
 
-      - `args/ `ce-args`: as the args to be set on the executable.
+      - `args` / `ce-args`: as the args to be set on the executable.
 
       If the header won't be set the executable will be run without arguments.
     required:
-      - executable
-      - args
+    - executable
     properties:
       executable:
-        title: Executable command
+        title: Executable Command
         description: The command to execute
         type: string
   flow:
diff --git a/fhir-source.kamelet.yaml b/fhir-source.kamelet.yaml
index 5d48f2f..f6b7cb8 100644
--- a/fhir-source.kamelet.yaml
+++ b/fhir-source.kamelet.yaml
@@ -27,12 +27,12 @@ spec:
         type: string
         default: "/Patient"
       encoding:
-        title: encoding
+        title: Encoding
         description: Encoding to use for all request. Possible values are JSON and XML
         type: string
         default: "JSON"
       fhirVersion:
-        title: Fhir version
+        title: Fhir Version
         description: The FHIR Version to use. There are 6 enums and the value can be one of DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5
         type: string
         default: "R4"
diff --git a/file-watch-source.kamelet.yaml b/file-watch-source.kamelet.yaml
index 415a7d4..c59a51a 100644
--- a/file-watch-source.kamelet.yaml
+++ b/file-watch-source.kamelet.yaml
@@ -17,11 +17,11 @@ spec:
       - events
     properties:
       path:
-        title: The path
+        title: Path to Watch
         description: Path of file or folder to watch
         type: string
       events:
-        title: The events
+        title: Events
         description: The type of events to consume
         type: boolean
         default: "CREATE,MODIFY,DELETE"
diff --git a/github-source.kamelet.yaml b/github-source.kamelet.yaml
index 0adf74c..e63ac56 100644
--- a/github-source.kamelet.yaml
+++ b/github-source.kamelet.yaml
@@ -33,7 +33,7 @@ spec:
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:password
       type:
-        title: Event type
+        title: Event Type
         description: The type of event to consume. One of event, pullRequest, pullRequestComment or tag
         type: string
         default: event
diff --git a/google-mail-source.kamelet.yaml b/google-mail-source.kamelet.yaml
index ed4461c..c1abb1a 100644
--- a/google-mail-source.kamelet.yaml
+++ b/google-mail-source.kamelet.yaml
@@ -25,7 +25,7 @@ spec:
         description: An index for the google mail endpoint
         type: string
       clientId:
-        title: Client Id
+        title: Client ID
         description: Client ID of the gmail application
         type: string
         x-descriptors:
@@ -58,19 +58,19 @@ spec:
         description: Google Mail application name
         type: string
       markAsRead:
-        title: Mark as read
+        title: Mark as Read
         description: Mark the message as read once it has been consumed
         type: boolean
         x-descriptors:
         - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: true
       labels:
-        title: Gmail labels
+        title: Gmail Labels
         description: Comma separated list of labels to take into account
         type: string
         example: "inbox"
       query:
-        title: Gmail query
+        title: Gmail Query
         description: The query to execute on gmail box
         type: string
         example: "is:unread -category:(promotions OR social)"
diff --git a/http-source.kamelet.yaml b/http-source.kamelet.yaml
index 39da2db..bcdc2cf 100644
--- a/http-source.kamelet.yaml
+++ b/http-source.kamelet.yaml
@@ -17,12 +17,12 @@ spec:
     - url
     properties:
       period:
-        title: Period between updates
+        title: Period between Updates
         description: The interval between fetches in milliseconds
         type: integer
         default: 10000
       contentType:
-        title: Content type
+        title: Content Type
         description: The content type accepted for the resource
         type: string
         default: "application/json"
diff --git a/kafka-source.kamelet.yaml b/kafka-source.kamelet.yaml
index 3dd616e..670f95a 100644
--- a/kafka-source.kamelet.yaml
+++ b/kafka-source.kamelet.yaml
@@ -17,7 +17,7 @@ spec:
       - brokers
     properties:
       topic:
-        title: Topic names
+        title: Topic Names
         description: Comma separated list of Kafka topic names
         type: string
       brokers:
diff --git a/minio-sink.kamelet.yaml b/minio-sink.kamelet.yaml
index 78e894c..0dc94d0 100644
--- a/minio-sink.kamelet.yaml
+++ b/minio-sink.kamelet.yaml
@@ -46,7 +46,7 @@ spec:
         type: string
         example: http://localhost:9000
       autoCreateBucket:
-        title: Autocreate bucket
+        title: Autocreate Bucket
         description: Setting the autocreation of the S3 bucket bucketName. 
         type: boolean
         x-descriptors:
diff --git a/minio-source.kamelet.yaml b/minio-source.kamelet.yaml
index da7e82a..f79c9bf 100644
--- a/minio-source.kamelet.yaml
+++ b/minio-source.kamelet.yaml
@@ -23,7 +23,7 @@ spec:
         description: The Minio Bucket name
         type: string
       deleteAfterRead:
-        title: Auto-delete objects
+        title: Auto-delete Objects
         description: Delete objects after consuming them
         type: boolean
         x-descriptors:
@@ -47,7 +47,7 @@ spec:
         type: string
         example: http://localhost:9000
       autoCreateBucket:
-        title: Autocreate bucket
+        title: Autocreate Bucket
         description: Setting the autocreation of the S3 bucket bucketName. 
         type: boolean
         x-descriptors:
diff --git a/nats-source.kamelet.yaml b/nats-source.kamelet.yaml
index ed5ee90..8ceee77 100644
--- a/nats-source.kamelet.yaml
+++ b/nats-source.kamelet.yaml
@@ -17,11 +17,11 @@ spec:
       - servers
     properties:
       topic:
-        title: topic
+        title: Topic
         description: NATS Topic name
         type: string
-      brokers:
-        title: servers
+      servers:
+        title: Servers
         description: Comma separated list of NATS Servers
         type: string
   types:
diff --git a/script/generator/README.md b/script/generator/README.md
new file mode 100644
index 0000000..5f3ff78
--- /dev/null
+++ b/script/generator/README.md
@@ -0,0 +1,8 @@
+# Website Generator
+
+To generate the adoc and svg files for the website (you need `go`):
+
+```
+# From the /tools/generator directory
+go run . ../../ ../../docs/modules/ROOT/
+```
diff --git a/docs/generator/generator.go b/script/generator/generator.go
similarity index 100%
rename from docs/generator/generator.go
rename to script/generator/generator.go
diff --git a/script/generator/go.mod b/script/generator/go.mod
new file mode 100644
index 0000000..9833de2
--- /dev/null
+++ b/script/generator/go.mod
@@ -0,0 +1,10 @@
+module github.com/apache/camel-kamelets/docs/generator
+
+go 1.14
+
+require (
+	github.com/apache/camel-k/pkg/apis/camel v1.4.0
+	k8s.io/apimachinery v0.19.8
+	k8s.io/klog v1.0.0 // indirect
+	sigs.k8s.io/structured-merge-diff/v3 v3.0.0 // indirect
+)
diff --git a/docs/generator/go.sum b/script/generator/go.sum
similarity index 52%
rename from docs/generator/go.sum
rename to script/generator/go.sum
index aead593..2576cd7 100644
--- a/docs/generator/go.sum
+++ b/script/generator/go.sum
@@ -1,42 +1,72 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/apache/camel-k/pkg/apis/camel v1.3.1 h1:8w3oXV1gQbTeazfOGuvYiSy52s3Zx9f3TeFF0pWyJvs=
 github.com/apache/camel-k/pkg/apis/camel v1.3.1/go.mod h1:N3N41+jPM447J8CvnzUcIdGZVvMh1dxP31xDSpZDeUk=
+github.com/apache/camel-k/pkg/apis/camel v1.4.0 h1:iXa6uCVvMUItFejc+7WuLvcRyfQaRYWtg+9pEexgcM8=
+github.com/apache/camel-k/pkg/apis/camel v1.4.0/go.mod h1:uv2KugsT0kfLiRJZS15UqQ3gHsvuhmOax9+0Rs9L1wY=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
 github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
 github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
 github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
 github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -54,31 +84,80 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 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.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 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-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -87,18 +166,31 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 k8s.io/api v0.18.9 h1:7VDtivqwbvLOf8hmXSd/PDSSbpCBq49MELg84EYBYiQ=
 k8s.io/api v0.18.9/go.mod h1:9u/h6sUh6FxfErv7QqetX1EB3yBMIYOBXzdcf0Gf0rc=
+k8s.io/api v0.19.8 h1:U50vBUCb5kc2J483mnITLKfdyoITaC7PnaOJwT7oRRM=
+k8s.io/api v0.19.8/go.mod h1:9TMGoKoidvicOK0LSqj+Mj98pugQycbViPKyZHqutBc=
 k8s.io/apimachinery v0.18.9 h1:3ZABKQx3F3xPWlsGhCfUl8W+JXRRblV6Wo2A3zn0pvY=
 k8s.io/apimachinery v0.18.9/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk=
+k8s.io/apimachinery v0.19.8 h1:MaehcNcx8brsgvMsqspcI0bi22E1np/DACnjf2mhJ5A=
+k8s.io/apimachinery v0.19.8/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q=
 k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
 k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
 k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
+k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
 sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
 sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E=
 sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/script/validator/README.md b/script/validator/README.md
new file mode 100644
index 0000000..5fec61f
--- /dev/null
+++ b/script/validator/README.md
@@ -0,0 +1,8 @@
+# Kamelet Validator
+
+To validate the Kamelets:
+
+```
+# From the /tools/validator directory
+go run . ../../
+```
diff --git a/script/validator/go.mod b/script/validator/go.mod
new file mode 100644
index 0000000..093cb04
--- /dev/null
+++ b/script/validator/go.mod
@@ -0,0 +1,12 @@
+module github.com/apache/camel-kamelets/docs/generator
+
+go 1.14
+
+require (
+	github.com/apache/camel-k/pkg/apis/camel v1.4.0
+	github.com/bbalet/stopwords v1.0.0
+	github.com/pkg/errors v0.9.1
+	k8s.io/apimachinery v0.19.8
+	k8s.io/klog v1.0.0 // indirect
+	sigs.k8s.io/structured-merge-diff/v3 v3.0.0 // indirect
+)
diff --git a/script/validator/go.sum b/script/validator/go.sum
new file mode 100644
index 0000000..286352c
--- /dev/null
+++ b/script/validator/go.sum
@@ -0,0 +1,208 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/apache/camel-k/pkg/apis/camel v1.3.1 h1:8w3oXV1gQbTeazfOGuvYiSy52s3Zx9f3TeFF0pWyJvs=
+github.com/apache/camel-k/pkg/apis/camel v1.3.1/go.mod h1:N3N41+jPM447J8CvnzUcIdGZVvMh1dxP31xDSpZDeUk=
+github.com/apache/camel-k/pkg/apis/camel v1.4.0 h1:iXa6uCVvMUItFejc+7WuLvcRyfQaRYWtg+9pEexgcM8=
+github.com/apache/camel-k/pkg/apis/camel v1.4.0/go.mod h1:uv2KugsT0kfLiRJZS15UqQ3gHsvuhmOax9+0Rs9L1wY=
+github.com/bbalet/stopwords v1.0.0 h1:0TnGycCtY0zZi4ltKoOGRFIlZHv0WqpoIGUsObjztfo=
+github.com/bbalet/stopwords v1.0.0/go.mod h1:sAWrQoDMfqARGIn4s6dp7OW7ISrshUD8IP2q3KoqPjc=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+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/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
+github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
+github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
+github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+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 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+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.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
+golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+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-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
+gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+k8s.io/api v0.18.9 h1:7VDtivqwbvLOf8hmXSd/PDSSbpCBq49MELg84EYBYiQ=
+k8s.io/api v0.18.9/go.mod h1:9u/h6sUh6FxfErv7QqetX1EB3yBMIYOBXzdcf0Gf0rc=
+k8s.io/api v0.19.8 h1:U50vBUCb5kc2J483mnITLKfdyoITaC7PnaOJwT7oRRM=
+k8s.io/api v0.19.8/go.mod h1:9TMGoKoidvicOK0LSqj+Mj98pugQycbViPKyZHqutBc=
+k8s.io/apimachinery v0.18.9 h1:3ZABKQx3F3xPWlsGhCfUl8W+JXRRblV6Wo2A3zn0pvY=
+k8s.io/apimachinery v0.18.9/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk=
+k8s.io/apimachinery v0.19.8 h1:MaehcNcx8brsgvMsqspcI0bi22E1np/DACnjf2mhJ5A=
+k8s.io/apimachinery v0.19.8/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q=
+k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
+k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E=
+sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/script/validator/validator.go b/script/validator/validator.go
new file mode 100644
index 0000000..6097385
--- /dev/null
+++ b/script/validator/validator.go
@@ -0,0 +1,239 @@
+package main
+
+import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"path"
+	"path/filepath"
+	"sort"
+	"strings"
+
+	camel "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/bbalet/stopwords"
+	perrors "github.com/pkg/errors"
+	"k8s.io/apimachinery/pkg/api/equality"
+	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/runtime/schema"
+	"k8s.io/apimachinery/pkg/runtime/serializer"
+	"k8s.io/apimachinery/pkg/util/json"
+	"k8s.io/apimachinery/pkg/util/yaml"
+)
+
+func main() {
+	if len(os.Args) != 2 {
+		println("usage: validator kamelets-path")
+		os.Exit(1)
+	}
+
+	dir := os.Args[1]
+
+	kamelets := listKamelets(dir)
+
+	errors := verifyFileNames(kamelets)
+	errors = append(errors, verifyKameletType(kamelets)...)
+	errors = append(errors, verifyAnnotations(kamelets)...)
+	errors = append(errors, verifyParameters(kamelets)...)
+	errors = append(errors, verifyInvalidContent(kamelets)...)
+
+	for _, err := range errors {
+		fmt.Printf("ERROR: %v\n", err)
+	}
+	if len(errors) > 0 {
+		os.Exit(1)
+	}
+}
+
+func verifyInvalidContent(kamelets []KameletInfo) (errors []error) {
+	for _, kamelet := range kamelets {
+		ser, err := json.Marshal(&kamelet.Kamelet)
+		if err != nil {
+			errors = append(errors, perrors.Wrapf(err, "cannot marshal kamelet %q", kamelet.Name))
+			continue
+		}
+		var unstr unstructured.Unstructured
+		err = json.Unmarshal(ser, &unstr)
+		if err != nil {
+			errors = append(errors, perrors.Wrapf(err, "cannot unmarshal kamelet %q", kamelet.Name))
+			continue
+		}
+
+		file, err := ioutil.ReadFile(kamelet.FileName)
+		if err != nil {
+			errors = append(errors, perrors.Wrapf(err, "cannot load kamelet %q", kamelet.Name))
+			continue
+		}
+		jsonFile, err := yaml.ToJSON(file)
+		if err != nil {
+			errors = append(errors, perrors.Wrapf(err, "cannot convert kamelet %q to JSON", kamelet.Name))
+			continue
+		}
+		unstrFile := unstructured.Unstructured{}
+		err = json.Unmarshal(jsonFile, &unstrFile)
+		if err != nil {
+			errors = append(errors, perrors.Wrapf(err, "cannot unmarshal kamelet file %q", kamelet.Name))
+			continue
+		}
+
+		if !equality.Semantic.DeepDerivative(unstrFile, unstr) {
+			errors = append(errors, fmt.Errorf("kamelet %q contains invalid content that is not supported by the Kamelet schema", kamelet.Name))
+		}
+	}
+	return errors
+}
+
+func verifyParameters(kamelets []KameletInfo) (errors []error) {
+	for _, kamelet := range kamelets {
+		if kamelet.Spec.Definition == nil {
+			errors = append(errors, fmt.Errorf("kamelet %q does not contain the JSON schema definition", kamelet.Name))
+			continue
+		}
+		if kamelet.Spec.Definition.Title == "" {
+			errors = append(errors, fmt.Errorf("kamelet %q does not contain title", kamelet.Name))
+		}
+		if kamelet.Spec.Definition.Description == "" {
+			errors = append(errors, fmt.Errorf("kamelet %q does not contain description", kamelet.Name))
+		}
+		for k, p := range kamelet.Spec.Definition.Properties {
+			if p.Type == "" {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain type", k, kamelet.Name))
+			}
+			if p.Title == "" {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain title", k, kamelet.Name))
+			} else {
+				cleanTitle := stopwords.CleanString(p.Title, "en", false)
+				goodWords := strings.Split(cleanTitle, " ")
+				check := make(map[string]bool, len(goodWords))
+				for _, w := range goodWords {
+					check[strings.ToLower(w)] = true
+				}
+				words := strings.Split(p.Title, " ")
+				for _, w := range words {
+					if !check[strings.ToLower(w)] {
+						continue
+					}
+					if len(w) > 0 && strings.ToUpper(w[0:1]) != w[0:1] {
+						errors = append(errors, fmt.Errorf("property %q in kamelet %q does has non-capitalized word in the title: %q", k, kamelet.Name, w))
+					}
+				}
+			}
+			if strings.HasPrefix(p.Title, "The ") {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"The \"", k, kamelet.Name))
+			}
+			if strings.HasPrefix(p.Title, "A ") {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"A \"", k, kamelet.Name))
+			}
+			if strings.HasPrefix(p.Title, "An ") {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q has a title starting with \"An \"", k, kamelet.Name))
+			}
+			if p.Description == "" {
+				errors = append(errors, fmt.Errorf("property %q in kamelet %q does not contain a description", k, kamelet.Name))
+			}
+		}
+		for _, k := range kamelet.Spec.Definition.Required {
+			if _, ok := kamelet.Spec.Definition.Properties[k]; !ok {
+				errors = append(errors, fmt.Errorf("required property %q in kamelet %q is not defined", k, kamelet.Name))
+			}
+		}
+	}
+	return errors
+}
+
+func verifyAnnotations(kamelets []KameletInfo) (errors []error) {
+	for _, kamelet := range kamelets {
+		if icon := kamelet.Annotations["camel.apache.org/kamelet.icon"]; icon == "" {
+			errors = append(errors, fmt.Errorf("kamelet %q does not contain the camel.apache.org/kamelet.icon annotation", kamelet.Name))
+		}
+		expectedProvider := "Apache Software Foundation"
+		if provider := kamelet.Annotations["camel.apache.org/provider"]; provider != expectedProvider {
+			errors = append(errors, fmt.Errorf("kamelet %q does not contain the right value for the camel.apache.org/provider annotation: expected %q, found %q", kamelet.Name, expectedProvider, provider))
+		}
+	}
+	return errors
+}
+
+func verifyKameletType(kamelets []KameletInfo) (errors []error) {
+	for _, kamelet := range kamelets {
+		tp := kamelet.Labels["camel.apache.org/kamelet.type"]
+		switch tp {
+		case "source":
+			fallthrough
+		case "sink":
+			fallthrough
+		case "action":
+			expectedSuffix := fmt.Sprintf("-%s", tp)
+			if !strings.HasSuffix(kamelet.Name, expectedSuffix) {
+				errors = append(errors, fmt.Errorf("name of kamelet %q does not end with %q", kamelet.Name, expectedSuffix))
+			}
+		default:
+			errors = append(errors, fmt.Errorf("kamelet %q contains an invalid value for the camel.apache.org/kamelet.type label: %q", kamelet.Name, tp))
+		}
+	}
+	return errors
+}
+
+func verifyFileNames(kamelets []KameletInfo) (errors []error) {
+	for _, kamelet := range kamelets {
+		if kamelet.Name != strings.TrimSuffix(path.Base(kamelet.FileName), ".kamelet.yaml") {
+			errors = append(errors, fmt.Errorf("file %q does not match the name of the contained kamelet: %q", kamelet.FileName, kamelet.Name))
+		}
+	}
+	return errors
+}
+
+func listKamelets(dir string) []KameletInfo {
+	scheme := runtime.NewScheme()
+	err := camel.AddToScheme(scheme)
+	handleGeneralError("cannot to add camel APIs to scheme", err)
+
+	codecs := serializer.NewCodecFactory(scheme)
+	gv := camel.SchemeGroupVersion
+	gvk := schema.GroupVersionKind{
+		Group:   gv.Group,
+		Version: gv.Version,
+		Kind:    "Kamelet",
+	}
+	decoder := codecs.UniversalDecoder(gv)
+
+	kamelets := make([]KameletInfo, 0)
+	files, err := ioutil.ReadDir(dir)
+	filesSorted := make([]string, 0)
+	handleGeneralError(fmt.Sprintf("cannot list dir %q", dir), err)
+	for _, fd := range files {
+		if !fd.IsDir() && strings.HasSuffix(fd.Name(), ".kamelet.yaml") {
+			fullName := filepath.Join(dir, fd.Name())
+			filesSorted = append(filesSorted, fullName)
+		}
+	}
+	sort.Strings(filesSorted)
+	for _, fileName := range filesSorted {
+		content, err := ioutil.ReadFile(fileName)
+		handleGeneralError(fmt.Sprintf("cannot read file %q", fileName), err)
+
+		json, err := yaml.ToJSON(content)
+		handleGeneralError(fmt.Sprintf("cannot convert file %q to JSON", fileName), err)
+
+		kamelet := camel.Kamelet{}
+		_, _, err = decoder.Decode(json, &gvk, &kamelet)
+		handleGeneralError(fmt.Sprintf("cannot unmarshal file %q into Kamelet", fileName), err)
+		kameletInfo := KameletInfo{
+			Kamelet:  kamelet,
+			FileName: fileName,
+		}
+		kamelets = append(kamelets, kameletInfo)
+	}
+	return kamelets
+}
+
+type KameletInfo struct {
+	camel.Kamelet
+	FileName string
+}
+
+func handleGeneralError(desc string, err error) {
+	if err != nil {
+		fmt.Printf("%s: %+v\n", desc, err)
+		os.Exit(2)
+	}
+}
diff --git a/ssh-source.kamelet.yaml b/ssh-source.kamelet.yaml
index b0533b0..773133e 100644
--- a/ssh-source.kamelet.yaml
+++ b/ssh-source.kamelet.yaml
@@ -20,22 +20,22 @@ spec:
       - pollCommand
     properties:
       host:
-        title: SSH Host
+        title: Host
         description: The SSH Host
         type: string
       port:
-        title: SSH Port
+        title: Port
         description: The SSH Port
         type: string
         default: 22
       username:
-        title: The SSH username
+        title: Username
         description: The SSH username to use
         type: string
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:password
       password:
-        title: The SSH password
+        title: Password
         description: The SSH password to use
         type: string
         x-descriptors:
@@ -46,7 +46,7 @@ spec:
         type: integer
         default: 500
       pollCommand:
-        title: The Poll command
+        title: Poll Command
         description: The command to run while polling the SSH session
         type: string
         example: date
diff --git a/camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage.kamelet.yaml b/twitter-directmessage-source.kamelet.yaml
old mode 100644
new mode 100755
similarity index 100%
rename from camel-kamelets-catalog/src/main/resources/kamelets/twitter-directmessage.kamelet.yaml
rename to twitter-directmessage-source.kamelet.yaml
diff --git a/camel-kamelets-catalog/src/main/resources/kamelets/twitter-search.kamelet.yaml b/twitter-search-source.kamelet.yaml
old mode 100644
new mode 100755
similarity index 100%
rename from camel-kamelets-catalog/src/main/resources/kamelets/twitter-search.kamelet.yaml
rename to twitter-search-source.kamelet.yaml
diff --git a/camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline.kamelet.yaml b/twitter-timeline-source.kamelet.yaml
old mode 100644
new mode 100755
similarity index 100%
rename from camel-kamelets-catalog/src/main/resources/kamelets/twitter-timeline.kamelet.yaml
rename to twitter-timeline-source.kamelet.yaml