You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/07/16 07:23:29 UTC
[camel-k-examples] branch master updated (b3fc99b -> 112fa79)
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git.
from b3fc99b Added a note about the possibility of configuring the stream name
new 3ea887c Added an example of Kinesis Firehose with S3 bucket as destination
new 112fa79 Renamed the stuff to reflect S3 is the source
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../aws-kinesis-firehose-producer.groovy | 9 ++++
.../aws-s3-channel.yaml | 2 +-
.../aws-s3-consumer.groovy | 8 ++++
06-aws-kinesis-firehose-basic/aws-s3-source.yaml | 35 ++++++++++++++++
.../aws-services.properties | 3 ++
.../readme.didact.md | 49 +++++++++++-----------
.../readme.md | 0
7 files changed, 80 insertions(+), 26 deletions(-)
create mode 100644 06-aws-kinesis-firehose-basic/aws-kinesis-firehose-producer.groovy
copy 03-knative-source-basic/telegram-channel.yaml => 06-aws-kinesis-firehose-basic/aws-s3-channel.yaml (75%)
create mode 100644 06-aws-kinesis-firehose-basic/aws-s3-consumer.groovy
create mode 100644 06-aws-kinesis-firehose-basic/aws-s3-source.yaml
copy 04-aws-kinesis-source-basic/aws-kinesis.properties => 06-aws-kinesis-firehose-basic/aws-services.properties (54%)
copy {04-aws-kinesis-source-basic => 06-aws-kinesis-firehose-basic}/readme.didact.md (73%)
copy {11-knative-source-slack => 06-aws-kinesis-firehose-basic}/readme.md (100%)
[camel-k-examples] 02/02: Renamed the stuff to reflect S3 is the
source
Posted by lb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 112fa79df6a616e80b46e9e1b92affdaede814d8
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Jul 16 08:59:30 2020 +0200
Renamed the stuff to reflect S3 is the source
---
.../aws-kinesis-firehose-producer.groovy | 0
.../aws-s3-channel.yaml | 0
.../aws-s3-consumer.groovy | 0
.../aws-s3-source.yaml | 0
.../aws-services.properties | 0
.../readme.didact.md | 8 ++++----
.../readme.md | 0
7 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/05-aws-kinesis-firehose-source-basic/aws-kinesis-firehose-producer.groovy b/06-aws-kinesis-firehose-basic/aws-kinesis-firehose-producer.groovy
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/aws-kinesis-firehose-producer.groovy
rename to 06-aws-kinesis-firehose-basic/aws-kinesis-firehose-producer.groovy
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-channel.yaml b/06-aws-kinesis-firehose-basic/aws-s3-channel.yaml
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-channel.yaml
rename to 06-aws-kinesis-firehose-basic/aws-s3-channel.yaml
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-consumer.groovy b/06-aws-kinesis-firehose-basic/aws-s3-consumer.groovy
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/aws-s3-consumer.groovy
rename to 06-aws-kinesis-firehose-basic/aws-s3-consumer.groovy
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-source.yaml b/06-aws-kinesis-firehose-basic/aws-s3-source.yaml
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-source.yaml
rename to 06-aws-kinesis-firehose-basic/aws-s3-source.yaml
diff --git a/05-aws-kinesis-firehose-source-basic/aws-services.properties b/06-aws-kinesis-firehose-basic/aws-services.properties
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/aws-services.properties
rename to 06-aws-kinesis-firehose-basic/aws-services.properties
diff --git a/05-aws-kinesis-firehose-source-basic/readme.didact.md b/06-aws-kinesis-firehose-basic/readme.didact.md
similarity index 94%
rename from 05-aws-kinesis-firehose-source-basic/readme.didact.md
rename to 06-aws-kinesis-firehose-basic/readme.didact.md
index cd6600c..8264d75 100644
--- a/05-aws-kinesis-firehose-source-basic/readme.didact.md
+++ b/06-aws-kinesis-firehose-basic/readme.didact.md
@@ -137,9 +137,9 @@ kubectl create secret generic aws-services --from-file=aws-services.properties
As the example levareges [Knative Eventing channels](https://knative.dev/v0.15-docs/eventing/channels/), we need to create the one that the example will use:
```
-kubectl apply -f aws-s3-kinesis-firehose-channel.yaml
+kubectl apply -f aws-s3-channel.yaml
```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-kinesis-firehose-channel.yaml&completion=inmemorychannel.messaging.knative.dev/aws-s3-kinesis-firehose$20created. "Create a Knative InMemoryChannel named aws-kinesis"){.didact})
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-channel.yaml&completion=inmemorychannel.messaging.knative.dev/aws-s3$20created. "Create a Knative InMemoryChannel named aws-kinesis"){.didact})
## 2. Running a Camel Source
@@ -149,9 +149,9 @@ This repository contains a simple Camel Source based on the [AWS Kinesis compone
Use the following command to deploy the Camel Source:
```
-kubectl apply -f aws-s3-kinesis-firehose-source.yaml
+kubectl apply -f aws-s3-source.yaml
```
-([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-kinesis-firehose-source.yaml&completion=camelsource.sources.knative.dev/camel-aws-s3-kinesis-firehose-source%20created. "Opens a new terminal and sends the command above"){.didact})
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-source.yaml&completion=camelsource.sources.knative.dev/camel-aws-s3-source%20created. "Opens a new terminal and sends the command above"){.didact})
## 2. Running a basic integration to create Kinesis events for consumption by the Camel Source
diff --git a/05-aws-kinesis-firehose-source-basic/readme.md b/06-aws-kinesis-firehose-basic/readme.md
similarity index 100%
rename from 05-aws-kinesis-firehose-source-basic/readme.md
rename to 06-aws-kinesis-firehose-basic/readme.md
[camel-k-examples] 01/02: Added an example of Kinesis Firehose with
S3 bucket as destination
Posted by lb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-examples.git
commit 3ea887cab3671fe8e8f1550817cc34625d3beb2f
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Jul 16 08:46:27 2020 +0200
Added an example of Kinesis Firehose with S3 bucket as destination
---
.../aws-kinesis-firehose-producer.groovy | 9 +
.../aws-s3-consumer.groovy | 8 +
.../aws-s3-kinesis-firehose-channel.yaml | 7 +
.../aws-s3-kinesis-firehose-source.yaml | 35 ++++
.../aws-services.properties | 6 +
.../readme.didact.md | 184 +++++++++++++++++++++
05-aws-kinesis-firehose-source-basic/readme.md | 1 +
7 files changed, 250 insertions(+)
diff --git a/05-aws-kinesis-firehose-source-basic/aws-kinesis-firehose-producer.groovy b/05-aws-kinesis-firehose-source-basic/aws-kinesis-firehose-producer.groovy
new file mode 100644
index 0000000..34939ca
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/aws-kinesis-firehose-producer.groovy
@@ -0,0 +1,9 @@
+// camel-k: dependency=camel-aws2-kinesis
+//
+// Apache Camel Kinesis Consumer
+//
+// This is just a sample producer for AWS that creates 100 messages every 3 seconds
+from('timer:java?period=3000&repeatCount=100')
+ .setBody()
+ .simple('Hello Camel K')
+ .to('aws2-kinesis-firehose:stream?accessKey={{aws.kinesis.accessKey}}&secretKey={{aws.kinesis.secretKey}}®ion={{aws.kinesis.region}}')
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-consumer.groovy b/05-aws-kinesis-firehose-source-basic/aws-s3-consumer.groovy
new file mode 100644
index 0000000..f58d8e3
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/aws-s3-consumer.groovy
@@ -0,0 +1,8 @@
+// camel-k: dependency=camel-aws2-s3 dependency=camel-base64
+//
+// Apache Camel S3 Consumer
+//
+
+// So we unmarshal it, extract the data element which is in base64 format and decode it
+from('knative:channel/aws-s3-kinesis-firehose')
+ .log('Received: ${body}')
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-channel.yaml b/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-channel.yaml
new file mode 100644
index 0000000..f9f2fa7
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-channel.yaml
@@ -0,0 +1,7 @@
+#
+# Knative Channel
+#
+apiVersion: messaging.knative.dev/v1alpha1
+kind: InMemoryChannel
+metadata:
+ name: aws-s3-kinesis-firehose
diff --git a/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-source.yaml b/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-source.yaml
new file mode 100644
index 0000000..d0ff2ae
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/aws-s3-kinesis-firehose-source.yaml
@@ -0,0 +1,35 @@
+#
+# Apache Camel AWS S3 Source
+#
+apiVersion: sources.knative.dev/v1alpha1
+kind: CamelSource
+metadata:
+ name: camel-aws-s3-kinesis-firehose-source
+spec:
+ source:
+ integration:
+ configuration:
+ - type: secret
+ value: aws-services
+ dependencies:
+ # Needed for the json part on the flow/steps below
+ - camel:jackson
+ # Needed for the AWS S3 component component
+ - camel:camel-aws2-s3
+ flow:
+ from:
+ uri: aws2-s3:datalake25
+ parameters:
+ secretKey: "{{aws.s3.secretKey}}"
+ accessKey: "{{aws.s3.accessKey}}"
+ region: "{{aws.s3.region}}"
+ moveAfterRead: "false"
+ deleteAfterRead: "false"
+ autocloseBody: "false"
+ steps:
+ - to: "log:received?showAll=true&multiline=true"
+ sink:
+ ref:
+ apiVersion: messaging.knative.dev/v1beta1
+ kind: InMemoryChannel
+ name: aws-s3-kinesis-firehose
diff --git a/05-aws-kinesis-firehose-source-basic/aws-services.properties b/05-aws-kinesis-firehose-source-basic/aws-services.properties
new file mode 100644
index 0000000..20b72aa
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/aws-services.properties
@@ -0,0 +1,6 @@
+aws.kinesis.accessKey=accessKey
+aws.kinesis.secretKey=secretKey
+aws.kinesis.region=region
+aws.s3.accessKey=accessKey
+aws.s3.secretKey=secretKey
+aws.s3.region=region
diff --git a/05-aws-kinesis-firehose-source-basic/readme.didact.md b/05-aws-kinesis-firehose-source-basic/readme.didact.md
new file mode 100644
index 0000000..cd6600c
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/readme.didact.md
@@ -0,0 +1,184 @@
+# Camel AWS Kinesis Firehose Source Basic Example
+
+This example demonstrates how to get started with Camel based Knative sources 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.
+
+You must create an AWS Kinesis Firehose delivery stream named `stream` and point it to an S3 bucket called `datalake` followed by a random number on your AWS account.
+
+## 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/v0.15-docs/install/) for information on how to install it in your cluster.
+
+[Check if the Knative Serving is installed](didact://?commandId=vscode.didact.requirementCheck&text=kserving-project-check$$kubectl%20api-resources%20--api-group=serving.knative.dev$$kservice%2Cksvc&completion=Verified%20Knative%20services%20installation. "Verifies if Knative Serving is installed"){.didact}
+
+*Status: unknown*{#kserving-project-check}
+
+[Check if the Knative Eventing is installed](didact://?commandId=vscode.didact.requirementCheck&text=keventing-project-check$$kubectl%20api-resources%20--api-group=messaging.knative.dev$$inmemorychannels&completion=Verified%20Knative%20eventing%20services%20installation. "Verifies if Knative Eventing is installed"){.didact}
+
+*Status: unknown*{#keventing-project-check}
+
+**Knative Camel Source installed on the cluster**
+
+The cluster also needs to have installed the Knative Camel Source from the camel.yaml in the [Eventing Sources release page](https://github.com/knative/eventing-contrib/releases/tag/v0.15.0)
+
+[Check if the Knative Camel Source is installed](didact://?commandId=vscode.didact.requirementCheck&text=kservice-project-check$$kubectl%20api-resources%20--api-group=sources.knative.dev$$camelsources&completion=Verified%20Knative%20Camel%20Source%20installation. "Verifies if Knative Camel Source 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 05-aws-kinesis-firehose-source-basic
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$cd%2005-aws-kinesis-firehose-source-basic&completion=Executed%20command. "Opens a new terminal and sends the command above"){.didact})
+
+
+We're going to create a namespace named `aws-kinesis-firehose-event-source` for running the example. To create it, execute the following command:
+
+```
+kubectl create namespace aws-kinesis-firehose-event-source
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20create%20namespace%20aws-kinesis-firehose-event-source&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+Now we can set the `aws-kinesis-firehose-event-source` namespace as default namespace for the following commands:
+
+```
+kubectl config set-context --current --namespace=aws-kinesis-firehose-event-source
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20config%20set-context%20--current%20--namespace%3Daws-kinesis-firehose-event-source&completion=New%20project%20creation. "Opens a new terminal and sends the command above"){.didact})
+
+You need to install Camel K in the `aws-kinesis-firehose-event-source` 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. Preparing the environment
+
+This repository contains a simple [aws-services.properties](didact://?commandId=vscode.openFolder&projectFilePath=04-aws-kinesis-source-basic/aws-services.properties&completion=Opened%20the%aws-services.properties%20file "Opens the aws-kinesis.properties file"){.didact} that contains the access key and secret key for accessing the AWS Kinesis stream.
+
+```
+kubectl create secret generic aws-services --from-file=aws-services.properties
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20create%20secret%20generic%20aws-services%20--from-file%3Daws-services.properties&completion=secret%20%22aws-services%22%20created. "Create a secret with AWS Kinesis credentials"){.didact})
+
+As the example levareges [Knative Eventing channels](https://knative.dev/v0.15-docs/eventing/channels/), we need to create the one that the example will use:
+
+```
+kubectl apply -f aws-s3-kinesis-firehose-channel.yaml
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-kinesis-firehose-channel.yaml&completion=inmemorychannel.messaging.knative.dev/aws-s3-kinesis-firehose$20created. "Create a Knative InMemoryChannel named aws-kinesis"){.didact})
+
+
+## 2. Running a Camel Source
+
+This repository contains a simple Camel Source based on the [AWS Kinesis component](https://camel.apache.org/components/latest/aws-kinesis-component.html) that forward streaming events received on the AWS Kinesis delivery stream to a Knative channel named `aws-s3-kinesis-firehose`.
+
+Use the following command to deploy the Camel Source:
+
+```
+kubectl apply -f aws-s3-kinesis-firehose-source.yaml
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20apply%20-f%20aws-s3-kinesis-firehose-source.yaml&completion=camelsource.sources.knative.dev/camel-aws-s3-kinesis-firehose-source%20created. "Opens a new terminal and sends the command above"){.didact})
+
+## 2. Running a basic integration to create Kinesis events for consumption by the Camel Source
+
+You need a producer adding data to a Kinesis stream to try this example. This integration
+comes with a sample producer that will send 100 messages with the text `Hello Camel K`
+every 3 seconds.
+
+```
+kamel run --secret aws-services aws-kinesis-firehose-producer.groovy
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20--secret%20aws-kinesis%20aws-kinesis-firehose-producer.groovy&completion=Camel%20K%20aws-kinesis-firehose-producer%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.
+
+## 3. Running a basic integration to forward Kinesis events to the console
+
+```
+kamel run aws-s3-consumer.groovy --dev
+```
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kamel%20run%20aws-s3-consumer.groovy%20--dev&completion=Camel%20K%20aws-s3-consumer%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.
+
+## 4. Uninstall
+
+To cleanup everything, execute the following command:
+
+```kubectl delete namespace aws-kinesis-firehose-event-source```
+
+([^ execute](didact://?commandId=vscode.didact.sendNamedTerminalAString&text=camelTerm$$kubectl%20delete%20namespace%20aws-kinesis-source-basic&completion=Removed%20the%20namespace%20from%20the%20cluster. "Cleans up the cluster after running the example"){.didact})
diff --git a/05-aws-kinesis-firehose-source-basic/readme.md b/05-aws-kinesis-firehose-source-basic/readme.md
new file mode 120000
index 0000000..c0bf82f
--- /dev/null
+++ b/05-aws-kinesis-firehose-source-basic/readme.md
@@ -0,0 +1 @@
+readme.didact.md
\ No newline at end of file