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 2020/05/13 08:46:39 UTC
[camel-k-examples] branch master updated (dc8b4e2 -> aad7349)
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git.
from dc8b4e2 Merge pull request #2 from nicolaferraro/katacoda
new 34425ac Add an API example
new d492fbf Add new modelines and fix instructions
new e7b21e9 Fix test
new aad7349 Merge pull request #3 from nicolaferraro/api
The 14 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:
02-serverless-api/API.java | 44 +++++
02-serverless-api/openapi.yaml | 53 ++++++
02-serverless-api/readme.didact.md | 273 ++++++++++++++++++++++++++++
{01-basic => 02-serverless-api}/readme.md | 0
02-serverless-api/s3.properties | 15 ++
02-serverless-api/test/MinioCustomizer.java | 36 ++++
02-serverless-api/test/crud.feature | 65 +++++++
02-serverless-api/test/minio.properties | 15 ++
02-serverless-api/test/minio.yaml | 71 ++++++++
02-serverless-api/test/yaks-config.yaml | 14 ++
README.md | 1 +
11 files changed, 587 insertions(+)
create mode 100755 02-serverless-api/API.java
create mode 100644 02-serverless-api/openapi.yaml
create mode 100644 02-serverless-api/readme.didact.md
copy {01-basic => 02-serverless-api}/readme.md (100%)
create mode 100644 02-serverless-api/s3.properties
create mode 100644 02-serverless-api/test/MinioCustomizer.java
create mode 100644 02-serverless-api/test/crud.feature
create mode 100644 02-serverless-api/test/minio.properties
create mode 100644 02-serverless-api/test/minio.yaml
create mode 100644 02-serverless-api/test/yaks-config.yaml
[camel-k-examples] 08/14: Merge pull request #1 from
nicolaferraro/first
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit dc2f9228f1840702a0ea0874e554666671699662
Merge: 5060e92 d5ddfb9
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 14:45:45 2020 +0200
Merge pull request #1 from nicolaferraro/first
First basic example and general format
.gitignore | 9 +
.vscode/extensions.json | 6 +
01-basic/Basic.java | 34 +
01-basic/Routing.java | 63 ++
01-basic/readme.didact.md | 293 +++++++
01-basic/readme.md | 1 +
01-basic/routing.properties | 22 +
KEYS | 1773 +++++++++++++++++++++++++++++++++++++++++++
LICENSE | 203 +++++
NOTICE | 11 +
README.md | 48 ++
11 files changed, 2463 insertions(+)
[camel-k-examples] 09/14: Add online version of the quickstart
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 8bbf8e73543d06287d0c979f1cd70803978a8704
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 15:35:38 2020 +0200
Add online version of the quickstart
---
01-basic/readme.didact.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/01-basic/readme.didact.md b/01-basic/readme.didact.md
index 92667b1..b41313a 100644
--- a/01-basic/readme.didact.md
+++ b/01-basic/readme.didact.md
@@ -5,6 +5,14 @@ features that you should know before trying to develop more complex examples.
You can find more information about Apache Camel and Apache Camel K on the [official Camel website](https://camel.apache.org).
+## Available online
+
+If you don't want to setup your own Kubernetes cluster or your IDE and you just want to get started quickly, this example is also available online in the following places:
+
+- [Camel K Basic Example at learn.openshift.com](https://learn.openshift.com/middleware/courses/middleware-camelk/camel-k-basic).
+
+You don't need to follow the remainder of this readme if you choose to follow the online version.
+
## Before you begin
Read the general instructions in the [root README.md file](../README.md) for setting up your environment and the Kubernetes cluster before looking at this example.
[camel-k-examples] 03/14: Add license files
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 9e9ea44ba1393f78e971c1dcd5d502743862a068
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Mon Apr 20 14:55:31 2020 +0200
Add license files
---
01-basic/Basic.java | 17 +++++++++++++++++
01-basic/Routing.java | 17 +++++++++++++++++
01-basic/routing.properties | 17 +++++++++++++++++
3 files changed, 51 insertions(+)
diff --git a/01-basic/Basic.java b/01-basic/Basic.java
index 09a5c7c..fb060a7 100755
--- a/01-basic/Basic.java
+++ b/01-basic/Basic.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
// camel-k: language=java
import org.apache.camel.builder.RouteBuilder;
diff --git a/01-basic/Routing.java b/01-basic/Routing.java
index 26403a5..9497060 100755
--- a/01-basic/Routing.java
+++ b/01-basic/Routing.java
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
// camel-k: language=java
import java.util.Random;
diff --git a/01-basic/routing.properties b/01-basic/routing.properties
index 7704ba9..faf3fca 100644
--- a/01-basic/routing.properties
+++ b/01-basic/routing.properties
@@ -1,3 +1,20 @@
+# ---------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ---------------------------------------------------------------------------
+
# List of items for random generation
items=*radiator *engine door window
[camel-k-examples] 12/14: Add new modelines and fix instructions
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit d492fbf77aba9e2fcbe2676c69aea3c8281afd67
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Wed May 13 00:56:41 2020 +0200
Add new modelines and fix instructions
---
02-serverless-api/API.java | 2 +-
02-serverless-api/readme.didact.md | 20 ++++++++++----------
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/02-serverless-api/API.java b/02-serverless-api/API.java
index 22d6b40..0464b94 100755
--- a/02-serverless-api/API.java
+++ b/02-serverless-api/API.java
@@ -1,4 +1,4 @@
-// camel-k: language=java
+// camel-k: language=java open-api=openapi.yaml dependency=camel-openapi-java
import org.apache.camel.builder.AggregationStrategies;
import org.apache.camel.builder.RouteBuilder;
diff --git a/02-serverless-api/readme.didact.md b/02-serverless-api/readme.didact.md
index 1560cc5..b40ad94 100644
--- a/02-serverless-api/readme.didact.md
+++ b/02-serverless-api/readme.didact.md
@@ -125,7 +125,7 @@ you can use an existing S3 bucket of your own or you can set up a local S3 compa
The `test` directory contains an all-in-one configuration file for creating a Minio backend that will provide a S3 compatible protocol
for storing the objects.
-Open the ([test/minio.yaml](didact://?commandId=vscode.open&projectFilePath=test/minio.yaml "Opens the Minio configuration"){.didact}) file to check its content before applying.
+Open the ([test/minio.yaml](didact://?commandId=vscode.open&projectFilePath=02-serverless-api/test/minio.yaml "Opens the Minio configuration"){.didact}) file to check its content before applying.
To create the minio backend, just apply the provided file:
@@ -141,12 +141,12 @@ That's enough to have a test object storage to use with the API integration.
If you have a S3 bucket and you want to use it instead of the test backend, you can do it. The only
things that you need to provide are a **AWS Access Key ID and Secret** that you can obtain from the Amazon AWS console.
-Edit the ([s3.properties](didact://?commandId=vscode.open&projectFilePath=s3.properties "Opens the S3 configuration"){.didact}) to set the right value for the properties `camel.component.aws-s3.access-key` and `camel.component.aws-s3.secret-key`.
+Edit the ([s3.properties](didact://?commandId=vscode.open&projectFilePath=02-serverless-api/s3.properties "Opens the S3 configuration"){.didact}) to set the right value for the properties `camel.component.aws-s3.access-key` and `camel.component.aws-s3.secret-key`.
Those properties will be automatically injected into the Camel `aw3-s3` component.
## 3. Designing the API
-An object store REST API is provided in the [openapi.yaml](didact://?commandId=vscode.open&projectFilePath=openapi.yaml "Opens the OpenAPI definition"){.didact} file.
+An object store REST API is provided in the [openapi.yaml](didact://?commandId=vscode.open&projectFilePath=02-serverless-api/openapi.yaml "Opens the OpenAPI definition"){.didact} file.
It contains operations for:
- Listing the name of the contained objects
@@ -159,27 +159,27 @@ The file can be edited manually or better using an online editor, such as [Apicu
## 4. Running the API integration
The endpoints defined in the API can be implemented in a Camel K integration using a `direct:<operationId>` endpoint.
-This has been implemented in the [API.java](didact://?commandId=vscode.open&projectFilePath=API.java "Opens the integration file"){.didact} file.
+This has been implemented in the [API.java](didact://?commandId=vscode.open&projectFilePath=02-serverless-api/API.java "Opens the integration file"){.didact} file.
To run the integration, you need to link it to the proper configuration, that depends on what configuration you've chosen.
### 4.1 [Alternative 1] Using the test Minio server
-As alternative, to connect the integration to the **test Minio server** deployed before using the [test/MinioCustomizer.java](didact://?commandId=vscode.open&projectFilePath=test/MinioCustomizer.java "Opens the customizer file"){.didact} class:
+As alternative, to connect the integration to the **test Minio server** deployed before using the [test/MinioCustomizer.java](didact://?commandId=vscode.open&projectFilePath=02-serverless-api/test/MinioCustomizer.java "Opens the customizer file"){.didact} class:
```
-kamel run --name api test/MinioCustomizer.java API.java --property-file test/minio.properties --open-api openapi.yaml -d camel-openapi-java
+kamel run API.java --source test/MinioCustomizer.java --property-file test/minio.properties
```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20--name%20api%20test/MinioCustomizer.java%20API.java%20--property-file%20test/minio.properties%20--open-api%20openapi.yaml%20-d%20camel-openapi-java&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20API.java%20--source%20test%2FMinioCustomizer.java%20--property-file%20test%2Fminio.properties&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
### 4.2 [Alternative 2] Using the S3 service
To connect the integration to the **AWS S3 service**:
```
-kamel run API.java --property-file s3.properties --open-api openapi.yaml -d camel-openapi-java
+kamel run API.java --property-file s3.properties
```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20API.java%20--property-file%20s3.properties%20--open-api%20openapi.yaml%20-d%20camel-openapi-java&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20API.java%20--property-file%20s3.properties&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
## 5. Using the API
@@ -264,7 +264,7 @@ curl -i $URL/
([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20$URL&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
-## 8. Uninstall
+## 6. Uninstall
To cleanup everything, execute the following command:
[camel-k-examples] 10/14: Merge pull request #2 from
nicolaferraro/katacoda
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit dc8b4e28da8106206d9585ce4f80be6ca1c48618
Merge: dc2f922 8bbf8e7
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 16:23:28 2020 +0200
Merge pull request #2 from nicolaferraro/katacoda
Add online version of the quickstart
01-basic/readme.didact.md | 8 ++++++++
1 file changed, 8 insertions(+)
[camel-k-examples] 11/14: Add an API example
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 34425ac930604be3d14e19d6bcd0b05d33d8b6a7
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Wed May 13 00:43:57 2020 +0200
Add an API example
---
02-serverless-api/API.java | 44 +++++
02-serverless-api/openapi.yaml | 53 ++++++
02-serverless-api/readme.didact.md | 273 ++++++++++++++++++++++++++++
02-serverless-api/readme.md | 1 +
02-serverless-api/s3.properties | 15 ++
02-serverless-api/test/MinioCustomizer.java | 36 ++++
02-serverless-api/test/crud.feature | 65 +++++++
02-serverless-api/test/minio.properties | 15 ++
02-serverless-api/test/minio.yaml | 71 ++++++++
02-serverless-api/test/yaks-config.yaml | 14 ++
README.md | 1 +
11 files changed, 588 insertions(+)
diff --git a/02-serverless-api/API.java b/02-serverless-api/API.java
new file mode 100755
index 0000000..22d6b40
--- /dev/null
+++ b/02-serverless-api/API.java
@@ -0,0 +1,44 @@
+// camel-k: language=java
+
+import org.apache.camel.builder.AggregationStrategies;
+import org.apache.camel.builder.RouteBuilder;
+
+public class API extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+
+ // All endpoints starting from "direct:..." reference an operationId defined
+ // in the "openapi.yaml" file.
+
+ // List the object names available in the S3 bucket
+ from("direct:list")
+ .to("aws-s3://{{api.bucket}}?operation=listObjects")
+ .transform().simple("${body.objectSummaries}")
+ .split(simple("${body}"), AggregationStrategies.groupedBody())
+ .transform().simple("${body.key}")
+ .end()
+ .marshal().json();
+
+
+ // Get an object from the S3 bucket
+ from("direct:get")
+ .setHeader("CamelAwsS3Key", simple("${header.name}"))
+ .to("aws-s3://{{api.bucket}}?operation=getObject")
+ .setHeader("Content-Type", simple("${body.objectMetadata.contentType}"))
+ .transform().simple("${body.objectContent}");
+
+
+ // Upload a new object into the S3 bucket
+ from("direct:create")
+ .setHeader("CamelAwsS3Key", simple("${header.name}"))
+ .to("aws-s3://{{api.bucket}}");
+
+
+ // Delete an object from the S3 bucket
+ from("direct:delete")
+ .setHeader("CamelAwsS3Key", simple("${header.name}"))
+ .to("aws-s3://{{api.bucket}}?operation=deleteObject")
+ .setBody().constant("");
+
+ }
+}
diff --git a/02-serverless-api/openapi.yaml b/02-serverless-api/openapi.yaml
new file mode 100644
index 0000000..42e9f6e
--- /dev/null
+++ b/02-serverless-api/openapi.yaml
@@ -0,0 +1,53 @@
+---
+openapi: 3.0.2
+info:
+ title: Camel K Object API
+ version: 1.0.0
+ description: A CRUD API for an object store
+paths:
+ /:
+ get:
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ type: string
+ description: Object list
+ operationId: list
+ summary: List the objects
+ /{name}:
+ get:
+ responses:
+ "200":
+ content:
+ application/octet-stream: {}
+ description: The object content
+ operationId: get
+ summary: Get the content of an object
+ put:
+ requestBody:
+ description: The object content
+ content:
+ application/octet-stream: {}
+ required: true
+ responses:
+ "200":
+ description: The object has been created
+ operationId: create
+ summary: Save an object
+ delete:
+ responses:
+ "204":
+ description: Object has been deleted
+ operationId: delete
+ summary: Delete an object
+ parameters:
+ - name: name
+ description: Name of the object
+ schema:
+ type: string
+ in: path
+ required: true
diff --git a/02-serverless-api/readme.didact.md b/02-serverless-api/readme.didact.md
new file mode 100644
index 0000000..1560cc5
--- /dev/null
+++ b/02-serverless-api/readme.didact.md
@@ -0,0 +1,273 @@
+# Camel K Serverless API Example
+
+This example demonstrates how to write an API based Camel K integration, from the design of the OpenAPI definition
+to the implementation of the specific endpoints up to the deployment as serverless API in Knative.
+
+In this specific example, the API enables users to store generic objects, such as files, in a backend system, allowing all CRUD operation on them.
+
+The backend is an Amazon AWS S3 bucket that you might provide. In alternative, you'll be given instructions on how to
+create a simple [Minio](https://min.io/) backend, which uses a S3 compatible protocol.
+
+## Before you begin
+
+Read the general instructions in the [root README.md file](../README.md) for setting up your environment and the Kubernetes cluster before looking at this example.
+
+Make sure you've read the [installation instructions](https://camel.apache.org/camel-k/latest/installation/installation.html) for your specific
+cluster before starting the example.
+
+You should open this file with [Didact](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-didact) if available on your IDE.
+
+## Requirements
+
+<a href='didact://?commandId=vscode.didact.validateAllRequirements' title='Validate all requirements!'><button>Validate all Requirements at Once!</button></a>
+
+**Kubectl CLI**
+
+The Kubernetes `kubectl` CLI tool will be used to interact with the Kubernetes cluster.
+
+[Check if the Kubectl CLI is installed](didact://?commandId=vscode.didact.cliCommandSuccessful&text=kubectl-requirements-status$$kubectl%20help&completion=Checked%20kubectl%20tool%20availability "Tests to see if `kubectl help` returns a 0 return code"){.didact}
+
+*Status: unknown*{#kubectl-requirements-status}
+
+**Connection to a Kubernetes cluster**
+
+You need to connect to a Kubernetes cluster in order to run the example.
+
+[Check if you're connected to a Kubernetes cluster](didact://?commandId=vscode.didact.cliCommandSuccessful&text=cluster-requirements-status$$kubectl%20get%20pod&completion=Checked%20Kubernetes%20connection "Tests to see if `kubectl get pod` returns a 0 return code"){.didact}
+
+*Status: unknown*{#cluster-requirements-status}
+
+**Apache Camel K CLI ("kamel")**
+
+You need the Apache Camel K CLI ("kamel") in order to access all Camel K features.
+
+[Check if the Apache Camel K CLI ("kamel") is installed](didact://?commandId=vscode.didact.requirementCheck&text=kamel-requirements-status$$kamel%20version$$Camel%20K%20Client&completion=Checked%20if%20Camel%20K%20CLI%20is%20available%20on%20this%20system. "Tests to see if `kamel version` returns a result"){.didact}
+
+*Status: unknown*{#kamel-requirements-status}
+
+**Knative installed on the cluster**
+
+The cluster also needs to have Knative installed and working. Refer to the [official Knative documentation](https://knative.dev/docs/install/) for information on how to install it in your cluster.
+
+[Check if the Knative is installed](didact://?commandId=vscode.didact.requirementCheck&text=kservice-project-check$$kubectl%20api-resources%20--api-group=serving.knative.dev$$kservice%2Cksvc&completion=Verified%20Knative%20services%20installation. "Verifies if Knative is installed"){.didact}
+
+*Status: unknown*{#kservice-project-check}
+
+### Optional Requirements
+
+The following requirements are optional. They don't prevent the execution of the demo, but may make it easier to follow.
+
+**VS Code Extension Pack for Apache Camel**
+
+The VS Code Extension Pack for Apache Camel provides a collection of useful tools for Apache Camel K developers,
+such as code completion and integrated lifecycle management. They are **recommended** for the tutorial, but they are **not**
+required.
+
+You can install it from the VS Code Extensions marketplace.
+
+[Check if the VS Code Extension Pack for Apache Camel by Red Hat is installed](didact://?commandId=vscode.didact.extensionRequirementCheck&text=extension-requirement-status$$redhat.apache-camel-extension-pack&completion=Camel%20extension%20pack%20is%20available%20on%20this%20system. "Checks the VS Code workspace to make sure the extension pack is installed"){.didact}
+
+*Status: unknown*{#extension-requirement-status}
+
+## 1. Preparing the namespace
+
+Let's open a terminal and go to the example directory:
+
+```
+cd 02-serverless-api
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$cd%2002-serverless-api&completion=Executed%20command. "Opens a new terminal and sends the command above"){.didact})
+
+
+We're going to create a namespace named `camel-api` for running the example. To create it, execute the following command:
+
+```
+kubectl create namespace camel-api
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20create%20namespace%20camel-api&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+
+Now we can set the `camel-api` namespace as default namespace for the following commands:
+
+```
+kubectl config set-context --current --namespace=camel-api
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20config%20set-context%20--current%20--namespace%3Dcamel-api&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+You need to install Camel K in the `camel-api` namespace (or globally in the whole cluster).
+In many settings (e.g. OpenShift, CRC), it's sufficient to execute the following command to install Camel K:
+
+```
+kamel install
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20install&completion=Installing%20Camel%20K. "Opens a new terminal and sends the command above"){.didact})
+
+NOTE: The `kamel install` command requires some prerequisites to be successful in some situations, e.g. you need to enable the registry addon on Minikube. Refer to the [Camel K install guide](https://camel.apache.org/camel-k/latest/installation/installation.html) for cluster-specific instructions.
+
+To check that Camel K is installed we'll retrieve the IntegrationPlatform object from the namespace:
+
+```
+kubectl get integrationplatform
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20integrationplatform&completion=Executed%20Command. "Opens a new terminal and sends the command above"){.didact})
+
+You should find an IntegrationPlatform in status `Ready`.
+
+You can now proceed to the next section.
+
+## 2. Configuring the object storage backend
+
+You have two alternative options for setting up the S3 backend that will be used to store the objects via the Camel K API:
+you can use an existing S3 bucket of your own or you can set up a local S3 compatible object storage.
+
+### 2.1 [Alternative 1] I don't have a S3 bucket: let's install a Minio backend
+
+The `test` directory contains an all-in-one configuration file for creating a Minio backend that will provide a S3 compatible protocol
+for storing the objects.
+
+Open the ([test/minio.yaml](didact://?commandId=vscode.open&projectFilePath=test/minio.yaml "Opens the Minio configuration"){.didact}) file to check its content before applying.
+
+To create the minio backend, just apply the provided file:
+
+```
+kubectl apply -f test/minio.yaml
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20test/minio.yaml&completion=Created%20Minio%20backend. "Opens a new terminal and sends the command above"){.didact})
+
+That's enough to have a test object storage to use with the API integration.
+
+### 2.1 [Alternative 2] I have a S3 bucket
+
+If you have a S3 bucket and you want to use it instead of the test backend, you can do it. The only
+things that you need to provide are a **AWS Access Key ID and Secret** that you can obtain from the Amazon AWS console.
+
+Edit the ([s3.properties](didact://?commandId=vscode.open&projectFilePath=s3.properties "Opens the S3 configuration"){.didact}) to set the right value for the properties `camel.component.aws-s3.access-key` and `camel.component.aws-s3.secret-key`.
+Those properties will be automatically injected into the Camel `aw3-s3` component.
+
+## 3. Designing the API
+
+An object store REST API is provided in the [openapi.yaml](didact://?commandId=vscode.open&projectFilePath=openapi.yaml "Opens the OpenAPI definition"){.didact} file.
+
+It contains operations for:
+- Listing the name of the contained objects
+- Creating a new object
+- Getting the content of an object
+- Deleting an object
+
+The file can be edited manually or better using an online editor, such as [Apicurio](https://studio.apicur.io/).
+
+## 4. Running the API integration
+
+The endpoints defined in the API can be implemented in a Camel K integration using a `direct:<operationId>` endpoint.
+This has been implemented in the [API.java](didact://?commandId=vscode.open&projectFilePath=API.java "Opens the integration file"){.didact} file.
+
+To run the integration, you need to link it to the proper configuration, that depends on what configuration you've chosen.
+
+### 4.1 [Alternative 1] Using the test Minio server
+
+As alternative, to connect the integration to the **test Minio server** deployed before using the [test/MinioCustomizer.java](didact://?commandId=vscode.open&projectFilePath=test/MinioCustomizer.java "Opens the customizer file"){.didact} class:
+
+```
+kamel run --name api test/MinioCustomizer.java API.java --property-file test/minio.properties --open-api openapi.yaml -d camel-openapi-java
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20--name%20api%20test/MinioCustomizer.java%20API.java%20--property-file%20test/minio.properties%20--open-api%20openapi.yaml%20-d%20camel-openapi-java&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
+
+### 4.2 [Alternative 2] Using the S3 service
+
+To connect the integration to the **AWS S3 service**:
+
+```
+kamel run API.java --property-file s3.properties --open-api openapi.yaml -d camel-openapi-java
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20API.java%20--property-file%20s3.properties%20--open-api%20openapi.yaml%20-d%20camel-openapi-java&completion=Integration%20run. "Opens a new terminal and sends the command above"){.didact})
+
+
+## 5. Using the API
+
+After running the integration API, you should be able to call the API endpoints to check its behavior.
+
+Make sure the integration is running, by checking its status:
+
+```
+kubectl get integrations
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20integrations&completion=Getting%20running%20integrations. "Opens a new terminal and sends the command above"){.didact})
+
+An integration named `api` should be present in the list and it should be in status `Running`. There's also a `kamel get` command which is an alternative way to list all running integrations.
+
+NOTE: it may take some time, the first time you run the integration, for it to reach the `Running` state.
+
+After the integraiton has reached the running state, you can get the route corresponding to it via the following command:
+
+```
+URL=$(kubectl get routes.serving.knative.dev api -o jsonpath='{.status.url}')
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$URL%3D%24%28kubectl%20get%20routes.serving.knative.dev%20api%20-o%20jsonpath%3D%27%7B.status.url%7D%27%29&completion=Getting%20route. "Opens a new terminal and sends the command above"){.didact})
+
+You can print the route to check if it's correct:
+
+```
+echo $URL
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$echo%20$URL&completion=Print%20route. "Opens a new terminal and sends the command above"){.didact})
+
+NOTE: ensure that you've followed all the instructions in the Knative documentation during installation, especially the DNS part is fundamental for being able to contact the API.
+
+You can now play with it! What follows is a list of commands that you can run to use the API and check if it's working.
+
+Get the list of objects:
+```
+curl -i $URL/
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20$URL&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+Looking at the pods, you should find a pod corresponding to the API integration:
+
+```
+kubectl get pods
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20pods&completion=Getting%20running%20pods. "Opens a new terminal and sends the command above"){.didact})
+
+If you wait **at least one minute** without invoking the API, you'll find that the pod will disappear.
+Calling the API again will make the pod appear to serve the request. This is done to save resources and it's one the main features of Knative Serving.
+
+You can continue with other commands.
+
+Upload an object:
+```
+curl -i -X PUT --header "Content-Type: application/octet-stream" --data-binary "@API.java" $URL/example
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20-X%20PUT%20--header%20%22Content-Type%3A%20application%2Foctet-stream%22%20--data-binary%20%22%40API.java%22%20%24URL%2Fexample&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+Get the new list of objects:
+```
+curl -i $URL/
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20$URL&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+Get the content of a file:
+```
+curl -i $URL/example
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20%24URL%2Fexample&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+Delete the file:
+```
+curl -i -X DELETE $URL/example
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20-X%20DELETE%20%24URL%2Fexample&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+Get (again) the new list of objects:
+```
+curl -i $URL/
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$curl%20-i%20$URL&completion=Use%20the%20API. "Opens a new terminal and sends the command above"){.didact})
+
+
+## 8. Uninstall
+
+To cleanup everything, execute the following command:
+
+```kubectl delete namespace camel-api```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20delete%20namespace%20camel-api&completion=Removed%20the%20project%20from%20the%20cluster. "Cleans up the cluster after running the example"){.didact})
diff --git a/02-serverless-api/readme.md b/02-serverless-api/readme.md
new file mode 120000
index 0000000..c0bf82f
--- /dev/null
+++ b/02-serverless-api/readme.md
@@ -0,0 +1 @@
+readme.didact.md
\ No newline at end of file
diff --git a/02-serverless-api/s3.properties b/02-serverless-api/s3.properties
new file mode 100644
index 0000000..8b5feeb
--- /dev/null
+++ b/02-serverless-api/s3.properties
@@ -0,0 +1,15 @@
+# S3 Configuration
+
+# This configuration should not be kept together with the source code in production.
+
+# Bucket (referenced in the routes)
+api.bucket=camel-k
+# Region of the buket
+camel.component.aws-s3.region=EU_WEST_1
+# AWS Access Key ID
+camel.component.aws-s3.access-key=<put-your-aws-access-key-id-here>
+# AWS Access Key Secret
+camel.component.aws-s3.secret-key=<put-your-aws-access-key-secret-here>
+
+# General configuration
+camel.context.rest-configuration.api-context-path=/openapi.json
diff --git a/02-serverless-api/test/MinioCustomizer.java b/02-serverless-api/test/MinioCustomizer.java
new file mode 100644
index 0000000..ff59716
--- /dev/null
+++ b/02-serverless-api/test/MinioCustomizer.java
@@ -0,0 +1,36 @@
+// camel-k: language=java
+package test;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.PropertyInject;
+
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+
+public class MinioCustomizer {
+
+ @BindToRegistry
+ public static AmazonS3 minioClient(
+ @PropertyInject("minio.endpoint") String endpointAddress,
+ @PropertyInject("minio.access-key") String accessKey,
+ @PropertyInject("minio.secret-key") String secretKey) {
+
+ AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration(endpointAddress, "US_EAST_1");
+ AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
+ AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
+
+ return AmazonS3ClientBuilder
+ .standard()
+ .withEndpointConfiguration(endpoint)
+ .withCredentials(credentialsProvider)
+ .withPathStyleAccessEnabled(true)
+ .build();
+
+ }
+
+}
diff --git a/02-serverless-api/test/crud.feature b/02-serverless-api/test/crud.feature
new file mode 100644
index 0000000..ebcea50
--- /dev/null
+++ b/02-serverless-api/test/crud.feature
@@ -0,0 +1,65 @@
+Feature: the API allows CRUD operations on a S3 bucket
+
+
+ Background:
+ Given integration api is running
+ Given URL: http://api
+
+
+ Scenario: LIST objects
+ When send GET /
+ Then verify HTTP response header Content-Type="application/json"
+ And receive HTTP 200 OK
+
+
+ Scenario: SAVE object
+ Given variable objectName is "citrus:randomString(10)"
+ Given variable sampleText is "This is a sample text"
+ Given HTTP request header Content-Type is "application/octet-stream"
+ Given HTTP request body
+ """
+ ${sampleText}
+ """
+ When send PUT /${objectName}
+ Then receive HTTP 200 OK
+ Then verify HTTP response body
+ """
+ ${sampleText}
+ """
+
+
+ Scenario: GET object
+ Given variable objectName is "citrus:randomString(10)"
+ Given variable sampleText is "This is another sample text"
+ Given HTTP request body
+ """
+ ${sampleText}
+ """
+ Given HTTP request header Content-Type is "application/octet-stream"
+ Given send PUT /${objectName}
+ Given receive HTTP 200 OK
+ When send GET /${objectName}
+ Then receive HTTP 200 OK
+ Then verify HTTP response body
+ """
+ ${sampleText}
+ """
+
+
+ Scenario: DELETE object
+ Given variable objectName is "citrus:randomString(10)"
+ Given variable sampleText is "This is yet another sample text"
+ Given HTTP request body
+ """
+ ${sampleText}
+ """
+ Given HTTP request header Content-Type is "application/octet-stream"
+ Given send PUT /${objectName}
+ Given receive HTTP 200 OK
+ When send DELETE /${objectName}
+ Then receive HTTP 204 OK
+
+
+ Scenario: expose OpenAPI
+ When send GET /openapi.json
+ Then receive HTTP 200 OK
diff --git a/02-serverless-api/test/minio.properties b/02-serverless-api/test/minio.properties
new file mode 100644
index 0000000..9d15b40
--- /dev/null
+++ b/02-serverless-api/test/minio.properties
@@ -0,0 +1,15 @@
+# S3 Configuration
+
+# This configuration should not be kept together with the source code in production.
+
+# Bucket (referenced in the routes)
+api.bucket=camel-k
+
+# Minio information injected into the MinioCustomizer
+minio.endpoint=http://minio:9000
+minio.access-key=minio
+minio.secret-key=minio123
+
+
+# General configuration
+camel.context.rest-configuration.api-context-path=/openapi.json
diff --git a/02-serverless-api/test/minio.yaml b/02-serverless-api/test/minio.yaml
new file mode 100644
index 0000000..cd5f52d
--- /dev/null
+++ b/02-serverless-api/test/minio.yaml
@@ -0,0 +1,71 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: minio
+spec:
+ selector:
+ matchLabels:
+ app: minio
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: minio
+ spec:
+ volumes:
+ - name: data
+ persistentVolumeClaim:
+ claimName: minio-pv-claim
+ containers:
+ - name: minio
+ volumeMounts:
+ - name: data
+ mountPath: "/data"
+ image: minio/minio
+ args:
+ - server
+ - /data
+ env:
+ - name: MINIO_ACCESS_KEY
+ value: minio
+ - name: MINIO_SECRET_KEY
+ value: minio123
+ ports:
+ - containerPort: 9000
+ readinessProbe:
+ httpGet:
+ path: /minio/health/ready
+ port: 9000
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ livenessProbe:
+ httpGet:
+ path: /minio/health/live
+ port: 9000
+ initialDelaySeconds: 120
+ periodSeconds: 20
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: minio-pv-claim
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: minio
+spec:
+ type: LoadBalancer
+ ports:
+ - port: 9000
+ targetPort: 9000
+ protocol: TCP
+ selector:
+ app: minio
diff --git a/02-serverless-api/test/yaks-config.yaml b/02-serverless-api/test/yaks-config.yaml
new file mode 100644
index 0000000..3b8e366
--- /dev/null
+++ b/02-serverless-api/test/yaks-config.yaml
@@ -0,0 +1,14 @@
+config:
+ namespace:
+ temporary: true
+pre:
+- name: minio installation
+ run: |
+ kubectl apply -f minio.yaml -n ${YAKS_NAMESPACE}
+ kubectl wait pod -l app=minio --for condition=Ready -n ${YAKS_NAMESPACE} --timeout=5m
+
+- name: integration
+ run: |
+ kamel install -w -n ${YAKS_NAMESPACE}
+
+ kamel run --name api MinioCustomizer.java ../API.java --property-file minio.properties --open-api ../openapi.yaml -d camel-openapi-java -t 3scale.enabled=true -t 3scale.description-path=/openapi.json --profile OpenShift -w -n ${YAKS_NAMESPACE}
diff --git a/README.md b/README.md
index bf58d39..f1fbdf6 100644
--- a/README.md
+++ b/README.md
@@ -47,3 +47,4 @@ Most examples provide a `readme.didact.md` file instead of the standard readme f
This is the current list of examples:
- [01 Basic](./01-basic): Getting started with Camel K by learning the most important features that you should know before trying to develop more complex examples.
+- [02 Serverless API](./02-serverless-api): Learn how to design an API that manages files in a remote storage location and leverages *Knative* Serving to scale automatically (even to zero instances) based on the current load.
[camel-k-examples] 04/14: Removing readme
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 11fd47ead4d215303d047fa998061ce09337b5af
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 10:37:48 2020 +0200
Removing readme
---
01-basic/readme.md | 296 -----------------------------------------------------
1 file changed, 296 deletions(-)
diff --git a/01-basic/readme.md b/01-basic/readme.md
deleted file mode 100644
index c2c494b..0000000
--- a/01-basic/readme.md
+++ /dev/null
@@ -1,296 +0,0 @@
-# Camel K Basic Example
-
-
-
-This example demonstrates how to get started with Camel K by showing you some of the most important
-features that you should know before trying to develop more complex examples.
-
-## Before you begin
-
-Make sure you check-out this repository from git and open it with [VSCode](https://code.visualstudio.com/).
-
-Instructions are based on [VSCode Didact](https://github.com/redhat-developer/vscode-didact), so make sure it's installed
-from the VSCode extensions marketplace.
-
-From the VSCode UI, right-click on the `readme.didact.md` file and select "Didact: Start Didact tutorial from File". A new Didact tab will be opened in VS Code.
-
-Make sure you've opened this readme file with Didact before jumping to the next section.
-
-## Preparing the cluster
-
-This example can be run on any OpenShift 4.3+ cluster or a local development instance (such as [CRC](https://github.com/code-ready/crc)). Ensure that you have a cluster available and login to it using the OpenShift `oc` command line tool.
-
-You need to create a new project named `camel-basic` for running this example. This can be done directly from the OpenShift web console or by executing the command `oc new-project camel-basic` on a terminal window.
-
-You need to install the Camel K operator in the `camel-basic` project. To do so, go to the OpenShift 4.x web console, login with a cluster admin account and use the OperatorHub menu item on the left to find and install **"Red Hat Integration - Camel K"**. You will be given the option to install it globally on the cluster or on a specific namespace.
-If using a specific namespace, make sure you select the `camel-basic` project from the dropdown list.
-This completes the installation of the Camel K operator (it may take a couple of minutes).
-
-When the operator is installed, from the OpenShift Help menu ("?") at the top of the WebConsole, you can access the "Command Line Tools" page, where you can download the **"kamel"** CLI, that is required for running this example. The CLI must be installed in your system path.
-
-Refer to the **"Red Hat Integration - Camel K"** documentation for a more detailed explanation of the installation steps for the operator and the CLI.
-
-You can use the following section to check if your environment is configured properly.
-
-## Checking requirements
-
-<a href='didact://?commandId=vscode.didact.validateAllRequirements' title='Validate all requirements!'><button>Validate all Requirements at Once!</button></a>
-
-**OpenShift CLI ("oc")**
-
-The OpenShift CLI tool ("oc") will be used to interact with the OpenShift cluster.
-
-[Check if the OpenShift CLI ("oc") is installed](didact://?commandId=vscode.didact.cliCommandSuccessful&text=oc-requirements-status$$oc%20help&completion=Checked%20oc%20tool%20availability "Tests to see if `oc help` returns a 0 return code"){.didact}
-
-*Status: unknown*{#oc-requirements-status}
-
-
-**Connection to an OpenShift cluster**
-
-You need to connect to an OpenShift cluster in order to run the examples.
-
-[Check if you're connected to an OpenShift cluster](didact://?commandId=vscode.didact.requirementCheck&text=cluster-requirements-status$$oc%20get%20project$$NAME&completion=OpenShift%20is%20connected. "Tests to see if `kamel version` returns a result"){.didact}
-
-*Status: unknown*{#cluster-requirements-status}
-
-**Apache Camel K CLI ("kamel")**
-
-Apart from the support provided by the VS Code extension, you also need the Apache Camel K CLI ("kamel") in order to
-access all Camel K features.
-
-[Check if the Apache Camel K CLI ("kamel") is installed](didact://?commandId=vscode.didact.requirementCheck&text=kamel-requirements-status$$kamel%20version$$Camel%20K%20Client&completion=Apache%20Camel%20K%20CLI%20is%20available%20on%20this%20system. "Tests to see if `kamel version` returns a result"){.didact}
-
-*Status: unknown*{#kamel-requirements-status}
-
-### Optional Requirements
-
-The following requirements are optional. They don't prevent the execution of the demo, but may make it easier to follow.
-
-**VS Code Extension Pack for Apache Camel**
-
-The VS Code Extension Pack for Apache Camel by Red Hat provides a collection of useful tools for Apache Camel K developers,
-such as code completion and integrated lifecycle management. They are **recommended** for the tutorial, but they are **not**
-required.
-
-You can install it from the VS Code Extensions marketplace.
-
-[Check if the VS Code Extension Pack for Apache Camel by Red Hat is installed](didact://?commandId=vscode.didact.extensionRequirementCheck&text=extension-requirement-status$$redhat.apache-camel-extension-pack&completion=Camel%20extension%20pack%20is%20available%20on%20this%20system. "Checks the VS Code workspace to make sure the extension pack is installed"){.didact}
-
-*Status: unknown*{#extension-requirement-status}
-
-
-## 1. Preparing the project
-
-We'll connect to the `camel-basic` project and check the installation status.
-
-To change project, open a terminal tab and type the following command:
-
-
-```
-oc project camel-basic
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20project%20camel-basic&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
-
-
-We should now check that the operator is installed. To do so, execute the following command on a terminal:
-
-
-Upon successful creation, you should ensure that the Camel K operator is installed:
-
-```
-oc get csv
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20csv&completion=Checking%20Cluster%20Service%20Versions. "Opens a new terminal and sends the command above"){.didact})
-
-
-When Camel K is installed, you should find an entry related to `red-hat-camel-k-operator` in phase `Succeeded`.
-
-You can now proceed to the next section.
-
-## 2. Running a basic integration
-
-This repository contains a simple Camel K integration that periodically prints
-a "Hello World..." message.
-
-The integration is all contained in a single file named `Basic.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}).
-
-> **Note:** the `Basic.java` file contains a simple integration that uses the `timer` and `log` components.
-> Dependency management is automatically handled by Camel K that imports all required libraries from the Camel
-> catalog via code inspection. This means you can use all 300+ Camel components directly in your routes.
-
-We're ready to run the integration on our `camel-basic` project in the cluster.
-
-Use the following command to run it in "dev mode", in order to see the logs in the integration terminal:
-
-```
-kamel run Basic.java --dev
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java%20--dev&completion=Camel%20K%20basic%20integration%20run%20in%20dev%20mode. "Opens a new terminal and sends the command above"){.didact})
-
-If everything is ok, after the build phase finishes, you should see the Camel integration running and continuously printing "Hello World!..." in the terminal window.
-
-When running in dev mode, you can change the integration code and let Camel K redeploy the changes automatically.
-
-To try this feature,
-[open the `Basic.java` file](didact://?commandId=vscode.openFolder&projectFilePath=Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}
-and change "Hello World" into "Ciao Mondo", then save the file.
-You should see the new integration starting up in the terminal window and replacing the old one.
-
-[**To exit dev mode and terminate the execution**, just click here](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
-or hit `ctrl+c` on the terminal window.
-
-> **Note:** When you terminate a "dev mode" execution, also the remote integration will be deleted. This gives the experience of a local program execution, but the integration is actually running in the remote cluster.
-
-To keep the integration running and not linked to the terminal, you can run it without "dev mode", just run:
-
-```
-kamel run Basic.java
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java&completion=Camel%20K%20basic%20integration%20run. "Opens a new terminal and sends the command above"){.didact})
-
-
-
-After executing the command, you should be able to see it among running integrations:
-
-```
-oc get integrations
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20integrations&completion=Getting%20running%20integrations. "Opens a new terminal and sends the command above"){.didact})
-
-An integration named `basic` should be present in the list and it should be in status `Running`. There's also a `kamel get` command which is an alternative way to list all running integrations.
-
-> **Note:** the first time you've run the integration, an IntegrationKit (basically, a container image) has been created for it and
-> it took some time for this phase to finish. When you run the integration a second time, the existing IntegrationKit is reused
-> (if possible) and the integration reaches the "Running" state much faster.
->
-
-
-Even if it's not running in dev mode, you can still see the logs of the integration using the following command:
-
-```
-kamel log basic
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20basic&completion=Show%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
-
-The last parameter ("basic") is the name of the running integration for which you want to display the logs.
-
-[**Click here to terminate the log stream**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
-or hit `ctrl+c` on the terminal window.
-
-> **Note:** Your IDE may provide an "Apache Camel K Integrations" panel where you can see the list of running integrations and also open a window to display the logs.
-
-
-## 2. Applying configuration and routing
-
-The second example is a bit more complex as it shows how to configure the integration using external properties and
-also a simple content-based router.
-
-The integration is contained in a file named `Routing.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact}).
-
-The routes use two configuration properties named `items` and `priority-marker` that should be provided using an external file such
-as the `routing.properties` ([open](didact://?commandId=vscode.openFolder&projectFilePath=routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}).
-
-The `Routing.java` file shows how to inject properties into the routes via property placeholders and also the usage of the `@PropertyInject` annotation.
-
-To run the integration, we should link the integration to the property file providing configuration for it:
-
-```
-kamel run Routing.java --property-file routing.properties --dev
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20--dev&completion=Run%20Routing.java%20integration. "Opens a new terminal and sends the command above"){.didact})
-
-Wait for the integration to be running (you should see the logs streaming in the terminal window).
-
-You can now open both the [Routing.java](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} file or
-the [routing.properties](didact://?commandId=vscode.openFolder&projectFilePath=routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}
-file, make some changes and see the integration redeployed.
-For example, change the word `door` with `*door` to see it sent to the priority queue.
-
-[**Click here to exit dev mode and terminate the execution**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
-or hit `ctrl+c` on the terminal window.
-
-This will also terminate the execution of the integration.
-
-## 3. Running integrations as Kubernetes CronJobs
-
-The previous example can be automatically deployed as a Kubernetes CronJob if the delay between executions is changed into a value that can be expressed by a cron tab expression.
-
-For example, you can change the first endpoint (`timer:java?period=3000`) into the following: `timer:java?period=60000` (1 minute between executions). [Open the Routing.java file](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} to apply the changes.
-
-Now you can run the integration again:
-
-```
-kamel run Routing.java --property-file routing.properties
-```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties&completion=Run%20Routing.java%20integration%20as%20CronJob. "Opens a new terminal and sends the command above"){.didact})
-
-Now you'll see that Camel K has materialized a cron job:
-
-```
-oc get cronjob
-```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20cronjob&completion=Get%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
-
-You'll find a Kubernetes CronJob named "routing".
-
-The running behavior changes, because now there's no pod always running (beware you should not store data in memory when using the cronJob strategy).
-
-You can see the pods starting and being destroyed by watching the namespace:
-
-```
-oc get pod -w
-```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20pod%20-w&completion=Watch%20Pods. "Opens a new terminal and sends the command above"){.didact})
-
-[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
-or hit `ctrl+c` on the terminal window.
-
-To see the logs of each integration starting up, you can use the `kamel log` command:
-
-```
-kamel log routing
-```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
-
-You should see every minute a JVM starting, executing a single operation and terminating.
-
-[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
-or hit `ctrl+c` on the terminal window.
-
-The CronJob behavior is controlled via a Trait called `cron`. Traits are the main way to configure high level Camel K features, to
-customize how integrations are rendered.
-
-To disable the cron feature and use the deployment strategy, you can run the integration with:
-
-```
-kamel run Routing.java --property-file routing.properties -t cron.enabled=false
-```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20-t%20cron.enabled=false&completion=Run%20Routing.java%20integration%20without%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
-
-This will disable the cron trait and restore the classic behavior (always running pod).
-
-You should see it reflected in the logs (which will be printed every minute by the same JVM):
-
-```
-kamel log routing
-```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
-
-
-[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
-or hit `ctrl+c` on the terminal window.
-
-You can continue to hack on the examples.
-
-## 4. Uninstall
-
-To cleanup everything, execute the following command:
-
-```oc delete project camel-basic```
-
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20delete%20project%20camel-basic&completion=Removed%20the%20project%20from%20the%20cluster. "Cleans up the cluster after running the example"){.didact})
[camel-k-examples] 02/14: First basic example and general format
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit f2cbc84fd2332518824989728b0c4af97605410e
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Mon Apr 20 14:52:16 2020 +0200
First basic example and general format
---
.gitignore | 9 +
.vscode/extensions.json | 6 +
01-basic/Basic.java | 17 +
01-basic/Routing.java | 46 ++
01-basic/readme.didact.md | 294 +++++++
01-basic/readme.md | 296 ++++++++
01-basic/routing.properties | 5 +
KEYS | 1773 +++++++++++++++++++++++++++++++++++++++++++
LICENSE | 203 +++++
NOTICE | 11 +
README.md | 46 ++
11 files changed, 2706 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d641e5d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+/.vscode/settings.json
+
+.project
+.metadata
+.classpath
+.settings
+
+*.iml
+/.idea
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..c580dfb
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,6 @@
+{
+ "recommendations": [
+ "redhat.vscode-didact",
+ "redhat.apache-camel-extension-pack"
+ ]
+}
diff --git a/01-basic/Basic.java b/01-basic/Basic.java
new file mode 100755
index 0000000..09a5c7c
--- /dev/null
+++ b/01-basic/Basic.java
@@ -0,0 +1,17 @@
+// camel-k: language=java
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class Basic extends RouteBuilder {
+ @Override
+ public void configure() throws Exception {
+
+ from("timer:java?period=1000")
+ .setHeader("example")
+ .constant("Java")
+ .setBody()
+ .simple("Hello World! Camel K route written in ${header.example}.")
+ .to("log:info");
+
+ }
+}
diff --git a/01-basic/Routing.java b/01-basic/Routing.java
new file mode 100755
index 0000000..26403a5
--- /dev/null
+++ b/01-basic/Routing.java
@@ -0,0 +1,46 @@
+// camel-k: language=java
+
+import java.util.Random;
+
+import org.apache.camel.PropertyInject;
+import org.apache.camel.builder.RouteBuilder;
+
+public class Routing extends RouteBuilder {
+
+ private Random random = new Random();
+
+ @PropertyInject("priority-marker")
+ private String priorityMarker;
+
+ @Override
+ public void configure() throws Exception {
+
+ from("timer:java?period=3000")
+ .id("generator")
+ .bean(this, "generateRandomItem({{items}})")
+ .choice()
+ .when().simple("${body.startsWith('{{priority-marker}}')}")
+ .transform().body(String.class, item -> item.substring(priorityMarker.length()))
+ .to("direct:priorityQueue")
+ .otherwise()
+ .to("direct:standardQueue");
+
+ from("direct:standardQueue")
+ .id("standard")
+ .log("Standard item: ${body}");
+
+ from("direct:priorityQueue")
+ .id("priority")
+ .log("!!Priority item: ${body}");
+
+ }
+
+ public String generateRandomItem(String items) {
+ if (items == null || items.equals("")) {
+ return "[no items configured]";
+ }
+ String[] list = items.split("\\s");
+ return list[random.nextInt(list.length)];
+ }
+
+}
diff --git a/01-basic/readme.didact.md b/01-basic/readme.didact.md
new file mode 100644
index 0000000..2a2ecae
--- /dev/null
+++ b/01-basic/readme.didact.md
@@ -0,0 +1,294 @@
+# Camel K Basic Example
+
+This example demonstrates how to get started with Camel K by showing you some of the most important
+features that you should know before trying to develop more complex examples.
+
+## Before you begin
+
+Read the general instructions in the [root README.md file](../README.md) for setting up your environment and the Kubernetes cluster before looking at this example.
+
+You should open this file with [Didact](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-didact) if available on your IDE.
+
+## Requirements
+
+<a href='didact://?commandId=vscode.didact.validateAllRequirements' title='Validate all requirements!'><button>Validate all Requirements at Once!</button></a>
+
+**Kubectl CLI**
+
+The Kubernetes `kubectl` CLI tool will be used to interact with the Kubernetes cluster.
+
+[Check if the Kubectl CLI is installed](didact://?commandId=vscode.didact.cliCommandSuccessful&text=kubectl-requirements-status$$kubectl%20help&completion=Checked%20kubectl%20tool%20availability "Tests to see if `kubectl help` returns a 0 return code"){.didact}
+
+*Status: unknown*{#kubectl-requirements-status}
+
+
+[Check if the Kubectl CLI is connected](didact://?commandId=vscode.didact.cliCommandSuccessful&text=kubectl-cluster-requirements-status$$kubectl%20get%20pod&completion=Checked%20kubectl%20tool%20connection "Tests to see if `kubectl get pod` returns a 0 return code"){.didact}
+
+*Status: unknown*{#kubectl-cluster-requirements-status}
+
+
+**Connection to a Kubernetes cluster**
+
+You need to connect to a Kubernetes cluster in order to run the example.
+
+[Check if you're connected to a Kubernetes cluster](didact://?commandId=vscode.didact.cliCommandSuccessful&text=cluster-requirements-status$$kubectl%20get%20pod&completion=Checked%20Kubernetes%20connection "Tests to see if `kubectl get pod` returns a 0 return code"){.didact}
+
+*Status: unknown*{#cluster-requirements-status}
+
+**Apache Camel K CLI ("kamel")**
+
+You need the Apache Camel K CLI ("kamel") in order to access all Camel K features.
+
+[Check if the Apache Camel K CLI ("kamel") is installed](didact://?commandId=vscode.didact.requirementCheck&text=kamel-requirements-status$$kamel%20version$$Camel%20K%20Client&completion=Checked%20if%20Camel%20K%20CLI%20is%20available%20on%20this%20system. "Tests to see if `kamel version` returns a result"){.didact}
+
+*Status: unknown*{#kamel-requirements-status}
+
+### Optional Requirements
+
+The following requirements are optional. They don't prevent the execution of the demo, but may make it easier to follow.
+
+**VS Code Extension Pack for Apache Camel**
+
+The VS Code Extension Pack for Apache Camel provides a collection of useful tools for Apache Camel K developers,
+such as code completion and integrated lifecycle management. They are **recommended** for the tutorial, but they are **not**
+required.
+
+You can install it from the VS Code Extensions marketplace.
+
+[Check if the VS Code Extension Pack for Apache Camel by Red Hat is installed](didact://?commandId=vscode.didact.extensionRequirementCheck&text=extension-requirement-status$$redhat.apache-camel-extension-pack&completion=Camel%20extension%20pack%20is%20available%20on%20this%20system. "Checks the VS Code workspace to make sure the extension pack is installed"){.didact}
+
+*Status: unknown*{#extension-requirement-status}
+
+## 1. Preparing the namespace
+
+Let's open a terminal and go to the example directory:
+
+```
+cd 01-basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$cd%2001-basic&completion=Executed%20command. "Opens a new terminal and sends the command above"){.didact})
+
+
+We're going to create a namespace named `camel-basic` for running the example. To create it, execute the following command:
+
+```
+kubectl create namespace camel-basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20create%20namespace%20camel-basic&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+
+Now we can set the `camel-basic` namespace as default namespace for the following commands:
+
+```
+kubectl config set-context --current --namespace=camel-basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20config%20set-context%20--current%20--namespace%3Dcamel-basic&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+You need to install Camel K in the `camel-basic` namespace (or globally in the whole cluster).
+In many settings (e.g. OpenShift, CRC), it's sufficient to execute the following command to install Camel K:
+
+```
+kamel install
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20install&completion=Installing%20Camel%20K. "Opens a new terminal and sends the command above"){.didact})
+
+NOTE: The `kamel install` command requires some prerequisites to be successful in some situations, e.g. you need to enable the registry addon on Minikube. Refer to the [Camel K install guide](https://camel.apache.org/camel-k/latest/installation/installation.html) for cluster-specific instructions.
+
+To check that Camel K is installed we'll retrieve the IntegrationPlatform object from the namespace:
+
+```
+kubectl get integrationplatform
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20integrationplatform&completion=Executed%20Command. "Opens a new terminal and sends the command above"){.didact})
+
+You should find an IntegrationPlatform in status `Ready`.
+
+You can now proceed to the next section.
+
+## 2. Running a basic integration
+
+This repository contains a simple Camel K integration that periodically prints
+a "Hello World..." message.
+
+The integration is all contained in a single file named `Basic.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}).
+
+> **Note:** the `Basic.java` file contains a simple integration that uses the `timer` and `log` components.
+> Dependency management is automatically handled by Camel K that imports all required libraries from the Camel
+> catalog via code inspection. This means you can use all 300+ Camel components directly in your routes.
+
+We're ready to run the integration on our `camel-basic` project in the cluster.
+
+Use the following command to run it in "dev mode", in order to see the logs in the integration terminal:
+
+```
+kamel run Basic.java --dev
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java%20--dev&completion=Camel%20K%20basic%20integration%20run%20in%20dev%20mode. "Opens a new terminal and sends the command above"){.didact})
+
+If everything is ok, after the build phase finishes, you should see the Camel integration running and continuously printing "Hello World!..." in the terminal window.
+
+When running in dev mode, you can change the integration code and let Camel K redeploy the changes automatically.
+
+To try this feature,
+[open the `Basic.java` file](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}
+and change "Hello World" into "Ciao Mondo", then save the file.
+You should see the new integration starting up in the terminal window and replacing the old one.
+
+[**To exit dev mode and terminate the execution**, just click here](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
+or hit `ctrl+c` on the terminal window.
+
+> **Note:** When you terminate a "dev mode" execution, also the remote integration will be deleted. This gives the experience of a local program execution, but the integration is actually running in the remote cluster.
+
+To keep the integration running and not linked to the terminal, you can run it without "dev mode", just run:
+
+```
+kamel run Basic.java
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java&completion=Camel%20K%20basic%20integration%20run. "Opens a new terminal and sends the command above"){.didact})
+
+
+
+After executing the command, you should be able to see it among running integrations:
+
+```
+kubectl get integrations
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20integrations&completion=Getting%20running%20integrations. "Opens a new terminal and sends the command above"){.didact})
+
+An integration named `basic` should be present in the list and it should be in status `Running`. There's also a `kamel get` command which is an alternative way to list all running integrations.
+
+> **Note:** the first time you've run the integration, an IntegrationKit (basically, a container image) has been created for it and
+> it took some time for this phase to finish. When you run the integration a second time, the existing IntegrationKit is reused
+> (if possible) and the integration reaches the "Running" state much faster.
+>
+
+
+Even if it's not running in dev mode, you can still see the logs of the integration using the following command:
+
+```
+kamel log basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20basic&completion=Show%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+The last parameter ("basic") is the name of the running integration for which you want to display the logs.
+
+[**Click here to terminate the log stream**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
+or hit `ctrl+c` on the terminal window.
+
+> **Note:** Your IDE may provide an "Apache Camel K Integrations" panel where you can see the list of running integrations and also open a window to display the logs.
+
+
+## 2. Applying configuration and routing
+
+The second example is a bit more complex as it shows how to configure the integration using external properties and
+also a simple content-based router.
+
+The integration is contained in a file named `Routing.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact}).
+
+The routes use two configuration properties named `items` and `priority-marker` that should be provided using an external file such
+as the `routing.properties` ([open](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}).
+
+The `Routing.java` file shows how to inject properties into the routes via property placeholders and also the usage of the `@PropertyInject` annotation.
+
+To run the integration, we should link the integration to the property file providing configuration for it:
+
+```
+kamel run Routing.java --property-file routing.properties --dev
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20--dev&completion=Run%20Routing.java%20integration. "Opens a new terminal and sends the command above"){.didact})
+
+Wait for the integration to be running (you should see the logs streaming in the terminal window).
+
+You can now open both the [Routing.java](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} file or
+the [routing.properties](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}
+file, make some changes and see the integration redeployed.
+For example, change the word `door` with `*door` to see it sent to the priority queue.
+
+[**Click here to exit dev mode and terminate the execution**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+This will also terminate the execution of the integration.
+
+## 3. Running integrations as Kubernetes CronJobs
+
+The previous example can be automatically deployed as a Kubernetes CronJob if the delay between executions is changed into a value that can be expressed by a cron tab expression.
+
+For example, you can change the first endpoint (`timer:java?period=3000`) into the following: `timer:java?period=60000` (1 minute between executions). [Open the Routing.java file](didact://?commandId=vscode.openFolder&projectFilePath=01-basic/Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} to apply the changes.
+
+Now you can run the integration again:
+
+```
+kamel run Routing.java --property-file routing.properties
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties&completion=Run%20Routing.java%20integration%20as%20CronJob. "Opens a new terminal and sends the command above"){.didact})
+
+Now you'll see that Camel K has materialized a cron job:
+
+```
+kubectl get cronjob
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20cronjob&completion=Get%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
+
+You'll find a Kubernetes CronJob named "routing".
+
+The running behavior changes, because now there's no pod always running (beware you should not store data in memory when using the cronJob strategy).
+
+You can see the pods starting and being destroyed by watching the namespace:
+
+```
+kubectl get pod -w
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20get%20pod%20-w&completion=Watch%20Pods. "Opens a new terminal and sends the command above"){.didact})
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+To see the logs of each integration starting up, you can use the `kamel log` command:
+
+```
+kamel log routing
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+You should see every minute a JVM starting, executing a single operation and terminating.
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+The CronJob behavior is controlled via a Trait called `cron`. Traits are the main way to configure high level Camel K features, to
+customize how integrations are rendered.
+
+To disable the cron feature and use the deployment strategy, you can run the integration with:
+
+```
+kamel run Routing.java --property-file routing.properties -t cron.enabled=false
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20-t%20cron.enabled=false&completion=Run%20Routing.java%20integration%20without%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
+
+This will disable the cron trait and restore the classic behavior (always running pod).
+
+You should see it reflected in the logs (which will be printed every minute by the same JVM):
+
+```
+kamel log routing
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+You can continue to hack on the examples.
+
+## 4. Uninstall
+
+To cleanup everything, execute the following command:
+
+```kubectl delete namespace camel-basic```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20delete%20namespace%20camel-basic&completion=Removed%20the%20namespace%20from%20the%20cluster. "Cleans up the cluster after running the example"){.didact})
diff --git a/01-basic/readme.md b/01-basic/readme.md
new file mode 100644
index 0000000..c2c494b
--- /dev/null
+++ b/01-basic/readme.md
@@ -0,0 +1,296 @@
+# Camel K Basic Example
+
+
+
+This example demonstrates how to get started with Camel K by showing you some of the most important
+features that you should know before trying to develop more complex examples.
+
+## Before you begin
+
+Make sure you check-out this repository from git and open it with [VSCode](https://code.visualstudio.com/).
+
+Instructions are based on [VSCode Didact](https://github.com/redhat-developer/vscode-didact), so make sure it's installed
+from the VSCode extensions marketplace.
+
+From the VSCode UI, right-click on the `readme.didact.md` file and select "Didact: Start Didact tutorial from File". A new Didact tab will be opened in VS Code.
+
+Make sure you've opened this readme file with Didact before jumping to the next section.
+
+## Preparing the cluster
+
+This example can be run on any OpenShift 4.3+ cluster or a local development instance (such as [CRC](https://github.com/code-ready/crc)). Ensure that you have a cluster available and login to it using the OpenShift `oc` command line tool.
+
+You need to create a new project named `camel-basic` for running this example. This can be done directly from the OpenShift web console or by executing the command `oc new-project camel-basic` on a terminal window.
+
+You need to install the Camel K operator in the `camel-basic` project. To do so, go to the OpenShift 4.x web console, login with a cluster admin account and use the OperatorHub menu item on the left to find and install **"Red Hat Integration - Camel K"**. You will be given the option to install it globally on the cluster or on a specific namespace.
+If using a specific namespace, make sure you select the `camel-basic` project from the dropdown list.
+This completes the installation of the Camel K operator (it may take a couple of minutes).
+
+When the operator is installed, from the OpenShift Help menu ("?") at the top of the WebConsole, you can access the "Command Line Tools" page, where you can download the **"kamel"** CLI, that is required for running this example. The CLI must be installed in your system path.
+
+Refer to the **"Red Hat Integration - Camel K"** documentation for a more detailed explanation of the installation steps for the operator and the CLI.
+
+You can use the following section to check if your environment is configured properly.
+
+## Checking requirements
+
+<a href='didact://?commandId=vscode.didact.validateAllRequirements' title='Validate all requirements!'><button>Validate all Requirements at Once!</button></a>
+
+**OpenShift CLI ("oc")**
+
+The OpenShift CLI tool ("oc") will be used to interact with the OpenShift cluster.
+
+[Check if the OpenShift CLI ("oc") is installed](didact://?commandId=vscode.didact.cliCommandSuccessful&text=oc-requirements-status$$oc%20help&completion=Checked%20oc%20tool%20availability "Tests to see if `oc help` returns a 0 return code"){.didact}
+
+*Status: unknown*{#oc-requirements-status}
+
+
+**Connection to an OpenShift cluster**
+
+You need to connect to an OpenShift cluster in order to run the examples.
+
+[Check if you're connected to an OpenShift cluster](didact://?commandId=vscode.didact.requirementCheck&text=cluster-requirements-status$$oc%20get%20project$$NAME&completion=OpenShift%20is%20connected. "Tests to see if `kamel version` returns a result"){.didact}
+
+*Status: unknown*{#cluster-requirements-status}
+
+**Apache Camel K CLI ("kamel")**
+
+Apart from the support provided by the VS Code extension, you also need the Apache Camel K CLI ("kamel") in order to
+access all Camel K features.
+
+[Check if the Apache Camel K CLI ("kamel") is installed](didact://?commandId=vscode.didact.requirementCheck&text=kamel-requirements-status$$kamel%20version$$Camel%20K%20Client&completion=Apache%20Camel%20K%20CLI%20is%20available%20on%20this%20system. "Tests to see if `kamel version` returns a result"){.didact}
+
+*Status: unknown*{#kamel-requirements-status}
+
+### Optional Requirements
+
+The following requirements are optional. They don't prevent the execution of the demo, but may make it easier to follow.
+
+**VS Code Extension Pack for Apache Camel**
+
+The VS Code Extension Pack for Apache Camel by Red Hat provides a collection of useful tools for Apache Camel K developers,
+such as code completion and integrated lifecycle management. They are **recommended** for the tutorial, but they are **not**
+required.
+
+You can install it from the VS Code Extensions marketplace.
+
+[Check if the VS Code Extension Pack for Apache Camel by Red Hat is installed](didact://?commandId=vscode.didact.extensionRequirementCheck&text=extension-requirement-status$$redhat.apache-camel-extension-pack&completion=Camel%20extension%20pack%20is%20available%20on%20this%20system. "Checks the VS Code workspace to make sure the extension pack is installed"){.didact}
+
+*Status: unknown*{#extension-requirement-status}
+
+
+## 1. Preparing the project
+
+We'll connect to the `camel-basic` project and check the installation status.
+
+To change project, open a terminal tab and type the following command:
+
+
+```
+oc project camel-basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20project%20camel-basic&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+
+We should now check that the operator is installed. To do so, execute the following command on a terminal:
+
+
+Upon successful creation, you should ensure that the Camel K operator is installed:
+
+```
+oc get csv
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20csv&completion=Checking%20Cluster%20Service%20Versions. "Opens a new terminal and sends the command above"){.didact})
+
+
+When Camel K is installed, you should find an entry related to `red-hat-camel-k-operator` in phase `Succeeded`.
+
+You can now proceed to the next section.
+
+## 2. Running a basic integration
+
+This repository contains a simple Camel K integration that periodically prints
+a "Hello World..." message.
+
+The integration is all contained in a single file named `Basic.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}).
+
+> **Note:** the `Basic.java` file contains a simple integration that uses the `timer` and `log` components.
+> Dependency management is automatically handled by Camel K that imports all required libraries from the Camel
+> catalog via code inspection. This means you can use all 300+ Camel components directly in your routes.
+
+We're ready to run the integration on our `camel-basic` project in the cluster.
+
+Use the following command to run it in "dev mode", in order to see the logs in the integration terminal:
+
+```
+kamel run Basic.java --dev
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java%20--dev&completion=Camel%20K%20basic%20integration%20run%20in%20dev%20mode. "Opens a new terminal and sends the command above"){.didact})
+
+If everything is ok, after the build phase finishes, you should see the Camel integration running and continuously printing "Hello World!..." in the terminal window.
+
+When running in dev mode, you can change the integration code and let Camel K redeploy the changes automatically.
+
+To try this feature,
+[open the `Basic.java` file](didact://?commandId=vscode.openFolder&projectFilePath=Basic.java&completion=Opened%20the%20Basic.java%20file "Opens the Basic.java file"){.didact}
+and change "Hello World" into "Ciao Mondo", then save the file.
+You should see the new integration starting up in the terminal window and replacing the old one.
+
+[**To exit dev mode and terminate the execution**, just click here](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
+or hit `ctrl+c` on the terminal window.
+
+> **Note:** When you terminate a "dev mode" execution, also the remote integration will be deleted. This gives the experience of a local program execution, but the integration is actually running in the remote cluster.
+
+To keep the integration running and not linked to the terminal, you can run it without "dev mode", just run:
+
+```
+kamel run Basic.java
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Basic.java&completion=Camel%20K%20basic%20integration%20run. "Opens a new terminal and sends the command above"){.didact})
+
+
+
+After executing the command, you should be able to see it among running integrations:
+
+```
+oc get integrations
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20integrations&completion=Getting%20running%20integrations. "Opens a new terminal and sends the command above"){.didact})
+
+An integration named `basic` should be present in the list and it should be in status `Running`. There's also a `kamel get` command which is an alternative way to list all running integrations.
+
+> **Note:** the first time you've run the integration, an IntegrationKit (basically, a container image) has been created for it and
+> it took some time for this phase to finish. When you run the integration a second time, the existing IntegrationKit is reused
+> (if possible) and the integration reaches the "Running" state much faster.
+>
+
+
+Even if it's not running in dev mode, you can still see the logs of the integration using the following command:
+
+```
+kamel log basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20basic&completion=Show%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+The last parameter ("basic") is the name of the running integration for which you want to display the logs.
+
+[**Click here to terminate the log stream**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact}
+or hit `ctrl+c` on the terminal window.
+
+> **Note:** Your IDE may provide an "Apache Camel K Integrations" panel where you can see the list of running integrations and also open a window to display the logs.
+
+
+## 2. Applying configuration and routing
+
+The second example is a bit more complex as it shows how to configure the integration using external properties and
+also a simple content-based router.
+
+The integration is contained in a file named `Routing.java` ([open](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact}).
+
+The routes use two configuration properties named `items` and `priority-marker` that should be provided using an external file such
+as the `routing.properties` ([open](didact://?commandId=vscode.openFolder&projectFilePath=routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}).
+
+The `Routing.java` file shows how to inject properties into the routes via property placeholders and also the usage of the `@PropertyInject` annotation.
+
+To run the integration, we should link the integration to the property file providing configuration for it:
+
+```
+kamel run Routing.java --property-file routing.properties --dev
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20--dev&completion=Run%20Routing.java%20integration. "Opens a new terminal and sends the command above"){.didact})
+
+Wait for the integration to be running (you should see the logs streaming in the terminal window).
+
+You can now open both the [Routing.java](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} file or
+the [routing.properties](didact://?commandId=vscode.openFolder&projectFilePath=routing.properties&completion=Opened%20the%20routing.properties%20file "Opens the routing.properties file"){.didact}
+file, make some changes and see the integration redeployed.
+For example, change the word `door` with `*door` to see it sent to the priority queue.
+
+[**Click here to exit dev mode and terminate the execution**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+This will also terminate the execution of the integration.
+
+## 3. Running integrations as Kubernetes CronJobs
+
+The previous example can be automatically deployed as a Kubernetes CronJob if the delay between executions is changed into a value that can be expressed by a cron tab expression.
+
+For example, you can change the first endpoint (`timer:java?period=3000`) into the following: `timer:java?period=60000` (1 minute between executions). [Open the Routing.java file](didact://?commandId=vscode.openFolder&projectFilePath=Routing.java&completion=Opened%20the%20Routing.java%20file "Opens the Routing.java file"){.didact} to apply the changes.
+
+Now you can run the integration again:
+
+```
+kamel run Routing.java --property-file routing.properties
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties&completion=Run%20Routing.java%20integration%20as%20CronJob. "Opens a new terminal and sends the command above"){.didact})
+
+Now you'll see that Camel K has materialized a cron job:
+
+```
+oc get cronjob
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20cronjob&completion=Get%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
+
+You'll find a Kubernetes CronJob named "routing".
+
+The running behavior changes, because now there's no pod always running (beware you should not store data in memory when using the cronJob strategy).
+
+You can see the pods starting and being destroyed by watching the namespace:
+
+```
+oc get pod -w
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20get%20pod%20-w&completion=Watch%20Pods. "Opens a new terminal and sends the command above"){.didact})
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+To see the logs of each integration starting up, you can use the `kamel log` command:
+
+```
+kamel log routing
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+You should see every minute a JVM starting, executing a single operation and terminating.
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+The CronJob behavior is controlled via a Trait called `cron`. Traits are the main way to configure high level Camel K features, to
+customize how integrations are rendered.
+
+To disable the cron feature and use the deployment strategy, you can run the integration with:
+
+```
+kamel run Routing.java --property-file routing.properties -t cron.enabled=false
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20Routing.java%20--property-file%20routing.properties%20-t%20cron.enabled=false&completion=Run%20Routing.java%20integration%20without%20CronJobs. "Opens a new terminal and sends the command above"){.didact})
+
+This will disable the cron trait and restore the classic behavior (always running pod).
+
+You should see it reflected in the logs (which will be printed every minute by the same JVM):
+
+```
+kamel log routing
+```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20log%20routing&completion=Watch%20integration%20logs. "Opens a new terminal and sends the command above"){.didact})
+
+
+[**Click here to exit the current command**](didact://?commandId=vscode.didact.sendNamedTerminalCtrlC&text=camelTerm&completion=Camel%20K%20basic%20integration%20interrupted. "Interrupt the current operation on the terminal"){.didact},
+or hit `ctrl+c` on the terminal window.
+
+You can continue to hack on the examples.
+
+## 4. Uninstall
+
+To cleanup everything, execute the following command:
+
+```oc delete project camel-basic```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$oc%20delete%20project%20camel-basic&completion=Removed%20the%20project%20from%20the%20cluster. "Cleans up the cluster after running the example"){.didact})
diff --git a/01-basic/routing.properties b/01-basic/routing.properties
new file mode 100644
index 0000000..7704ba9
--- /dev/null
+++ b/01-basic/routing.properties
@@ -0,0 +1,5 @@
+# List of items for random generation
+items=*radiator *engine door window
+
+# Marker to identify priority items
+priority-marker=*
diff --git a/KEYS b/KEYS
new file mode 100644
index 0000000..5099276
--- /dev/null
+++ b/KEYS
@@ -0,0 +1,1773 @@
+pub 1024D/F5BA7E4F 2006-02-10
+uid Hiram Chirino <hi...@hiramchirino.com>
+sig 3 F5BA7E4F 2006-02-10 Hiram Chirino <hi...@hiramchirino.com>
+sub 1024g/6733C080 2006-02-10
+sig F5BA7E4F 2006-02-10 Hiram Chirino <hi...@hiramchirino.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.1 (Darwin)
+
+mQGiBEPspSsRBADdguKAxMQbA32vTQrCyONR6Zs/YGdvau2Zrr3SSSSR0Ge4FMjZ
+4tzwpf6+32m4Bsf7YIwdLl0H5hI1CgT5gDl9kXvfaFUehFnwR+FDyiBRiyHjUpGF
+4dgkQfWy9diYeWGtsvszsvWHXtED4SXb322StX4MfJj+YesA1iEdTiXK6wCg1QDa
+RucfjC+kx4zPsJwkJOgYpyMEAMTiXtNwQcke6nIFb/lb5374NjwwVAuuMTrRWLyq
+5HodugEIHaw3EitQWtnFfXNkXTJZzS6t2HAGv29UTfhiBzKdkydgCkOk2MLWISOV
+fqcg0tNIp5ZJCmUHg3s+OFNSH4oUi65u+FyDseUid3OKtPI+ZhIk8N+DjOIg2Kvo
+/UALA/9q+WfBd7re+W3iUtU7TutUcwbKsjP+jpaJeUHg2ChOBxVfQKt4YlPHVdrR
+iCrfNi90Z8qbsZ0iAXuqexrfMq20pAPmpHRpe54mmP1CMT5m+Gq71eKIfkUrb3LC
+/zv08dLG2vm9oghd242wbcifaX+t7AhNAIpe/WTvQsB0gpdO4LQmSGlyYW0gQ2hp
+cmlubyA8aGlyYW1AaGlyYW1jaGlyaW5vLmNvbT6IWwQTEQIAGwUCQ+ylKwYLCQgH
+AwIDFQIDAxYCAQIeAQIXgAAKCRCf8lmA9bp+T/G/AKDM1QDs7il/CJhTycgDvE3c
+EOgUBwCfelsVK4sgBCooZptoaCCDgVtt71G5AQ0EQ+ylLhAEAJD25AWgwcNgBFKY
+svExQaGIojIGJyn4Cf/5U30cui/K7fIU7JtyNhKcfZdCrh2hKx+x3H/dTF6e0SrR
+hzKV7Dx0j76yhHHB1Ak25kjRxoU4Jk+CG0m+bRNTF9xz9k1ALSm3Y+A5RqNU10K6
+e/5KsPuXMGSGoQgJ1H6g/i80Wf8PAAMFA/9mIxu7lMaqE1OE7EeAsHgLslNbi0h9
+pjDUVNv8bc1Os2gBPaJD8B89EeheTHw6NMNIe75HVOpKk4UA0gvOBrxJqCr18yFJ
+BM5sIlaEmuJwZOW4dDGOR1oS5qgE9NzpmyKhE+fu/S1wmy0coL667+1xZcnrPbUF
+D4i7/aD1r8qJhohGBBgRAgAGBQJD7KUuAAoJEJ/yWYD1un5Pth0An0QEUs5cxpl8
+zL5kZCj7c8MN8YZDAKDR9LTb6woveul50+uGtUl2fIH1uA==
+=RBPl
+-----END PGP PUBLIC KEY BLOCK-----
+pub 1024D/E31AF533 2007-12-17 [expires: 2009-06-09]
+uid Hadrian Zbarcea (Apache) <ha...@apache.org>
+sig 3 E31AF533 2007-12-17 Hadrian Zbarcea (Apache) <ha...@apache.org>
+sig B4493B94 2007-12-17 Guillaume Nodet <gn...@apache.org>
+sig BB550746 2007-12-17 J. Daniel Kulp <da...@kulp.com>
+sub 2048g/6180521C 2007-12-17 [expires: 2009-06-09]
+sig E31AF533 2007-12-17 Hadrian Zbarcea (Apache) <ha...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.6 (GNU/Linux)
+
+mQGiBEdmrcgRBADzy0H/OIT7ASGfTj4JDdnBiJCQfSZpeY2n3r5yW0tzMtb1jik/
+TyAwGyWvXMUCrRHlw33dVKNLztFQcNDfprmZxxORyTphhf6MMDhp3nAk56KT0vSF
+i/D8Kh4ERb86/bjveJDZJf0oPIaiwTz6Rdr5YxJCkR58cW/xpxBayb858wCgoex4
+1/1wipbpe7mGp9H2g8r/8WcEAOkm7S8gcg3NLZ62+RCwUZOJuIKCnq/UlwPEfIEL
+WwnOFVn3rL+y8U1560U3LYIAykBko+aCa7ZvqwvrW4OPUXJi+6MR1dKBAPiOQYkW
+NCtcGLa/Wdrxo5wjrP/XBFpSabvmxv19LUW8SJr/vH3XWQRYm5SJlnBaDgAzSBp3
+Cb7CBACj8wi9tJ8k5U/VV74ORRBJltlqaWBtMm3q9zf5WN/Rb1fxnfpZjvvpDQjQ
+PY6W0RNufE8V27558aTfuniBAVBOvxn4xedS91L7PMB2D/32J09/ICYFT9ekYGTA
+5Yl2pcTLd8PZu8MjFUssa8k/oxG9XrM4Zd764eIOAT+FmrZX9bQtSGFkcmlhbiBa
+YmFyY2VhIChBcGFjaGUpIDxoYWRyaWFuQGFwYWNoZS5vcmc+iGYEExECACYFAkdm
+rcgCGwMFCQLH6gAGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRAINWtR4xr1Mzuu
+AJ9mQdn6z2+gh5dDi6/fX7k1tISp7wCeON1lHB3RaQfJrabz63bLkKzROeOIRgQQ
+EQIABgUCR2a94wAKCRDs3+o8tEk7lJzcAJ9qAzsu1SoLekNJboMzJbsuQxrgNgCg
+vZcr6fHEXJajUejbOkd8caQQFQyIRgQQEQIABgUCR2a9SAAKCRCryO45u1UHRgf6
+AJ9BCGTjrCOQsrIfLYoIVxTVDT9pCACeMYK/6kaf80OHvBwlM3BwQbXBF065Ag0E
+R2at1xAIALiA44fG70XTj+XnlAbqq705B/yTCOTkOJh/Jayof9Rp78cok2eeCKOO
+HZ+YupiWcp6shdmyXAQGcfxyqcyskPIG42wwoDBONWj5kMvGbuJgooZRwDhbaPaY
+PRAHhPlCj+QTrzTsTJmy94bzYkkbfqNI3TOyvKUzmgYy9TLfLku7dLzncmSs+W/d
+bzjRpeoyLxQ+t7aeHPjxG93tIVvNrFHgAYGgvof5sWl0h0MitSVI7PHvVlHTHhNG
+dJ/quacr+xYLdF95eXDXGPvM0Jl/+UJk1GFdoDd1LXdzo0d4OzEMv2mWPZy+HVnB
+MFjTsrZp7+YIJj3WXU0WVgX0p+AYjE8AAwUH/ieONEnadpYN9bShfJKOiSNxlZ8L
+Y6L1nrWIhXtfibPIJsaW5AkFugVZfpMqvODV+ccildADJRQRvoRP7xUedztedeLw
+3ZsK5ApIoEVeEx9oSaS06QgQ8CFRptb3hRFAAmb9tzWalxpghXUR63fMO0bpaKDI
+VgFykuJyLjcW5RQsSHqfNk4LbfaSq3qCGL/3iVZlFtk4dbo70NLzFC7MnG27CWKK
+NPLjldTQXDU388GTzYqQTdy+SyPj9TzBFTlOATg+4a6KQsL9KMMMJQ56VX1c5Hyp
+WYkcDV9c/38/zVV80BfqYuX1DAJty3uRKn9+d86SYHDQ2YN4wDE/UtQpwsaITwQY
+EQIADwUCR2at1wIbDAUJAsfqAAAKCRAINWtR4xr1M27MAJ0VEQ9j2h5cgdhbrXnB
+bMLb26TK5ACgjeCxQDIepWB96CZMGDPb2CMdeFg=
+=2f9B
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4096R/6A70C608 2009-06-10
+ Fingerprint=4AAC 7338 D125 F866 4167 6AF6 1522 6672 6A70 C608
+
+uid Hadrian Zbarcea <ha...@apache.org>
+sig sig3 6A70C608 2009-06-10 __________ __________ [selfsig]
+sig sig B4493B94 2009-06-10 __________ __________ Guillaume Nodet <gn...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: SKS 1.1.0
+
+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
+HzSpeZz97HtFnC/bNqM=
+=H3nh
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4096R/F43856A3 2009-08-22
+ Key fingerprint = 51B5 2DC5 DD45 2F92 BE34 2CC2 858F C4C4 F438 56A3
+uid J. Daniel Kulp <da...@kulp.com>
+uid J. Daniel Kulp <dk...@apache.org>
+uid J. Daniel Kulp <dk...@progress.com>
+uid J. Daniel Kulp <da...@sopera.com>
+uid J. Daniel Kulp <dk...@talend.com>
+sub 4096R/6A36A392 2009-08-22
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v2.0.17 (GNU/Linux)
+
+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
+=xhT3
+-----END PGP PUBLIC KEY BLOCK-----
+pub 1024D/7FBBDC54 2007-09-24
+uid Freeman Fang <fr...@gmail.com>
+sig 3 7FBBDC54 2011-01-05 Freeman Fang <fr...@gmail.com>
+sub 1024g/9A39DC2F 2007-09-24
+sig 7FBBDC54 2007-09-24 Freeman Fang <fr...@gmail.com>
+
+pub 4096R/9F9C8684 2011-01-05
+uid Freeman(Yue) Fang (new signing key) <ff...@apache.org>
+sig 3 9F9C8684 2011-01-05 Freeman(Yue) Fang (new signing key) <ff...@apache.org>
+sig 7FBBDC54 2011-01-05 Freeman Fang <fr...@gmail.com>
+sub 4096R/C1270665 2011-01-05
+sig 9F9C8684 2011-01-05 Freeman(Yue) Fang (new signing key) <ff...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.16 (Darwin)
+
+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
+/Gq+wPWmBdjNBDyd5REj
+=aGvL
+-----END PGP PUBLIC KEY BLOCK-----
+pub 1024D/AE8DE9E4 2008-02-26
+uid Willem Jiang <ni...@apache.org>
+sig 3 AE8DE9E4 2011-01-07 Willem Jiang <ni...@apache.org>
+sig 2 7FBBDC54 2008-02-29 Freeman Fang <fr...@gmail.com>
+sub 2048g/7103E49E 2008-02-26
+sig AE8DE9E4 2008-02-26 Willem Jiang <ni...@apache.org>
+
+pub 4096R/14D0DEE9 2011-01-07
+uid Willem Jiang (CODE SIGNING KEY) <ni...@apache.org>
+sig 3 14D0DEE9 2011-01-07 Willem Jiang (CODE SIGNING KEY) <ni...@apache.org>
+sig AE8DE9E4 2011-01-07 Willem Jiang <ni...@apache.org>
+sub 4096R/FE639F22 2011-01-07
+sig 14D0DEE9 2011-01-07 Willem Jiang (CODE SIGNING KEY) <ni...@apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.16 (Darwin)
+
+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
+gxPfPeJOHeS8nl6gLwgouXCN/s2so4l1YeE3ig==
+=lu9b
+-----END PGP PUBLIC KEY BLOCK-----
+pub 4096R/2A239C2C 2011-11-01
+uid Christian Mueller (CODE SIGNING KEY) <cm...@apache.org>
+sig 3 2A239C2C 2011-11-01 Christian Mueller (CODE SIGNING KEY) <cm...@apache.org>
+sig 4E24517C 2011-11-10 Hyrum K. Wright (Personal) <hy...@hyrumwright.org>
+sig C4FC9A65 2011-11-10 Bernd Bohmann <bo...@apache.org>
+sig 1F49ECA5 2011-11-10 Ulrich Staerk <ul...@apache.org>
+sig 2 F2EFD0F0 2011-11-17 Christopher David Schultz (Christopher David Schultz) <ch...@christopherschultz.net>
+sig 352ACF76 2011-11-11 Richard Keith Turner (CODE SIGNING KEY) <ke...@deenlo.com>
+sig B84508EC 2011-11-11 Bryan W. Call <bc...@apache.org>
+sig B6CD3280 2011-11-11 Udo Schnurpfeil <lo...@apache.org>
+sig F5CBAE6B 2011-11-16 Akitoshi Yoshida (CODE SIGNING KEY) <ay...@apache.org>
+sig 0208FC11 2011-11-14 Carlos Sanchez <ca...@apache.org>
+sig 088335A9 2011-11-24 Chris Darroch (CODE SIGNING KEY) <ch...@apache.org>
+sig E1303A99 2011-12-02 Marshall I Schor (Code Signing Key 2) <sc...@apache.org>
+sig 791485A8 2011-11-10 Jim Jagielski (Release Signing Key) <ji...@apache.org>
+sub 4096R/7501638F 2011-11-01
+sig 2A239C2C 2011-11-01 Christian Mueller (CODE SIGNING KEY) <cm...@apache.org>
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: SKS 1.1.0
+
+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
+21fnJtXDujubpXKuQqFl/SY=
+=drZJ
+-----END PGP PUBLIC KEY BLOCK-----
+pub 2048R/94CB9113 2013-02-04 [verf�llt: 2017-02-04]
+uid Babak Vahdat <ba...@swissonline.ch>
+sig 3 94CB9113 2013-02-04 Babak Vahdat <ba...@swissonline.ch>
+sub 2048R/CB41C100 2013-02-04 [verf�llt: 2017-02-04]
+sig 94CB9113 2013-02-04 Babak Vahdat <ba...@swissonline.ch>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG/MacGPG2 v2.0.18 (Darwin)
+Comment: GPGTools - http://gpgtools.org
+
+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
+S0maYlA=
+=OANb
+-----END PGP PUBLIC KEY BLOCK-----
+pub 2048R/9C8D3B59 2012-10-10
+uid Henryk Konsek <he...@apache.com>
+sub 2048R/4DF29C4A 2012-10-10
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQENBFB05RYBCAC5Gvz0zm/upu2XNyiDCxGe62vCjRWGo+lLRmlAYxYLm9iMI7Tf
+8Vh32TlgVCn0D0fKsFzz/7cmPCXjaTNH/8wc+cJrZVPgO4+9h9DKPADjtpbaYIgR
+toHMSLHH+jzcIJ4Q3uCXR0CoM7tDvybCfHGInkUTECYGEa6Owbl6yJ/KBfUqXxGk
+hayAnNXO3kQXWutqkCEfUmGbXHq7YYcPf2jQc3a1oIB1BQcMSGOlsko3Dvf/kOrr
+7tiEOAlpdkQRc5oSnw4wmWwU+Sij9kTdymka5lCBxhrgsnv4YhFgn4tXyhn405pR
+l4MBcvDanM3KpVHYzNKfb2SMgpVdqk1A8hxRABEBAAG0I0hlbnJ5ayBLb25zZWsg
+PGhla29uc2VrQGFwYWNoZS5jb20+iQE4BBMBAgAiBQJQdOUWAhsDBgsJCAcDAgYV
+CAIJCgsEFgIDAQIeAQIXgAAKCRBo2rMmnI07WYAiB/46HxLhPNNRQ0O1sThZZiXz
+OrELs0KePIDMb2Y++N/iRiR5qi/sCXmLD1AvHaknCN7fucWiVnRepGAgogC2rt8P
++Cnfa+aFo+Cck8OXX915GS5uUoWJhdMWRAAgVBNg5LdiAQD0dkG2v8uzfAW1n/eR
+dvnSGTGzxAJ2kTQ9zRuljOKYn639w/ErfzN88jNpVNe658xHRgwxVOxxRuWHW5EF
+Z5YWZZDAkhmbKPk8nnbdqJGXI/mGbczGYIZt9CJcy5dbELmFoz6aFL1dYMwzHFjv
+LKZSrxLi52vXny3gNOCOki21cJWqnDYrlZTXoHteb3dftJvuf+yW5SjTRc0lx1me
+uQENBFB05RYBCAC8oKi2jJ39OAtRC7BTeaTIcTtTeoZel1xTL6jxOt5ijF8md2ra
+VL5lVhrthCWuWXanypT3Gc0lcn14RcFy3zXdEamRmihpKfSsMzbmvd2BD7PCzwk7
+6My8XRHXuwWCsjdn2RmtwUMNlkOVSMAMOiUEQg2nUOIQkzblMmzlYH+3aTrYxdn+
+y6J2/odY/SVrOH2crmImh/pPB3Q9u5LA+G3wXWsyccIBQgPqTtMLpEZyyL4/1MiX
+cjnpA90ICyhC0AYSAwNe0yshKy702ucGO3OwpNPEm5L6hprw0TUZDKCcQORr5sI9
+teR2rauC8Q582mIiB9WMN2vJ2MMUO6kGJtkpABEBAAGJAR8EGAECAAkFAlB05RYC
+GwwACgkQaNqzJpyNO1mFegf/bTN0NFDem3bGMSlEZedOTUMSRsEGZY7/nD0sfmLe
+gSsAoxKQg48/MnSFRGgWkSCSkerZRtjmLi0JguP0ufxcV/t5dd0nbYrIC/YrYHNu
+hijWCHSd+XY67RD9sQ3AV+SA0/4y8vZlnudrDz6SvP5EV3bZ+p8TBE7ch7OgyLM9
+zisG9BugFPsD5S7Zy0+ES2x4E+IxVYzZrUiajfT1PLrAgLfQ2TOwCggvSRU17xu8
+VcGkOXenZaUgBAp1p1GyxGlmFa8/VJAhsMzUvOUVU2T3nVKb/moMk7kZ34L11Ycm
+O89+mqkE1TM0W6OF2aHV+RbQgyyufR/gsvKBfIKxEDATew==
+=eNwt
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4096R/5942C049 2015-10-15
+uid Gregor Zurowski <gz...@apache.org>
+sig 3 5942C049 2015-10-15 Gregor Zurowski <gz...@apache.org>
+sub 4096R/A48CCE10 2015-10-15
+sig 5942C049 2015-10-15 Gregor Zurowski <gz...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+uxLacDc=
+=QAF1
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4096R/6B400F69 2015-12-17 [expires: 2019-12-17]
+uid [ultimate] Claus Ibsen <cl...@gmail.com>
+uid [ultimate] [jpeg image of size 13356]
+sub 4096R/5E3FACEC 2015-12-17 [expires: 2019-12-17]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Comment: GPGTools - https://gpgtools.org
+
+mQINBFZybkIBEADjxTHn+rgc0kSVC7AbzFAI3IwVaSl0G1NOP+6lxZ/JbIlEONat
+yJCpiDz9vPV5zSv0ErkRLXxzS2jl0letfqcaVl1NfQFxoKBrh+2z/S6jHWaFgItz
+y7rdGNnPZBgPIINzQ0EGz9rYS3QatdurGZB8U06NEgLWOhpNFSZ9UQZKU6WDHhw9
+9y2jcgfhxEdGxMUv/KxoWY9CICSLMrtLHLQmshLW24aIXZJXhi6X2wjRJdrAS1gb
+1kBci71st20i3EU9qP5vKwxefKEhqx5D3oBwVST3wQyI9t5yl1XnQwffCcFDkhg0
+NeRZUgntA9cdJ36qoO5g9dXOaUplm1gAqHes3uM29O7J4RabXdHv6wASeDWIP2NI
+iGyyMOnC16h0n5IaTD294bLXo7/iOuuXPxMXfq7qq6p2n/bRVNrpX3XT0gIuowHE
+rtHqPBixTAOeaU1S9qWmyBgF0OuW+GD2SkU8moDEIAGItYmu+riFib0Hv4I3cnRJ
+iPeP1Ne0f10tceUNLC5hBsmIfJA5DURDMGQONZZUePgwkcpT6IPvIQhdemWE62B7
+v2v/gnlidWe6QAZa/LJmr2s88p59CGpm1x7SXKbxGMr+T90n2NTS15cn9XCi7sF0
+A9LTEhaePO3uPzMORmbjjmo5VjwhlBNrvItr9dHgxPDUeXMZmWCr+K0rMwARAQAB
+tCNDbGF1cyBJYnNlbiA8Y2xhdXMuaWJzZW5AZ21haWwuY29tPokCPQQTAQoAJwUC
+VnJuQgIbAwUJB4YfgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRDdcFCna0AP
+aYmKEACfLh42vaslFiGJsgw25oWVTKDqKkBEukHWCqcBMjkoClBWLD5sl1pSnCiR
+tlUnwHMwyQz7d/jfsNDFvuZrAVh1Tn6ZhOUzDWaP11N2dJlB0fFCu5LDoEY2l3xV
+0Ku7SEh9Kqbf/Ia3rlYYVafwFarFzyydE9gTlQMxC5kuef/SHDOAZDYyXY1f+hCw
+63CuylDKTZQzPi1WgBpBeOpSZaIdeMGg9+YzaH5414yyEG0eUFialR8OVvpXLyNe
+95RFH+74DPXcGvU55QidKnDuEMCpoPgscYPyBwk/tJC6/+kIN63xk24Vxs6PK0lD
+QTN+R9tTUpx6peg1cpxzul+hUKIqWCNLKaC8r4dNvqlfg5onUqxGPloaVZciVqhg
+v6Pg2spFoDMdLeAvS7xIEKTz3Zsu2mo3YisqoD9QyX1CZ+qyzlJH2CrBnid+4wUi
+kBnCvjXPjhxEqcl6vvv2B0ZpxvYlsMJkegKKSEqUzLHLMSswrsDFX0wMT9nnbD/P
+xlJtSSYwHwd+xd4ABgRLyW2Z2ExeNABH45LHoIyqp5jokYfDzLIb7VsrN+d1l/PN
+Rz5xoai49GTXYk9gFyRC2eETzQs5CMkaX1uGQd8imv2vpC8ZxTSJhm1PJDaMuURL
+egUvNXl8amjU95ZBpwwpsuvoxCAmQbcv7KMt7JuBb7q2cCtM1dH/AAA0Qv8AADQ9
+ARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAABIAEgAAP/hAGRFeGlmAABN
+TQAqAAAACAADAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAh2kABAAAAAEAAAAyAAAA
+AAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAFAoAMABAAAAAEAAAFzAAAAAP/hCSFo
+dHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/
+IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1s
+bnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4g
+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy
+LXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIv
+PiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz4A/+0AOFBob3Rvc2hvcCAzLjAA
+OEJJTQQEAAAAAAAAOEJJTQQlAAAAAAAQ1B2M2Y8AsgTpgAmY7PhCfv/AABEIAXMB
+QAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1
+EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR
+8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdo
+aWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPE
+xcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEB
+AQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQF
+ITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SV
+lpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo
+6ery8/T19vf4+fr/2wBDAAoKCgoKChEKChEYERERGCEYGBgYISkhISEhISkyKSkp
+KSkpMjIyMjIyMjI8PDw8PDxGRkZGRk5OTk5OTk5OTk7/2wBDAQwNDRQSFCISEiJS
+Ny03UlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJS
+UlJSUlL/3QAEABT/2gAMAwEAAhEDEQA/AKPGMYpoxt6U7pTRyKCA5FHuKWikA3FB
+p3PWm/WgA5pB6Cne1HvTAbwBS9qMUnSgA/Kij6UoGBnFIBOvNJxjNIzY5qLLPwtJ
+uxcYt7D2kUZqAzE8CrMdo8mMitGGwXgYzWTqdjojQ7mIGlbOBSrHKw5rp0sMYZR7
+GrC2SgHI7dahzZqqUTk/IlIzzzTltZsZGTXUm125Uc09IcHp7/4Uudlezj2ORMc6
+djRlx94V2BtuQCMg881aGnwSD5lANP2jJdCLOIDcZNOyOtddLokcgynBxWPcaLcw
+ZKjI9quNXuZSw9tjK4/L1pKeyshIYYporZO5zuLW4lJjPWl+lFMkSgDindKQ0AJQ
+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
++T34FjE=
+=FJmK
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 4096R/1AC2F4BA 2013-03-06
+uid Jonathan Anstey (CODE SIGNING KEY) <ja...@gmail.com>
+sig 3 1AC2F4BA 2013-03-06 Jonathan Anstey (CODE SIGNING KEY) <ja...@gmail.com>
+sub 4096R/8F2837E7 2013-03-06
+sig 1AC2F4BA 2013-03-06 Jonathan Anstey (CODE SIGNING KEY) <ja...@gmail.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+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
+advtsGhpGw2bQvnPEt4JVU+CV6/I
+=SRdD
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub 2048R/02FF4100 2015-02-05
+uid Andrea Cosentino (Chiave) <an...@yahoo.com>
+sig 3 02FF4100 2015-02-05 Andrea Cosentino (Chiave) <an...@yahoo.com>
+sub 2048R/D7B65D33 2015-02-05
+sig 02FF4100 2015-02-05 Andrea Cosentino (Chiave) <an...@yahoo.com>
+
+pub 4096R/FD34417D 2015-04-23
+uid Andrea Cosentino (COMMITER KEY) <ac...@apache.org>
+sig 3 FD34417D 2015-04-23 Andrea Cosentino (COMMITER KEY) <ac...@apache.org>
+sub 4096R/E334BF85 2015-04-23
+sig FD34417D 2015-04-23 Andrea Cosentino (COMMITER KEY) <ac...@apache.org>
+
+pub 4096R/B4889CC0 2015-04-24
+uid Andrea Cosentino (NEW COMMITTER KEY) <ac...@apache.org>
+sig 3 B4889CC0 2015-04-24 Andrea Cosentino (NEW COMMITTER KEY) <ac...@apache.org>
+sub 4096R/D31B42C9 2015-04-24
+sig B4889CC0 2015-04-24 Andrea Cosentino (NEW COMMITTER KEY) <ac...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v2.0.22 (GNU/Linux)
+
+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
+Wg==
+=4Now
+-----END PGP PUBLIC KEY BLOCK-----
+pub 4096R/229754D2 2019-03-05
+uid Nicola Ferraro <nf...@apache.org>
+sub 4096R/A5AAD514 2019-03-05
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+SaGp
+=GGoO
+-----END PGP PUBLIC KEY BLOCK-----
+pub rsa4096 2016-04-07 [SC]
+ 33E8BA5A41AB4B428475386137461E41A7B768D7
+uid [ unknown] Luca Burgazzoli <lb...@apache.org>
+sig 3 37461E41A7B768D7 2016-04-07 Luca Burgazzoli <lb...@apache.org>
+sub rsa4096 2016-04-07 [E]
+sig 37461E41A7B768D7 2016-04-07 Luca Burgazzoli <lb...@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+Bq6lxl6uAA==
+=f/Ot
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,203 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..f4f1281
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Camel distribution. ==
+ =========================================================================
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ Please read the different LICENSE files present in the licenses directory of
+ this distribution.
\ No newline at end of file
diff --git a/README.md b/README.md
index e74fec5..0a84436 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,47 @@
# Camel K Examples
+
+This repository contains a collection of Camel K examples useful to understand how it works, common use cases and the idiomatic programming model.
+
+## Before you begin
+
+### Open the examples in the IDE
+
+To better work on all examples, make sure you have all them locally by checking out the git repository:
+
+```
+git clone git@github.com:apache/camel-k-examples.git
+```
+
+We suggest you to open the examples with [VSCode](https://code.visualstudio.com/) because it provides useful extensions for working with Camel K files.
+If you've already installed it on your machine, after cloning the repository, you can open the examples on the IDE executing:
+
+```
+code camel-k-examples
+```
+
+We suggest you to install the following extensions for VSCode (The IDE should automatically prompt to ask you to install them):
+- [Extension Pack for Apache Camel](https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack): provides auto-completion, error handling as well as integrated IDE tools to manage the lifecycle of Camel K integrations
+- [Didact](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-didact): Provides a better getting started experience when following readme files in the various examples
+
+### Have your Kubernetes cluster ready
+
+All examples require that you are connected to a Kubernetes/OpenShift cluster, even a local instance such as [Minikube](https://github.com/kubernetes/minikube) or [CRC](https://github.com/code-ready/crc). Some advanced examples may have additional requirements.
+
+Ensure that you've followed the [Camel K installation guide](https://camel.apache.org/camel-k/latest/installation/installation.html) for your specific cluster before looking at the examples.
+
+### Install the CLI tools
+
+All examples need at least the following CLI tools installed on your system:
+
+- `kubectl`: the Kubernetes default CLI tool that can be downloaded from the [Kubernetes releases page](https://github.com/kubernetes/kubernetes/releases).
+- `kamel`: the Apache Camel K CLI that can be downloaded from the [Camel K release page](https://github.com/apache/camel-k/releases).
+
+## Examples
+
+Examples are contained in directories ordered by level of difficulty.
+
+Most examples provide a `readme.didact.md` file instead of the standard readme file. For those, if you're using VSCode with Didact installed, you can **right click on the `readme.didact.md` file and hit "Didact: Start Didact Tutorial from File"**.
+
+This is the current list of examples:
+
+- [01 Basic](./01-basic): Getting started with Camel K by learning the most important features that you should know before trying to develop more complex examples.
[camel-k-examples] 13/14: Fix test
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit e7b21e9140ac37c5945800ec2e71d405bb81433f
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Wed May 13 00:58:57 2020 +0200
Fix test
---
02-serverless-api/test/yaks-config.yaml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/02-serverless-api/test/yaks-config.yaml b/02-serverless-api/test/yaks-config.yaml
index 3b8e366..7eb1176 100644
--- a/02-serverless-api/test/yaks-config.yaml
+++ b/02-serverless-api/test/yaks-config.yaml
@@ -11,4 +11,4 @@ pre:
run: |
kamel install -w -n ${YAKS_NAMESPACE}
- kamel run --name api MinioCustomizer.java ../API.java --property-file minio.properties --open-api ../openapi.yaml -d camel-openapi-java -t 3scale.enabled=true -t 3scale.description-path=/openapi.json --profile OpenShift -w -n ${YAKS_NAMESPACE}
+ kamel run API.java --source test/MinioCustomizer.java --property-file test/minio.properties -w -n ${YAKS_NAMESPACE}
[camel-k-examples] 14/14: Merge pull request #3 from
nicolaferraro/api
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit aad73494083f2843737c5827ac7b2bf96e4833b6
Merge: dc8b4e2 e7b21e9
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Wed May 13 10:46:32 2020 +0200
Merge pull request #3 from nicolaferraro/api
Add a Serverless API example
02-serverless-api/API.java | 44 +++++
02-serverless-api/openapi.yaml | 53 ++++++
02-serverless-api/readme.didact.md | 273 ++++++++++++++++++++++++++++
02-serverless-api/readme.md | 1 +
02-serverless-api/s3.properties | 15 ++
02-serverless-api/test/MinioCustomizer.java | 36 ++++
02-serverless-api/test/crud.feature | 65 +++++++
02-serverless-api/test/minio.properties | 15 ++
02-serverless-api/test/minio.yaml | 71 ++++++++
02-serverless-api/test/yaks-config.yaml | 14 ++
README.md | 1 +
11 files changed, 588 insertions(+)
[camel-k-examples] 05/14: Make readme a symlink
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 00437916758a07efe2d4d396454efe7f6b19ee3c
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 10:38:13 2020 +0200
Make readme a symlink
---
01-basic/readme.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/01-basic/readme.md b/01-basic/readme.md
new file mode 120000
index 0000000..c0bf82f
--- /dev/null
+++ b/01-basic/readme.md
@@ -0,0 +1 @@
+readme.didact.md
\ No newline at end of file
[camel-k-examples] 06/14: Fix typo
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit c7e084580df0f44a7ff66a0cbdec4e49bee137b6
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 14:05:21 2020 +0200
Fix typo
---
01-basic/readme.didact.md | 6 ------
1 file changed, 6 deletions(-)
diff --git a/01-basic/readme.didact.md b/01-basic/readme.didact.md
index 2a2ecae..c7a951c 100644
--- a/01-basic/readme.didact.md
+++ b/01-basic/readme.didact.md
@@ -21,12 +21,6 @@ The Kubernetes `kubectl` CLI tool will be used to interact with the Kubernetes c
*Status: unknown*{#kubectl-requirements-status}
-
-[Check if the Kubectl CLI is connected](didact://?commandId=vscode.didact.cliCommandSuccessful&text=kubectl-cluster-requirements-status$$kubectl%20get%20pod&completion=Checked%20kubectl%20tool%20connection "Tests to see if `kubectl get pod` returns a 0 return code"){.didact}
-
-*Status: unknown*{#kubectl-cluster-requirements-status}
-
-
**Connection to a Kubernetes cluster**
You need to connect to a Kubernetes cluster in order to run the example.
[camel-k-examples] 07/14: Add references to the camel website
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit d5ddfb99d3608fe82a95ee0116c39697de317468
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Tue Apr 21 14:14:05 2020 +0200
Add references to the camel website
---
01-basic/readme.didact.md | 5 +++++
README.md | 2 ++
2 files changed, 7 insertions(+)
diff --git a/01-basic/readme.didact.md b/01-basic/readme.didact.md
index c7a951c..92667b1 100644
--- a/01-basic/readme.didact.md
+++ b/01-basic/readme.didact.md
@@ -3,10 +3,15 @@
This example demonstrates how to get started with Camel K by showing you some of the most important
features that you should know before trying to develop more complex examples.
+You can find more information about Apache Camel and Apache Camel K on the [official Camel website](https://camel.apache.org).
+
## Before you begin
Read the general instructions in the [root README.md file](../README.md) for setting up your environment and the Kubernetes cluster before looking at this example.
+Make sure you've read the [installation instructions](https://camel.apache.org/camel-k/latest/installation/installation.html) for your specific
+cluster before starting the example.
+
You should open this file with [Didact](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-didact) if available on your IDE.
## Requirements
diff --git a/README.md b/README.md
index 0a84436..bf58d39 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
This repository contains a collection of Camel K examples useful to understand how it works, common use cases and the idiomatic programming model.
+You can find more information about Apache Camel and Apache Camel K on the [official Camel website](https://camel.apache.org).
+
## Before you begin
### Open the examples in the IDE
[camel-k-examples] 01/14: Initial repo
Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 5060e928771af1248f55529cb2fbad1c34067cae
Author: Nicola Ferraro <ni...@gmail.com>
AuthorDate: Fri Apr 17 13:13:49 2020 +0200
Initial repo
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e74fec5
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# Camel K Examples