From 4976d33b01e6eda378aa4f18fa373a623848d27d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bj=C3=B6rkstr=C3=B6m?= Date: Fri, 19 Feb 2021 15:22:57 +0200 Subject: [PATCH 001/100] Update output for Getting a secret Indicate that the response is JSON and not plain text. --- daprdocs/content/en/getting-started/get-started-component.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/getting-started/get-started-component.md b/daprdocs/content/en/getting-started/get-started-component.md index ef9d3038a..73c13bdfd 100644 --- a/daprdocs/content/en/getting-started/get-started-component.md +++ b/daprdocs/content/en/getting-started/get-started-component.md @@ -86,8 +86,8 @@ Invoke-RestMethod -Uri 'http://localhost:3500/v1.0/secrets/my-secret-store/my-se You should see output with the secret you stored in the JSON file. -``` -"I'm Batman" +```json +{"my-secret":"I'm Batman"} ``` Next step: Explore Dapr quickstarts >> From 51108827bbf894d7f0b1153274523b322b93471b Mon Sep 17 00:00:00 2001 From: xavier geerinck Date: Tue, 23 Feb 2021 15:55:53 +0100 Subject: [PATCH 002/100] Fixing Blob Storage Documentation some mistakes where made when adding codetabs, fixed those closing tags. Also fixed title tags for examples --- .../supported-bindings/blobstorage.md | 104 +++++++++--------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md index 7721dfb7e..e6c34d75b 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md @@ -68,47 +68,48 @@ To perform a create blob operation, invoke the Azure Blob Storage binding with a #### Examples + +##### Saving to a random generated UUID file + {{< tabs Windows Linux >}} + {{% codetab %}} + On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} -**Saving to a random generated UUID file** -{{% codetab %}} -On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) -```bash -curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} - -{{% codetab %}} -```bash -curl -d '{ "operation": "create", "data": "Hello World" }' \ - http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World" }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} {{< /tabs >}} -**Saving to a specific file** +##### Saving to a specific file {{< tabs Windows Linux >}} -{{% codetab %}} -```bash -curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"blobName\": \"my-test-file.txt\" } }" \ - http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"blobName\": \"my-test-file.txt\" } }" \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} -{{% codetab %}} -```bash -curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "blobName": "my-test-file.txt" } }' \ - http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "blobName": "my-test-file.txt" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} {{< /tabs >}} -**Saving a file** +##### Saving a file To upload a file, encode it as Base64 and let the Binding know to deserialize it: @@ -136,18 +137,18 @@ Then you can upload it as you would normally: {{< tabs Windows Linux >}} -{{% codetab %}} -```bash -curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"blobName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"blobName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} -{{% codetab %}} -```bash -curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "blobName": "my-test-file.jpg" } }' \ - http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "blobName": "my-test-file.jpg" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} {{< /tabs >}} @@ -179,18 +180,20 @@ To perform a get blob operation, invoke the Azure Blob Storage binding with a `P {{< tabs Windows Linux >}} -{{% codetab %}} -```bash -curl -d '{ \"operation\": \"get\", \"metadata\": { \"blobName\": \"myblob\" }}' http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d '{ \"operation\": \"get\", \"metadata\": { \"blobName\": \"myblob\" }}' http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} -{{% codetab %}} -```bash -curl -d '{ "operation": "get", "metadata": { "blobName": "myblob" }}' \ - http://localhost:/v1.0/bindings/ -``` -{{% /codetab %}} + {{% codetab %}} + ```bash + curl -d '{ "operation": "get", "metadata": { "blobName": "myblob" }}' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} #### Response @@ -201,6 +204,7 @@ The response body contains the value stored in the blob object. By default the Azure Blob Storage output binding auto generates a UUID as the blob filename and is not assigned any system or custom metadata to it. It is configurable in the metadata property of the message (all optional). Applications publishing to an Azure Blob Storage output binding should send a message with the following format: + ```json { "data": "file content", From d5efe6487b64cf1ca8356bbc16e06cb89bede081 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Wed, 24 Feb 2021 11:08:52 -0800 Subject: [PATCH 003/100] Add dotnet sdk --- .gitmodules | 3 +++ daprdocs/config.toml | 6 ++++++ sdkdocs/dotnet | 1 + 3 files changed, 10 insertions(+) create mode 160000 sdkdocs/dotnet diff --git a/.gitmodules b/.gitmodules index 21fb9751c..be99ad3b7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "sdkdocs/php"] path = sdkdocs/php url = https://github.com/dapr/php-sdk.git +[submodule "sdkdocs/dotnet"] + path = sdkdocs/dotnet + url = https://github.com/dapr/dotnet-sdk.git diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 814c7177b..3dccca2e7 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -46,6 +46,12 @@ id = "UA-149338238-3" [[module.mounts]] source = "../sdkdocs/php/daprdocs/content/en/php-sdk-docs" target = "content/developing-applications/sdks/php" + [[module.mounts]] + source = "../sdkdocs/dotnet/daprdocs/content/en/dotnet-sdk-docs" + target = "content/developing-applications/sdks/dotnet" + [[module.mounts]] + source = "../sdkdocs/dotnet/daprdocs/content/en/dotnet-sdk-contributing" + target = "content/contributing/" # Markdown Engine - Allow inline html [markup] diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet new file mode 160000 index 000000000..008a4f35d --- /dev/null +++ b/sdkdocs/dotnet @@ -0,0 +1 @@ +Subproject commit 008a4f35dd953669891a8414cd8c3f96bcf9b9dd From 4cff5ca0fbe66ac9d74171d113ada1f151e8fe9a Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Wed, 24 Feb 2021 11:09:03 -0800 Subject: [PATCH 004/100] Update references --- daprdocs/content/en/_index.md | 4 ++-- .../en/developing-applications/sdks/_index.md | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/_index.md b/daprdocs/content/en/_index.md index 670b9c74e..0db703ac4 100644 --- a/daprdocs/content/en/_index.md +++ b/daprdocs/content/en/_index.md @@ -77,7 +77,7 @@ Welcome to the Dapr documentation site!
Language SDKs

Create Dapr applications in your preferred language using the Dapr SDKs.

- + .NET logo
@@ -109,7 +109,7 @@ Welcome to the Dapr documentation site!
- + PHP logo
diff --git a/daprdocs/content/en/developing-applications/sdks/_index.md b/daprdocs/content/en/developing-applications/sdks/_index.md index 1e86e16d5..f3ab7da55 100644 --- a/daprdocs/content/en/developing-applications/sdks/_index.md +++ b/daprdocs/content/en/developing-applications/sdks/_index.md @@ -18,7 +18,7 @@ The Dapr SDKs are the easiest way for you to get Dapr into your application. Cho - Interact with external resources through input and output [bindings]({{< ref bindings >}}) - Get [secrets]({{< ref secrets >}}) from secret stores - Interact with [virtual actors]({{< ref actors >}}) -- **Service extensions**: The Dapr service extensions allow you to create services that can: +- **Server extensions**: The Dapr service extensions allow you to create services that can: - Be [invoked]({{< ref service-invocation >}}) by other services - [Subscribe]({{< ref pubsub >}}) to topics - **Actor SDK**: The Dapr Actor SDK allows you to build virtual actors with: @@ -29,13 +29,13 @@ The Dapr SDKs are the easiest way for you to get Dapr into your application. Cho ## SDK languages -| Language | Status | Client SDK | Service Extensions | Actor SDK | -|----------|:-----:|:----------:|:-----------:|:---------:| -| [.NET](https://github.com/dapr/dotnet-sdk) | Stable | ✔ | ✔
ASP.NET Core | ✔ | -| [Python]({{< ref python >}}) | Stable | ✔ | ✔
[gRPC]({{< ref python-grpc.md >}}) | ✔
[FastAPI]({{< ref python-fastapi.md >}})
[Flask]({{< ref python-flask.md >}}) | -| [Java](https://github.com/dapr/java-sdk) | Stable | ✔ | ✔
Spring Boot | ✔ | +| Language | Status | Client SDK | Server extensions | Actor SDK | +|----------|:------|:----------:|:-----------:|:---------:| +| [.NET]({{< ref dotnet >}}) | Stable | ✔ | [ASP.NET Core]({{< ref dotnet-aspnet >}}) | ✔ | +| [Python]({{< ref python >}}) | Stable | ✔ | [gRPC]({{< ref python-grpc.md >}}) | [FastAPI]({{< ref python-fastapi.md >}})
[Flask]({{< ref python-flask.md >}}) | +| [Java](https://github.com/dapr/java-sdk) | Stable | ✔ | Spring Boot | ✔ | | [Go](https://github.com/dapr/go-sdk) | Stable | ✔ | ✔ | | -| [PHP](https://github.com/dapr/php-sdk) | Stable | ✔ | ✔ | ✔ | +| [PHP]({{< ref php >}}) | Stable | ✔ | ✔ | ✔ | | [C++](https://github.com/dapr/cpp-sdk) | In development | ✔ | | | [Rust]() | In development | ✔ | | | | [Javascript]() | In development| ✔ | | From 4ac4670d978665cda5796743740104bb53cc79c8 Mon Sep 17 00:00:00 2001 From: Peter <45140408+pelithne@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:02:30 +0100 Subject: [PATCH 005/100] Update security-concept.md Minor wording fix, as described in https://github.com/dapr/docs/issues/1264 --- daprdocs/content/en/concepts/security-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/security-concept.md b/daprdocs/content/en/concepts/security-concept.md index 66a2bd304..c130d0fe4 100644 --- a/daprdocs/content/en/concepts/security-concept.md +++ b/daprdocs/content/en/concepts/security-concept.md @@ -50,7 +50,7 @@ The diagram below shows how the Sentry system service issues certificates for ap ### mTLS in Kubernetes -The diagram below shows how the Sentry system service issues certificates for applications based on the root/issuer certificate that is provided by an operator or generated by the Sentry service as stored as a Kubernetes secret +The diagram below shows how the Sentry system service issues certificates for applications based on the root/issuer certificate that is provided by an operator or generated by the Sentry service and stored as a Kubernetes secret From d698cd212fe1aada4294ccc91787ad44ab0ff21c Mon Sep 17 00:00:00 2001 From: darron froese Date: Thu, 25 Feb 2021 18:28:59 -0700 Subject: [PATCH 006/100] Update setup-nats-streaming.md (#1258) Missing a single - --- .../setup-pubsub/supported-pubsub/setup-nats-streaming.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-nats-streaming.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-nats-streaming.md index 004051d77..e8fb5d5a5 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-nats-streaming.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-nats-streaming.md @@ -78,7 +78,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr You can run a NATS server locally using Docker: ```bash -docker run -d -name nats-streaming -p 4222:4222 -p 8222:8222 nats-streaming +docker run -d --name nats-streaming -p 4222:4222 -p 8222:8222 nats-streaming ``` You can then interact with the server using the client port: `localhost:4222`. From ba0c8eddb8453eb4c923f5121e6296132912508d Mon Sep 17 00:00:00 2001 From: Sahan Serasinghe Date: Fri, 26 Feb 2021 12:29:46 +1030 Subject: [PATCH 007/100] Update get-started-api.md (#1268) Improved grammar to get the message clearly across to the reader. Co-authored-by: Mark Fussell --- daprdocs/content/en/getting-started/get-started-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/get-started-api.md b/daprdocs/content/en/getting-started/get-started-api.md index a574ae797..b795de4f0 100644 --- a/daprdocs/content/en/getting-started/get-started-api.md +++ b/daprdocs/content/en/getting-started/get-started-api.md @@ -19,7 +19,7 @@ Run the following command to launch a Dapr sidecar that will listen on port 3500 dapr run --app-id myapp --dapr-http-port 3500 ``` -With this command, no custom component folder was defined so the Dapr uses the default component definitions that were created during the init flow (these can be found under `$HOME/.dapr/components` on Linux or MacOS and under `%USERPROFILE%\.dapr\components` on Windows). These tell Dapr to the local Redis Docker container as a state store and message broker. +With this command, no custom component folder was defined, so Dapr uses the default component definitions that were created during the init flow (these can be found under `$HOME/.dapr/components` on Linux or MacOS and under `%USERPROFILE%\.dapr\components` on Windows). These tell Dapr to use the local Redis Docker container as a state store and message broker. ## Step 2: Save state From 78e2b60c82fdc1cbd97cd6552ebe86d4895c2451 Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Fri, 26 Feb 2021 18:33:13 -0800 Subject: [PATCH 008/100] Fix mysql name in helm and Docker. --- .../setup-state-store/supported-state-stores/setup-mysql.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-mysql.md b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-mysql.md index f49cfb36d..434a7bf8f 100644 --- a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-mysql.md +++ b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-mysql.md @@ -64,7 +64,7 @@ Run an instance of MySQL. You can run a local instance of MySQL in Docker CE wit This example does not describe a production configuration because it sets the password in plain text and the user name is left as the MySQL default of "root". ```bash -docker run --name dapr_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest +docker run --name dapr-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest ``` {{% /codetab %}} @@ -78,7 +78,7 @@ We can use [Helm](https://helm.sh/) to quickly create a MySQL instance in our Ku ```bash helm repo add bitnami https://charts.bitnami.com/bitnami - helm install dapr_mysql bitnami/mysql + helm install dapr-mysql bitnami/mysql ``` 1. Run `kubectl get pods` to see the MySQL containers now running in your cluster. From 0aaed44c5b2c23ac9097195e262fc43d3b86cd8b Mon Sep 17 00:00:00 2001 From: Joni Collinge Date: Sun, 28 Feb 2021 08:16:45 +0000 Subject: [PATCH 009/100] Update setup-azure-servicebus.md --- .../setup-pubsub/supported-pubsub/setup-azure-servicebus.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-azure-servicebus.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-azure-servicebus.md index 98200e691..c43196cc9 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-azure-servicebus.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-azure-servicebus.md @@ -44,6 +44,10 @@ spec: value: 10 - name: autoDeleteOnIdleInSec # Optional value: 10 + - name: maxReconnectionAttempts # Optional + value: 30 + - name: connectionRecoveryInSec # Optional + value: 2 ``` > __NOTE:__ The above settings are shared across all topics that use this component. @@ -69,6 +73,8 @@ The above example uses secrets as plain strings. It is recommended to use a secr | prefetchCount | N |Defines the number of prefetched messages (use for high throughput / low latency scenarios)| `5` | defaultMessageTimeToLiveInSec | N |Default message time to live. | `10` | autoDeleteOnIdleInSec | N |Time in seconds to wait before auto deleting messages. | `10` +| maxReconnectionAttempts | N |Defines the maximum number of reconnect attempts. Default: `30` | `30` +| connectionRecoveryInSec | N |Time in seconds to wait between connection recovery attempts. Defaults: `2` | `2` ## Create an Azure Service Bus From 5b52a108c1a54895e8e1c4f506d24970833fa148 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 1 Mar 2021 13:43:58 -0800 Subject: [PATCH 010/100] Update dotnet docs --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 008a4f35d..5f5326b83 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 008a4f35dd953669891a8414cd8c3f96bcf9b9dd +Subproject commit 5f5326b83fa52fe1965f60f2161eb18b2940cc10 From a148688fd896f7ef6469b6630ed5dd1b814838bb Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Tue, 2 Mar 2021 17:00:46 -0800 Subject: [PATCH 011/100] Fixing helm chart readme link --- .../en/operations/hosting/kubernetes/kubernetes-production.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md index d9e70815f..4b7e012f2 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md @@ -21,7 +21,7 @@ Use the following resource settings might serve as a starting point. Requirement | Placement | Limit: 1, Request: 250m | Limit: 150Mi, Request: 75Mi | Dashboard | Limit: 200m, Request: 50m | Limit: 200Mi, Request: 20Mi -When installing Dapr using Helm, no default limit/request values are set. Each component has a `resources` option (for example, `dapr_dashboard.resources`), which you can use to tune the Dapr control plane to fit your environment. The [Helm chart readme](https://github.com/dapr/dapr/blob/master/charts/dapr/README) has detailed information and examples. For local/dev installations, you might simply want to skip configuring the `resources` options. +When installing Dapr using Helm, no default limit/request values are set. Each component has a `resources` option (for example, `dapr_dashboard.resources`), which you can use to tune the Dapr control plane to fit your environment. The [Helm chart readme](https://github.com/dapr/dapr/blob/master/charts/dapr/README.md) has detailed information and examples. For local/dev installations, you might simply want to skip configuring the `resources` options. ### Optional components From 5067042e9b732dd1d49410037fd00a31a0550457 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 3 Mar 2021 22:24:27 +0100 Subject: [PATCH 012/100] At "list" permission for non-default namespace List permission is necessary to perform bulk secret read. If not present Dapr sidecar will crash and restart on a new different gprc port. --- daprdocs/content/en/operations/components/component-secrets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/component-secrets.md b/daprdocs/content/en/operations/components/component-secrets.md index f535ac5ee..f494b89bd 100644 --- a/daprdocs/content/en/operations/components/component-secrets.md +++ b/daprdocs/content/en/operations/components/component-secrets.md @@ -121,7 +121,7 @@ metadata: rules: - apiGroups: [""] resources: ["secrets"] - verbs: ["get"] + verbs: ["get", "list"] --- kind: RoleBinding From ff0f90dd5a2ae8830058569d9086aebc075fcca9 Mon Sep 17 00:00:00 2001 From: Fabian Date: Wed, 3 Mar 2021 22:32:15 +0100 Subject: [PATCH 013/100] Fix link --- daprdocs/content/en/contributing/contributing-docs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/contributing/contributing-docs.md b/daprdocs/content/en/contributing/contributing-docs.md index fd671fd02..ae8c6dfd7 100644 --- a/daprdocs/content/en/contributing/contributing-docs.md +++ b/daprdocs/content/en/contributing/contributing-docs.md @@ -22,7 +22,7 @@ Follow the instructions in the repository [README.md](https://github.com/dapr/do The Dapr docs handles branching differently than most code repositories. Instead of having a `master` or `main` branch, every branch is labeled to match the major and minor version of a runtime release. For the full list visit the [Docs repo](https://github.com/dapr/docs#branch-guidance) -Overall, all updates should go into the docs branch for the latest release of Dapr. You can find this directly at https://github.com/dapr/docs, as the latest release will be the default branch. For any docs changes that are applicable to a release candidate or a pre-release version of the docs, make your changes into that particular branch. +Overall, all updates should go into the docs branch for the latest release of Dapr. You can find this directly at [https://github.com/dapr/docs](https://github.com/dapr/docs), as the latest release will be the default branch. For any docs changes that are applicable to a release candidate or a pre-release version of the docs, make your changes into that particular branch. For example, if you are fixing a typo, adding notes, or clarifying a point, make your changes into the default Dapr branch. If you are documenting an upcoming change to a component or the runtime, make your changes to the pre-release branch. Branches can be found in the [Docs repo](https://github.com/dapr/docs#branch-guidance) From bfec9dc2512e973193fc3f8841c6630f5bc333d0 Mon Sep 17 00:00:00 2001 From: newbe36524 Date: Thu, 4 Mar 2021 13:58:52 +0800 Subject: [PATCH 014/100] Add content that translated into zh_Hans --- .gitmodules | 4 ++++ daprdocs/config.toml | 40 ++++++++++++++++++++++++++++++++++++++++ l18n/docs-zh | 1 + 3 files changed, 45 insertions(+) create mode 160000 l18n/docs-zh diff --git a/.gitmodules b/.gitmodules index be99ad3b7..53189ae90 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,7 @@ [submodule "sdkdocs/dotnet"] path = sdkdocs/dotnet url = https://github.com/dapr/dotnet-sdk.git +[submodule "l18n/docs-zh"] + path = l18n/docs-zh + url = https://github.com/dapr/docs-zh.git + branch = v1.0_content diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 3dccca2e7..7957dd23c 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -10,6 +10,18 @@ enableGitInfo = true # Language Configuration languageCode = "en-us" +[languages] + [languages.en] + title = "English" + weight = 1 + contentDir = "content/en" + languageName = "English" + [languages.zh-hans] + title = "简体中文" + weight = 2 + contentDir = "content/zh-hans" + languageName = "简体中文" + # Disable categories & tags disableKinds = ["taxonomy", "term"] @@ -22,6 +34,7 @@ id = "UA-149338238-3" [[module.mounts]] source = "content/en" target = "content" + lang = "en" [[module.mounts]] source = "static" target = "static" @@ -37,21 +50,48 @@ id = "UA-149338238-3" [[module.mounts]] source = "archetypes" target = "archetypes" + [[module.mounts]] source = "../sdkdocs/python/daprdocs/content/en/python-sdk-docs" target = "content/developing-applications/sdks/python" + lang = "en" [[module.mounts]] source = "../sdkdocs/python/daprdocs/content/en/python-sdk-contributing" target = "content/contributing/" + lang = "en" [[module.mounts]] source = "../sdkdocs/php/daprdocs/content/en/php-sdk-docs" target = "content/developing-applications/sdks/php" + lang = "en" [[module.mounts]] source = "../sdkdocs/dotnet/daprdocs/content/en/dotnet-sdk-docs" target = "content/developing-applications/sdks/dotnet" + lang = "en" [[module.mounts]] source = "../sdkdocs/dotnet/daprdocs/content/en/dotnet-sdk-contributing" target = "content/contributing/" + lang = "en" + + [[module.mounts]] + source = "../l18n/docs-zh/content/zh-hans" + target = "content" + lang = "zh-hans" + [[module.mounts]] + source = "../l18n/docs-zh/content/contributing" + target = "content/contributing/" + lang = "zh-hans" + [[module.mounts]] + source = "../l18n/docs-zh/content/sdks_python" + target = "content/developing-applications/sdks/python" + lang = "zh-hans" + [[module.mounts]] + source = "../l18n/docs-zh/content/sdks_php" + target = "content/developing-applications/sdks/php" + lang = "zh-hans" + [[module.mounts]] + source = "../l18n/docs-zh/content/sdks_dotnet" + target = "content/developing-applications/sdks/dotnet" + lang = "zh-hans" # Markdown Engine - Allow inline html [markup] diff --git a/l18n/docs-zh b/l18n/docs-zh new file mode 160000 index 000000000..e26148b86 --- /dev/null +++ b/l18n/docs-zh @@ -0,0 +1 @@ +Subproject commit e26148b866552f94a148c5ad6fe81e066775b804 From f1c48c1fd9586916262f10cce9f463cfc22f10d7 Mon Sep 17 00:00:00 2001 From: xavier geerinck Date: Thu, 4 Mar 2021 22:11:36 +0100 Subject: [PATCH 015/100] Update daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md Co-authored-by: Aaron Crawfis --- .../components/setup-bindings/supported-bindings/blobstorage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md index e6c34d75b..cacf8769c 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md @@ -69,7 +69,7 @@ To perform a create blob operation, invoke the Azure Blob Storage binding with a #### Examples -##### Saving to a random generated UUID file +##### Save text to a random generated UUID blob {{< tabs Windows Linux >}} {{% codetab %}} From 088cf1f922ec32bf75d44d086e27d0678927c672 Mon Sep 17 00:00:00 2001 From: xavier geerinck Date: Thu, 4 Mar 2021 22:11:40 +0100 Subject: [PATCH 016/100] Update daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md Co-authored-by: Aaron Crawfis --- .../components/setup-bindings/supported-bindings/blobstorage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md index cacf8769c..aa678a058 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md @@ -88,7 +88,7 @@ To perform a create blob operation, invoke the Azure Blob Storage binding with a {{< /tabs >}} -##### Saving to a specific file +##### Save text to a specific blob {{< tabs Windows Linux >}} From 5303bfdccc5b43bcbff6b118bcea62986307c129 Mon Sep 17 00:00:00 2001 From: xavier geerinck Date: Thu, 4 Mar 2021 22:11:43 +0100 Subject: [PATCH 017/100] Update daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md Co-authored-by: Aaron Crawfis --- .../components/setup-bindings/supported-bindings/blobstorage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md index aa678a058..409f8efe0 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/blobstorage.md @@ -109,7 +109,7 @@ To perform a create blob operation, invoke the Azure Blob Storage binding with a {{< /tabs >}} -##### Saving a file +##### Save a file to a blob To upload a file, encode it as Base64 and let the Binding know to deserialize it: From 06e05fd7da6dd66549bb49f30e2f945d47dffb8b Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 4 Mar 2021 14:29:33 -0800 Subject: [PATCH 018/100] Fixing typo --- daprdocs/content/en/concepts/security-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/security-concept.md b/daprdocs/content/en/concepts/security-concept.md index c130d0fe4..dd097337e 100644 --- a/daprdocs/content/en/concepts/security-concept.md +++ b/daprdocs/content/en/concepts/security-concept.md @@ -11,7 +11,7 @@ This article addresses multiple security considerations when using Dapr in a dis Several of the areas above are addressed through encryption of data in transit. One of the security mechanisms that Dapr employs for encrypting data in transit is [mutual authentication TLS](https://en.wikipedia.org/wiki/Mutual_authentication) or mTLS. mTLS offers a few key features for network traffic inside your application: -- Two way authentication - the client proving its identify to the server, and vice-versa +- Two way authentication - the client proving its identity to the server, and vice-versa - An encrypted channel for all in-flight communication, after two-way authentication is established Mutual TLS is useful in almost all scenarios, but especially so for systems subject to regulations such as [HIPAA](https://en.wikipedia.org/wiki/Health_Insurance_Portability_and_Accountability_Act) and [PCI](https://en.wikipedia.org/wiki/Payment_Card_Industry_Data_Security_Standard). From 5472fe260464f96e71d99a72377d8a43bc1add64 Mon Sep 17 00:00:00 2001 From: Charlie Stanley Date: Tue, 23 Feb 2021 15:32:14 -0800 Subject: [PATCH 019/100] Adding automatic link validation --- .github/workflows/link_validation.yaml | 29 +++++++++++++++++++ daprdocs/content/en/concepts/faq.md | 2 +- .../en/contributing/contributing-overview.md | 2 +- .../setup-pubsub/pubsub-namespaces.md | 4 +-- .../azure-keyvault-managed-identity.md | 2 +- .../supported-state-stores/setup-redis.md | 2 +- .../self-hosted/self-hosted-no-docker.md | 4 +-- 7 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/link_validation.yaml diff --git a/.github/workflows/link_validation.yaml b/.github/workflows/link_validation.yaml new file mode 100644 index 000000000..e0bcbfae7 --- /dev/null +++ b/.github/workflows/link_validation.yaml @@ -0,0 +1,29 @@ +name: validate-links + +on: + push: + branches: + - v* + tags: + - v* + pull_request: + branches: + - v* +jobs: + validate: + runs-on: ubuntu-latest + env: + PYTHON_VER: 3.7 + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ env.PYTHON_VER }} + uses: actions/setup-python@v2 + with: + python-version: ${{ env.PYTHON_VER }} + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + pip3 install setuptools wheel twine tox mechanical-markdown + - name: Check Markdown Files + run: | + for name in `find . -name "*.md"`; do echo -e "------\n$name" ; mm.py -l $name || exit 1 ;done diff --git a/daprdocs/content/en/concepts/faq.md b/daprdocs/content/en/concepts/faq.md index aaad28c0b..8106ef646 100644 --- a/daprdocs/content/en/concepts/faq.md +++ b/daprdocs/content/en/concepts/faq.md @@ -36,7 +36,7 @@ The Dapr project is focused on performance due to the inherent discussion of Dap ### What is the relationship between Dapr, Orleans and Service Fabric Reliable Actors? The actors in Dapr are based on the same virtual actor concept that [Orleans](https://www.microsoft.com/research/project/orleans-virtual-actors/) started, meaning that they are activated when called and deactivated after a period of time. If you are familiar with Orleans, Dapr C# actors will be familiar. Dapr C# actors are based on [Service Fabric Reliable Actors](https://docs.microsoft.com/azure/service-fabric/service-fabric-reliable-actors-introduction) (which also came from Orleans) and enable you to take Reliable Actors in Service Fabric and migrate them to other hosting platforms such as Kubernetes or other on-premise environments. -Also Dapr is about more than just actors. It provides you with a set of best practice building blocks to build into any microservices application. See [Dapr overview](https://github.com/dapr/docs/blob/master/overview/README.md). +Also Dapr is about more than just actors. It provides you with a set of best practice building blocks to build into any microservices application. See [Dapr overview]({{< ref overview.md >}}). ### Differences between Dapr from an actor framework diff --git a/daprdocs/content/en/contributing/contributing-overview.md b/daprdocs/content/en/contributing/contributing-overview.md index cc9c81cd2..c8b72c60b 100644 --- a/daprdocs/content/en/contributing/contributing-overview.md +++ b/daprdocs/content/en/contributing/contributing-overview.md @@ -38,7 +38,7 @@ Before you submit an issue, make sure you've checked the following: - 👎 down-vote 1. For bugs - Check it's not an environment issue. For example, if running on Kubernetes, make sure prerequisites are in place. (state stores, bindings, etc.) - - You have as much data as possible. This usually comes in the form of logs and/or stacktrace. If running on Kubernetes or other environment, look at the logs of the Dapr services (runtime, operator, placement service). More details on how to get logs can be found [here](https://github.com/dapr/docs/tree/master/best-practices/troubleshooting/logs.md). + - You have as much data as possible. This usually comes in the form of logs and/or stacktrace. If running on Kubernetes or other environment, look at the logs of the Dapr services (runtime, operator, placement service). More details on how to get logs can be found [here]({{< ref "logs-troubleshooting.md" >}}). 1. For proposals - Many changes to the Dapr runtime may require changes to the API. In that case, the best place to discuss the potential feature is the main [Dapr repo](https://github.com/dapr/dapr). - Other examples could include bindings, state stores or entirely new components. diff --git a/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md b/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md index fa186b403..a845e545b 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md @@ -43,7 +43,7 @@ kubectl create namespace namespace-a kubectl config set-context --current --namespace=namespace-a ``` -Install Redis (master and slave) on `namespace-a`, following [these instructions](https://github.com/dapr/docs/blob/master/howto/setup-pub-sub-message-broker/setup-redis.md). +Install Redis (master and slave) on `namespace-a`, following [these instructions]({{< ref "configure-state-pubsub.md" >}}). Now, configure `deploy/redis.yaml`, paying attention to the hostname containing `namespace-a`. @@ -125,4 +125,4 @@ kubectl delete namespace namespace-b - [Scope components to one or more applications]({{< ref "component-scopes.md" >}}) - [Use secret scoping]({{< ref "secrets-scopes.md" >}}) -- [Limit the secrets that can be read from secret stores]({{< ref "secret-scope.md" >}}) \ No newline at end of file +- [Limit the secrets that can be read from secret stores]({{< ref "secret-scope.md" >}}) diff --git a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/azure-keyvault-managed-identity.md b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/azure-keyvault-managed-identity.md index a95890410..fa1e015fe 100644 --- a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/azure-keyvault-managed-identity.md +++ b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/azure-keyvault-managed-identity.md @@ -78,7 +78,7 @@ The above example uses secrets as plain strings. It is recommended to use a loca ```bash az aks show -g -n ``` - For more detail about the roles to assign to integrate AKS with Azure Services [Role Assignment](https://github.com/Azure/aad-pod-identity/blob/master/docs/readmes/README.role-assignment.md). + For more detail about the roles to assign to integrate AKS with Azure Services [Role Assignment](https://azure.github.io/aad-pod-identity/docs/getting-started/role-assignment/). 4. Retrieve Managed Identity ID diff --git a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-redis.md b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-redis.md index 79810ee1f..bfdd6f94a 100644 --- a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-redis.md +++ b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-redis.md @@ -112,7 +112,7 @@ We can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Ku 4. Once your instance is created, you'll need to grab the Host name (FQDN) and your access key. - for the Host name navigate to the resources "Overview" and copy "Host name" - for your access key navigate to "Access Keys" under "Settings" and copy your key. -5. Finally, we need to add our key and our host to a `redis.yaml` file that Dapr can apply to our cluster. If you're running a sample, you'll add the host and key to the provided `redis.yaml`. If you're creating a project from the ground up, you'll create a `redis.yaml` file as specified in [Configuration](#configuration). Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you copied in step 4. **Note:** In a production-grade application, follow [secret management](https://github.com/dapr/docs/blob/master/concepts/components/secrets.md) instructions to securely manage your secrets. +5. Finally, we need to add our key and our host to a `redis.yaml` file that Dapr can apply to our cluster. If you're running a sample, you'll add the host and key to the provided `redis.yaml`. If you're creating a project from the ground up, you'll create a `redis.yaml` file as specified in [Configuration](#configuration). Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you copied in step 4. **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. > **NOTE:** Dapr pub/sub uses [Redis Streams](https://redis.io/topics/streams-intro) that was introduced by Redis 5.0, which isn't currently available on Azure Managed Redis Cache. Consequently, you can use Azure Managed Redis Cache only for state persistence. {{% /codetab %}} diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md index 4c550ad06..355452b3a 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md @@ -51,9 +51,9 @@ INFO[0001] leader is established. instance=Nicoletaz-L10. ``` -From here on you can follow the sample example created for the [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors/http), [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) or [dotnet-sdk](https://github.com/dapr/dotnet-sdk/tree/master/samples/Actor) for running an application with Actors enabled. +From here on you can follow the sample example created for the [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors), [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) or [dotnet-sdk]({{< ref "dotnet-actor-howto.md" >}}) for running an application with Actors enabled. -Update the state store configuration files to have the Redis host and password match the setup that you have. Additionally to enable it as a actor state store have the metadata piece added similar to the [sample Java Redis component](https://github.com/dapr/java-sdk/blob/master/examples/components/redis.yaml) definition. +Update the state store configuration files to have the Redis host and password match the setup that you have. Additionally to enable it as a actor state store have the metadata piece added similar to the [sample Java Redis component](https://github.com/dapr/java-sdk/blob/master/examples/components/state/redis.yaml) definition. ```yaml - name: actorStateStore From a7d34dc1cfee501f4a814a5405a8044c192e9b6c Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Thu, 4 Mar 2021 17:13:05 -0800 Subject: [PATCH 020/100] Add info on translations --- .../en/contributing/contributing-docs.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/daprdocs/content/en/contributing/contributing-docs.md b/daprdocs/content/en/contributing/contributing-docs.md index ae8c6dfd7..3fa66cbe5 100644 --- a/daprdocs/content/en/contributing/contributing-docs.md +++ b/daprdocs/content/en/contributing/contributing-docs.md @@ -232,3 +232,32 @@ The shortcode would be: ### References - [Docsy authoring guide](https://www.docsy.dev/docs/adding-content/) + +## Translations + +The Dapr Docs supports adding language translations into the docs using git submodules and Hugo's built in language support. + +You can find an example PR of adding Chinese language support in [PR 1286](https://github.com/dapr/docs/pull/1286). + +Steps to add a language: +- Open an issue in the Docs repo requesting to create a new language-specific docs repo +- Once created, create a git submodule within the docs repo: + ```sh + git submodule add translations/ + ``` +- Add a language entry within `daprdocs/config.toml`: + ```toml + [languages.] + title = "Dapr Docs" + weight = 3 + contentDir = "content/" + languageName = "" + ``` +- Create a mount within `daprdocs/config.toml`: + ```toml + [[module.mounts]] + source = "../translations/docs-/content/" + target = "content" + lang = "" + ``` +- Repeat above step as necessary for all other translation directories \ No newline at end of file From 5ef3bf0d28b6a388f5fc4ede7120b80ccf8aa8e2 Mon Sep 17 00:00:00 2001 From: newbe36524 Date: Fri, 5 Mar 2021 12:09:35 +0800 Subject: [PATCH 021/100] Change name of submodule --- .gitmodules | 4 ++-- daprdocs/config.toml | 14 +++++++------- {l18n => translations}/docs-zh | 0 3 files changed, 9 insertions(+), 9 deletions(-) rename {l18n => translations}/docs-zh (100%) diff --git a/.gitmodules b/.gitmodules index 53189ae90..3d8a47fd8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,7 +10,7 @@ [submodule "sdkdocs/dotnet"] path = sdkdocs/dotnet url = https://github.com/dapr/dotnet-sdk.git -[submodule "l18n/docs-zh"] - path = l18n/docs-zh +[submodule "translations/docs-zh"] + path = translations/docs-zh url = https://github.com/dapr/docs-zh.git branch = v1.0_content diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 7957dd23c..8348915d3 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -12,12 +12,12 @@ languageCode = "en-us" [languages] [languages.en] - title = "English" + title = "Dapr Docs" weight = 1 contentDir = "content/en" languageName = "English" [languages.zh-hans] - title = "简体中文" + title = "Dapr 文档库" weight = 2 contentDir = "content/zh-hans" languageName = "简体中文" @@ -73,23 +73,23 @@ id = "UA-149338238-3" lang = "en" [[module.mounts]] - source = "../l18n/docs-zh/content/zh-hans" + source = "../translations/docs-zh/content/zh-hans" target = "content" lang = "zh-hans" [[module.mounts]] - source = "../l18n/docs-zh/content/contributing" + source = "../translations/docs-zh/content/contributing" target = "content/contributing/" lang = "zh-hans" [[module.mounts]] - source = "../l18n/docs-zh/content/sdks_python" + source = "../translations/docs-zh/content/sdks_python" target = "content/developing-applications/sdks/python" lang = "zh-hans" [[module.mounts]] - source = "../l18n/docs-zh/content/sdks_php" + source = "../translations/docs-zh/content/sdks_php" target = "content/developing-applications/sdks/php" lang = "zh-hans" [[module.mounts]] - source = "../l18n/docs-zh/content/sdks_dotnet" + source = "../translations/docs-zh/content/sdks_dotnet" target = "content/developing-applications/sdks/dotnet" lang = "zh-hans" diff --git a/l18n/docs-zh b/translations/docs-zh similarity index 100% rename from l18n/docs-zh rename to translations/docs-zh From 06ef57fece05da808d62b0760f3138ea0f67494f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20Kemp=C3=A9?= Date: Fri, 5 Mar 2021 09:48:36 +0100 Subject: [PATCH 022/100] Update intellij.md Add missing " --- daprdocs/content/en/developing-applications/ides/intellij.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/ides/intellij.md b/daprdocs/content/en/developing-applications/ides/intellij.md index e7facc35f..4bba54732 100644 --- a/daprdocs/content/en/developing-applications/ides/intellij.md +++ b/daprdocs/content/en/developing-applications/ides/intellij.md @@ -71,7 +71,7 @@ Add a new `` entry:
{{ end }} {{ end }} From 6b99103e0ef2dbbeea336276b9c915f7d6904b5f Mon Sep 17 00:00:00 2001 From: Sivamuthu Kumar Date: Sat, 6 Mar 2021 13:25:14 -0500 Subject: [PATCH 028/100] Add docs on AWS SSM Parameter Store secret store --- .../supported-secret-stores/_index.md | 1 + .../aws-parameter-store.md | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/aws-parameter-store.md diff --git a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md index 541ddcb7f..eda224f79 100644 --- a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md +++ b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md @@ -31,6 +31,7 @@ Table captions: | Name | Status | Component version | Since | |----------------------------------------------------------|--------| -------------------| ---- | | [AWS Secrets Manager]({{< ref aws-secret-manager.md >}}) | Alpha | v1 | 1.0 | +| [AWS SSM Parameter Store]({{< ref aws-parameter-store.md >}}) | Alpha | v1 | 1.0 | ### Google Cloud Platform (GCP) diff --git a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/aws-parameter-store.md b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/aws-parameter-store.md new file mode 100644 index 000000000..2aa797c2d --- /dev/null +++ b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/aws-parameter-store.md @@ -0,0 +1,54 @@ +--- +type: docs +title: "AWS SSM Parameter Store" +linkTitle: "AWS SSM Parameter Store" +description: Detailed information on the AWS SSM Parameter Store - secret store component +--- + +## Component format + +To setup AWS SSM Parameter Store secret store create a component of type `secretstores.aws.parameterstore`. See [this guide]({{< ref "secret-stores-overview.md#apply-the-configuration" >}}) on how to create and apply a secretstore configuration. See this guide on [referencing secrets]({{< ref component-secrets.md >}}) to retrieve and use the secret with Dapr components. + +See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes. + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: awsparameterstore + namespace: default +spec: + type: secretstores.aws.parameterstore + version: v1 + metadata: + - name: region + value: "[aws_region]" + - name: accessKey + value: "[aws_access_key]" + - name: secretKey + value: "[aws_secret_key]" + - name: sessionToken + value: "[aws_session_token]" +``` +{{% alert title="Warning" color="warning" %}} +The above example uses secrets as plain strings. It is recommended to use a local secret store such as [Kubernetes secret store]({{< ref kubernetes-secret-store.md >}}) or a [local file]({{< ref file-secret-store.md >}}) to bootstrap secure key storage. +{{% /alert %}} + +## Spec metadata fields + +| Field | Required | Details | Example | +|--------------------|:--------:|-------------------------------------------------------------------------|---------------------| +| region | Y | The specific AWS region the AWS SSM Parameter Store instance is deployed in | `"us-east-1"` | +| accessKey | Y | The AWS Access Key to access this resource | `"key"` | +| secretKey | Y | The AWS Secret Access Key to access this resource | `"secretAccessKey"` | +| sessionToken | N | The AWS session token to use | `"sessionToken"` | +## Create an AWS SSM Parameter Store instance + +Setup AWS SSM Parameter Store using the AWS documentation: https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html. + +## Related links +- [Secrets building block]({{< ref secrets >}}) +- [How-To: Retrieve a secret]({{< ref "howto-secrets.md" >}}) +- [How-To: Reference secrets in Dapr components]({{< ref component-secrets.md >}}) +- [Secrets API reference]({{< ref secrets_api.md >}}) +- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) From d249a176de8aa08e29432d15948a74a7fa372872 Mon Sep 17 00:00:00 2001 From: OpenWindow Date: Tue, 9 Mar 2021 07:13:47 -0500 Subject: [PATCH 029/100] Update state-management-overview.md Minor grammar fix. --- .../state-management/state-management-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/state-management-overview.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/state-management-overview.md index 0161e0255..284829727 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/state-management-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/state-management-overview.md @@ -15,7 +15,7 @@ When using state management your application can leverage features that would ot - Distributed concurrency and data consistency - Bulk [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations -Your application can used Dapr's state management API to save and read key/value pairs using a state store component, as shown in the diagram below. For example, by using HTTP POST you can save key/value pairs and by using HTTP GET you can read a key and have its value returned. +Your application can use Dapr's state management API to save and read key/value pairs using a state store component, as shown in the diagram below. For example, by using HTTP POST you can save key/value pairs and by using HTTP GET you can read a key and have its value returned. From 59b8442633310452a09929e6eaf31f7a447e6cd5 Mon Sep 17 00:00:00 2001 From: Sivamuthu Kumar Date: Tue, 9 Mar 2021 20:23:55 -0500 Subject: [PATCH 030/100] fix version and format markdown label on aws ssm parameter store Co-authored-by: Mukundan Sundararajan --- .../setup-secret-store/supported-secret-stores/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md index eda224f79..ee5692974 100644 --- a/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md +++ b/daprdocs/content/en/operations/components/setup-secret-store/supported-secret-stores/_index.md @@ -31,7 +31,7 @@ Table captions: | Name | Status | Component version | Since | |----------------------------------------------------------|--------| -------------------| ---- | | [AWS Secrets Manager]({{< ref aws-secret-manager.md >}}) | Alpha | v1 | 1.0 | -| [AWS SSM Parameter Store]({{< ref aws-parameter-store.md >}}) | Alpha | v1 | 1.0 | +| [AWS SSM Parameter Store]({{< ref aws-parameter-store.md >}}) | Alpha | v1 | 1.1 | ### Google Cloud Platform (GCP) From d8a9f71c50b9b4cd652bacdfc66e83ff4f0eb3b4 Mon Sep 17 00:00:00 2001 From: Aaron Quamme Date: Tue, 9 Mar 2021 21:51:55 -0600 Subject: [PATCH 031/100] Update sdk-serialization.md --- .../en/developing-applications/sdks/sdk-serialization.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md b/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md index 0e8b1f522..c9f132b1d 100644 --- a/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md +++ b/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md @@ -14,7 +14,7 @@ An SDK for Dapr should provide serialization for two use cases. First, for API o ```java DaprClient client = (new DaprClientBuilder()).build(); - client.invokeService(Verb.POST, "myappid", "saySomething", "My Message", null).block(); + client.invokeService("myappid", "saySomething", "My Message", HttpExtension.POST).block(); ``` In the example above, the app will receive a `POST` request for the `saySomething` method with the request payload as `"My Message"` - quoted since the serializer will serialize the input String to JSON. @@ -139,7 +139,7 @@ redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928 {"value":"My data value."} ``` 3. Custom serializers must serialize object to `byte[]`. -4. Custom serializers must deserilize `byte[]` to object. +4. Custom serializers must deserialize `byte[]` to object. 5. When user provides a custom serializer, it should be transferred or persisted as `byte[]`. When persisting, also encode as Base64 string. This is done natively by most JSON libraries. ```bash redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928192||message @@ -149,6 +149,6 @@ redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928 redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928192||mydata "eyJ2YWx1ZSI6Ik15IGRhdGEgdmFsdWUuIn0=" ``` -6. When serializing a object that is a `byte[]`, the serializer should just pass it through since `byte[]` shoould be already handled internally in the SDK. The same happens when deserializing to `byte[]`. +6. When serializing an object that is a `byte[]`, the serializer should just pass it through since `byte[]` should be already handled internally in the SDK. The same happens when deserializing to `byte[]`. -*As of now, the [Java SDK](https://github.com/dapr/java-sdk/) is the only Dapr SDK that implements this specification. In the near future, other SDKs will also implement the same.* \ No newline at end of file +*As of now, the [Java SDK](https://github.com/dapr/java-sdk/) is the only Dapr SDK that implements this specification. In the near future, other SDKs will also implement the same.* From a14efb0e857ad3323ebd8d342e88beb4f747b277 Mon Sep 17 00:00:00 2001 From: Jeff Foster Date: Thu, 11 Mar 2021 13:18:26 +0000 Subject: [PATCH 032/100] Remove stray `*` --- daprdocs/content/en/concepts/building-blocks-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/building-blocks-concept.md b/daprdocs/content/en/concepts/building-blocks-concept.md index 76a02addd..111c8fc16 100644 --- a/daprdocs/content/en/concepts/building-blocks-concept.md +++ b/daprdocs/content/en/concepts/building-blocks-concept.md @@ -24,6 +24,6 @@ The following are the building blocks provided by Dapr: | [**State management**]({{}}) | `/v1.0/state` | Application state is anything an application wants to preserve beyond a single session. Dapr provides a key/value-based state API with pluggable state stores for persistence. | [**Publish and subscribe**]({{}}) | `/v1.0/publish` `/v1.0/subscribe`| Pub/Sub is a loosely coupled messaging pattern where senders (or publishers) publishes messages to a topic, to which subscribers subscribe. Dapr supports the pub/sub pattern between applications. | [**Resource bindings**]({{}}) | `/v1.0/bindings` | A binding provides a bi-directional connection to an external cloud/on-premise service or system. Dapr allows you to invoke the external service through the Dapr binding API, and it allows your application to be triggered by events sent by the connected service. -| [**Actors**]({{}}) | `/v1.0/actors` | An actor is an isolated, independent unit of compute and state with single-threaded execution. Dapr provides an actor implementation based on the Virtual Actor pattern which provides a single-threaded programming model and where actors are garbage collected when not in use. See * [Actor Overview](./actors#understanding-actors) +| [**Actors**]({{}}) | `/v1.0/actors` | An actor is an isolated, independent unit of compute and state with single-threaded execution. Dapr provides an actor implementation based on the Virtual Actor pattern which provides a single-threaded programming model and where actors are garbage collected when not in use. See [Actor Overview](./actors#understanding-actors) | [**Observability**]({{}}) | `N/A` | Dapr system components and runtime emit metrics, logs, and traces to debug, operate and monitor Dapr system services, components and user applications. | [**Secrets**]({{}}) | `/v1.0/secrets` | Dapr offers a secrets building block API and integrates with secret stores such as Azure Key Vault and Kubernetes to store the secrets. Service code can call the secrets API to retrieve secrets out of the Dapr supported secret stores. From 1a0984be6a658c047ecc1d8ceb4722836e1c77e3 Mon Sep 17 00:00:00 2001 From: Jeff Foster Date: Thu, 11 Mar 2021 13:48:36 +0000 Subject: [PATCH 033/100] Fix broken link. --- .../building-blocks/pubsub/howto-publish-subscribe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md index 463d4f319..affecfbf8 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md @@ -221,7 +221,7 @@ $app->post('/dsstatus', function( $app->start(); ``` -After creating `app1.php`, and with the [SDK installed](https://github.com/dapr/php-sdk/blob/main/docs/getting-started.md), +After creating `app1.php`, and with the [SDK installed](https://docs.dapr.io/developing-applications/sdks/php/), go ahead and start the app: ```bash From 1eb7d49732fdbc2dc49f59de499d93eb822cf47f Mon Sep 17 00:00:00 2001 From: Chanyong Moon Date: Fri, 12 Mar 2021 02:05:46 +0900 Subject: [PATCH 034/100] Append `dapr.io/env` annotation. --- .../en/operations/hosting/kubernetes/kubernetes-annotations.md | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md index df0163196..12d501411 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md @@ -35,3 +35,4 @@ The following table shows all the supported pod Spec annotations supported by Da | `dapr.io/sidecar-readiness-probe-period-seconds` | How often (in seconds) to perform the sidecar readiness probe. Read more [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes). Default is `6` | `dapr.io/sidecar-readiness-probe-threshold` | When the sidecar readiness probe fails, Kubernetes will try N times before giving up. In this case, the Pod will be marked Unready. Read more about `failureThreshold` [here](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes). Default is `3` | `dapr.io/http-max-request-size` | Increasing max size of request body http and grpc servers parameter in MB to handle uploading of big files. Default is `4` MB +| `dapr.io/env` | List of environment variable to be injected into the sidecar. Strings consisting of key=value pairs separated by a comma. From 032aa71645c7ac49dfbd8590507d94c72dee78c1 Mon Sep 17 00:00:00 2001 From: tuapuikia Date: Fri, 12 Mar 2021 15:40:36 +0800 Subject: [PATCH 035/100] Update setup-dynamodb.md Update the Dynamodb states name to reflect the change in https://github.com/dapr/dapr/blob/master/cmd/daprd/main.go#L210 --- .../setup-state-store/supported-state-stores/setup-dynamodb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md index 77761e65f..9cadf1546 100644 --- a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md +++ b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md @@ -16,7 +16,7 @@ metadata: name: namespace: spec: - type: state.dynamodb + type: state.aws.dynamodb version: v1 metadata: - name: table From 1724be295e76c1b90a39193e23ebba772978ff4c Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Fri, 12 Mar 2021 11:27:51 -0800 Subject: [PATCH 036/100] Update sdk-serialization.md --- .../content/en/developing-applications/sdks/sdk-serialization.md | 1 - 1 file changed, 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md b/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md index c9f132b1d..0457f057d 100644 --- a/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md +++ b/daprdocs/content/en/developing-applications/sdks/sdk-serialization.md @@ -149,6 +149,5 @@ redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928 redis-cli MGET "ActorStateIT_StatefulActorService||StatefulActorTest||1581130928192||mydata "eyJ2YWx1ZSI6Ik15IGRhdGEgdmFsdWUuIn0=" ``` -6. When serializing an object that is a `byte[]`, the serializer should just pass it through since `byte[]` should be already handled internally in the SDK. The same happens when deserializing to `byte[]`. *As of now, the [Java SDK](https://github.com/dapr/java-sdk/) is the only Dapr SDK that implements this specification. In the near future, other SDKs will also implement the same.* From fdad3a1e0b412d592cf3695618d19e461b07ef40 Mon Sep 17 00:00:00 2001 From: Newbe36524 Date: Tue, 16 Mar 2021 10:02:45 +0800 Subject: [PATCH 037/100] Update middleware-uppercase.md (#1309) --- .../middleware/supported-middleware/middleware-uppercase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md index b139af90a..b0fac0eaf 100644 --- a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md +++ b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md @@ -10,7 +10,7 @@ The uppercase [HTTP middleware]({{< ref middleware-concept.md >}}) converts the ## Component format -In the following definition, the maximum requests per second are set to 10: +In the following definition, it make content of request body into uppercase: ```yaml apiVersion: dapr.io/v1alpha1 From 1ffe4a0c861d3568fcab7cbfc00bf8d24b157ed6 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Tue, 16 Mar 2021 08:50:36 -0700 Subject: [PATCH 038/100] Update URLs --- daprdocs/config.toml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 8348915d3..9b4b6c6b1 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -1,5 +1,5 @@ # Site Configuration -baseURL = "https://docs.dapr.io/" +baseURL = "https://v1-1.docs.dapr.io/" title = "Dapr Docs" theme = "docsy" disableFastRender = true @@ -133,16 +133,19 @@ offlineSearch = false github_repo = "https://github.com/dapr/docs" github_project_repo = "https://github.com/dapr/dapr" github_subdir = "daprdocs" -github_branch = "v1.0" +github_branch = "v1.1" # Versioning -version_menu = "v1.0 (latest)" -version = "v1.0" +version_menu = "v1.1 (edge)" +version = "v1.1" archived_version = false [[params.versions]] - version = "v1.0 (latest)" + version = "v1.1 (edge)" url = "#" +[[params.versions]] + version = "v1.0 (latest)" + url = "https://docs.dapr.io" [[params.versions]] version = "v0.11" url = "https://v0-11.docs.dapr.io" From f34787783388e06d467593e2801193f6337e0590 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Tue, 16 Mar 2021 09:19:55 -0700 Subject: [PATCH 039/100] Update dotnet docs version --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 5f5326b83..4baad5453 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 5f5326b83fa52fe1965f60f2161eb18b2940cc10 +Subproject commit 4baad5453f2de231ae7d50cb232060084e55caf7 From 6f36bb40e3dfdd24114c03c565d77f64de80d71e Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 16 Mar 2021 14:10:03 -0400 Subject: [PATCH 040/100] Adding details on backOffMaxRetries for MQTT and Hazelcast and redelivery settings to Redis --- .../setup-pubsub/supported-pubsub/setup-hazelcast.md | 1 + .../setup-pubsub/supported-pubsub/setup-mqtt.md | 1 + .../setup-pubsub/supported-pubsub/setup-redis-pubsub.md | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md index 02c8a7fdb..093042659 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md @@ -31,6 +31,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | connectionString | Y | A comma delimited string of servers. Example: "hazelcast:3000,hazelcast2:3000" | `"hazelcast:3000,hazelcast2:3000"` +| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` | ## Create a Hazelcast instance diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md index 98376c11b..6d039d9ce 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md @@ -39,6 +39,7 @@ spec: | caCert | Required for using TLS | Certificate authority certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientCert | Required for using TLS | Client certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientKey | Required for using TLS | Client key. Can be `secretKeyRef` to use a secret reference | `012345` +| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` ### Communication using TLS diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md index 84f60dc0e..173952b2b 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md @@ -39,8 +39,12 @@ The above example uses secrets as plain strings. It is recommended to use a secr |--------------------|:--------:|---------|---------| | redisHost | Y | Connection-string for the redis host | `localhost:6379`, `redis-master.default.svc.cluster.local:6379` | redisPassword | Y | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` -| consumerID | N | The consumer group ID | `"myGroup"` -| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` +| consumerID | N | The consumer group ID | `"myGroup"` +| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` +| redeliverInterval | N | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` +| processingTimeout | N | The amount time a message must be pending before attempting to redeliver it. Defaults to `"15s"`. `"0"` disables redelivery. | `"30s"` +| queueDepth | N | The size of the message queue for processing. Defaults to `"100"`. | `"1000"` +| concurrency | N | The number of concurrent workers that are processing messages. Defaults to `"10"`. | `"15"` ## Create a Redis instance From a9808ae287e4c858c04be0237bae995915090773 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Tue, 16 Mar 2021 18:50:42 -0700 Subject: [PATCH 041/100] Revert "MQTT & Hazelcast retries and Redis redelivery settings" --- .../setup-pubsub/supported-pubsub/setup-hazelcast.md | 1 - .../setup-pubsub/supported-pubsub/setup-mqtt.md | 1 - .../setup-pubsub/supported-pubsub/setup-redis-pubsub.md | 8 ++------ 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md index 093042659..02c8a7fdb 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md @@ -31,7 +31,6 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | connectionString | Y | A comma delimited string of servers. Example: "hazelcast:3000,hazelcast2:3000" | `"hazelcast:3000,hazelcast2:3000"` -| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` | ## Create a Hazelcast instance diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md index 6d039d9ce..98376c11b 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md @@ -39,7 +39,6 @@ spec: | caCert | Required for using TLS | Certificate authority certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientCert | Required for using TLS | Client certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientKey | Required for using TLS | Client key. Can be `secretKeyRef` to use a secret reference | `012345` -| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` ### Communication using TLS diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md index 173952b2b..84f60dc0e 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md @@ -39,12 +39,8 @@ The above example uses secrets as plain strings. It is recommended to use a secr |--------------------|:--------:|---------|---------| | redisHost | Y | Connection-string for the redis host | `localhost:6379`, `redis-master.default.svc.cluster.local:6379` | redisPassword | Y | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` -| consumerID | N | The consumer group ID | `"myGroup"` -| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` -| redeliverInterval | N | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` -| processingTimeout | N | The amount time a message must be pending before attempting to redeliver it. Defaults to `"15s"`. `"0"` disables redelivery. | `"30s"` -| queueDepth | N | The size of the message queue for processing. Defaults to `"100"`. | `"1000"` -| concurrency | N | The number of concurrent workers that are processing messages. Defaults to `"10"`. | `"15"` +| consumerID | N | The consumer group ID | `"myGroup"` +| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` ## Create a Redis instance From 760bb8adbe785cf1e9853d5df00b7720b3d579ee Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Tue, 16 Mar 2021 19:00:43 -0700 Subject: [PATCH 042/100] Update docs link --- .../en/operations/hosting/self-hosted/self-hosted-no-docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md index 355452b3a..cfc816865 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md @@ -51,7 +51,7 @@ INFO[0001] leader is established. instance=Nicoletaz-L10. ``` -From here on you can follow the sample example created for the [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors), [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) or [dotnet-sdk]({{< ref "dotnet-actor-howto.md" >}}) for running an application with Actors enabled. +From here on you can follow the sample example created for the [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors), [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) or [dotnet-sdk]({{< ref "dotnet-actors-howto.md" >}}) for running an application with Actors enabled. Update the state store configuration files to have the Redis host and password match the setup that you have. Additionally to enable it as a actor state store have the metadata piece added similar to the [sample Java Redis component](https://github.com/dapr/java-sdk/blob/master/examples/components/state/redis.yaml) definition. From 5b66a38c8e5db50160401bcdeeb589178de93366 Mon Sep 17 00:00:00 2001 From: Newbe36524 Date: Tue, 16 Mar 2021 10:02:45 +0800 Subject: [PATCH 043/100] Update middleware-uppercase.md (#1309) --- .../middleware/supported-middleware/middleware-uppercase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md index b139af90a..b0fac0eaf 100644 --- a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md +++ b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md @@ -10,7 +10,7 @@ The uppercase [HTTP middleware]({{< ref middleware-concept.md >}}) converts the ## Component format -In the following definition, the maximum requests per second are set to 10: +In the following definition, it make content of request body into uppercase: ```yaml apiVersion: dapr.io/v1alpha1 From a7091ca2d1fcbd27a9cb483eb958dc01d8c61225 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 16 Mar 2021 13:03:47 -0400 Subject: [PATCH 044/100] Added Kubernetes --wait and --timeout flags to the CLI documentation --- .../en/operations/hosting/kubernetes/kubernetes-deploy.md | 7 ++++++- daprdocs/content/en/reference/cli/dapr-init.md | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md index 1d9372851..e42d4e223 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md @@ -65,7 +65,6 @@ The default namespace when initializing Dapr is `dapr-system`. You can override dapr init -k -n mynamespace ``` - ### Install in highly available mode You can run Dapr with 3 replicas of each control plane pod in the dapr-system namespace for [production scenarios]({{< ref kubernetes-production.md >}}). @@ -82,6 +81,12 @@ Dapr is initialized by default with [mTLS]({{< ref "security-concept.md#sidecar- dapr init -k --enable-mtls=false ``` +### Wait for the installation to complete (default timeout is 300s/5m) + +```bash +dapr init -k --wait --timeout 600 +``` + ### Uninstall Dapr on Kubernetes with CLI Run the following command on your local machine to uninstall Dapr on your cluster: diff --git a/daprdocs/content/en/reference/cli/dapr-init.md b/daprdocs/content/en/reference/cli/dapr-init.md index 959a4324f..bef9afb49 100644 --- a/daprdocs/content/en/reference/cli/dapr-init.md +++ b/daprdocs/content/en/reference/cli/dapr-init.md @@ -27,6 +27,8 @@ dapr init [flags] | `--enable-mtls` | | `true` | Enable mTLS in your cluster | | `--help`, `-h` | | | Print this help message | | `--kubernetes`, `-k` | | `false` | Deploy Dapr to a Kubernetes cluster | +| `--wait` | | `false` | Wait for Kubernetes initialization to complete | +| `--timeout` | | `300` | The wait timeout for the Kubernetes installation | | `--namespace`, `-n` | | `dapr-system` | The Kubernetes namespace to install Dapr in | | `--network` | `DAPR_NETWORK` | | The Docker network on which to deploy the Dapr runtime | | `--runtime-version` | | `latest` | The version of the Dapr runtime to install, for example: `1.0.0` | @@ -44,6 +46,11 @@ dapr init dapr init -k ``` +### Initialize Dapr in Kubernetes and wait for the installation to complete (default timeout is 300s/5m) +```bash +dapr init -k --wait --timeout 600 +``` + ### Initialize specified version of Dapr runtime in self-hosted mode ```bash dapr init --runtime-version 0.10.0 From 07ff561c234a985ee74797d261fda7e257adc1f1 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Wed, 17 Mar 2021 12:01:52 -0400 Subject: [PATCH 045/100] Update daprdocs/content/en/reference/cli/dapr-init.md Co-authored-by: Aaron Crawfis --- daprdocs/content/en/reference/cli/dapr-init.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/cli/dapr-init.md b/daprdocs/content/en/reference/cli/dapr-init.md index bef9afb49..9f2130910 100644 --- a/daprdocs/content/en/reference/cli/dapr-init.md +++ b/daprdocs/content/en/reference/cli/dapr-init.md @@ -46,7 +46,11 @@ dapr init dapr init -k ``` -### Initialize Dapr in Kubernetes and wait for the installation to complete (default timeout is 300s/5m) +### Initialize Dapr in Kubernetes and wait for the installation to complete + + You can wait for the installation to complete its deployment with the `--wait` flag. + + The default timeout is 300s (5 min), but can be customized with the `--timeout` flag. ```bash dapr init -k --wait --timeout 600 ``` @@ -64,4 +68,4 @@ dapr init -k --runtime-version 0.10.0 ### Initialize Dapr in [slim self-hosted mode]({{< ref self-hosted-no-docker.md >}}) ```bash dapr init -s -``` \ No newline at end of file +``` From 3268dcae98f67edf24be535d714987c6704b7bfa Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Wed, 17 Mar 2021 12:02:11 -0400 Subject: [PATCH 046/100] Update daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md Co-authored-by: Aaron Crawfis --- .../en/operations/hosting/kubernetes/kubernetes-deploy.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md index e42d4e223..fd7d385a9 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md @@ -81,7 +81,11 @@ Dapr is initialized by default with [mTLS]({{< ref "security-concept.md#sidecar- dapr init -k --enable-mtls=false ``` -### Wait for the installation to complete (default timeout is 300s/5m) +### Wait for the installation to complete + + You can wait for the installation to complete its deployment with the `--wait` flag. + + The default timeout is 300s (5 min), but can be customized with the `--timeout` flag. ```bash dapr init -k --wait --timeout 600 From d4334e569a02172681625db1209deecb002d7c48 Mon Sep 17 00:00:00 2001 From: Newbe36524 Date: Tue, 16 Mar 2021 10:02:45 +0800 Subject: [PATCH 047/100] Update middleware-uppercase.md (#1309) --- .../middleware/supported-middleware/middleware-uppercase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md index b139af90a..b0fac0eaf 100644 --- a/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md +++ b/daprdocs/content/en/developing-applications/middleware/supported-middleware/middleware-uppercase.md @@ -10,7 +10,7 @@ The uppercase [HTTP middleware]({{< ref middleware-concept.md >}}) converts the ## Component format -In the following definition, the maximum requests per second are set to 10: +In the following definition, it make content of request body into uppercase: ```yaml apiVersion: dapr.io/v1alpha1 From a341f1dc2fe9695d59b051c316aa0db0dac3007c Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 16 Mar 2021 14:10:03 -0400 Subject: [PATCH 048/100] Adding details on backOffMaxRetries for MQTT and Hazelcast and redelivery settings to Redis --- .../setup-pubsub/supported-pubsub/setup-hazelcast.md | 1 + .../setup-pubsub/supported-pubsub/setup-mqtt.md | 1 + .../setup-pubsub/supported-pubsub/setup-redis-pubsub.md | 8 ++++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md index 02c8a7fdb..093042659 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast.md @@ -31,6 +31,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | connectionString | Y | A comma delimited string of servers. Example: "hazelcast:3000,hazelcast2:3000" | `"hazelcast:3000,hazelcast2:3000"` +| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` | ## Create a Hazelcast instance diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md index 98376c11b..6d039d9ce 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-mqtt.md @@ -39,6 +39,7 @@ spec: | caCert | Required for using TLS | Certificate authority certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientCert | Required for using TLS | Client certificate. Can be `secretKeyRef` to use a secret reference | `0123456789-0123456789` | clientKey | Required for using TLS | Client key. Can be `secretKeyRef` to use a secret reference | `012345` +| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. And positive number is treated as the maximum retry count. The component will wait 5 seconds between retries. | `"3"` ### Communication using TLS diff --git a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md index 84f60dc0e..173952b2b 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/supported-pubsub/setup-redis-pubsub.md @@ -39,8 +39,12 @@ The above example uses secrets as plain strings. It is recommended to use a secr |--------------------|:--------:|---------|---------| | redisHost | Y | Connection-string for the redis host | `localhost:6379`, `redis-master.default.svc.cluster.local:6379` | redisPassword | Y | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` -| consumerID | N | The consumer group ID | `"myGroup"` -| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` +| consumerID | N | The consumer group ID | `"myGroup"` +| enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` +| redeliverInterval | N | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` +| processingTimeout | N | The amount time a message must be pending before attempting to redeliver it. Defaults to `"15s"`. `"0"` disables redelivery. | `"30s"` +| queueDepth | N | The size of the message queue for processing. Defaults to `"100"`. | `"1000"` +| concurrency | N | The number of concurrent workers that are processing messages. Defaults to `"10"`. | `"15"` ## Create a Redis instance From 2f7ec519f7747a7633e4df2a943014263abd972c Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Thu, 18 Mar 2021 15:28:14 -0700 Subject: [PATCH 049/100] Add logos --- daprdocs/assets/icons/logo-black.svg | 15 +++++++++++++++ daprdocs/assets/icons/logo-blue.svg | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 daprdocs/assets/icons/logo-black.svg create mode 100644 daprdocs/assets/icons/logo-blue.svg diff --git a/daprdocs/assets/icons/logo-black.svg b/daprdocs/assets/icons/logo-black.svg new file mode 100644 index 000000000..6816cf01b --- /dev/null +++ b/daprdocs/assets/icons/logo-black.svg @@ -0,0 +1,15 @@ + + + + dark on white + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/daprdocs/assets/icons/logo-blue.svg b/daprdocs/assets/icons/logo-blue.svg new file mode 100644 index 000000000..f87fe64c3 --- /dev/null +++ b/daprdocs/assets/icons/logo-blue.svg @@ -0,0 +1,15 @@ + + + + logo large + Created with Sketch. + + + + + + + + + + \ No newline at end of file From 80912cabc4e19af89ddf038ad8ab3e1bdf310fc9 Mon Sep 17 00:00:00 2001 From: yellow chicks Date: Fri, 19 Mar 2021 13:54:01 -0500 Subject: [PATCH 050/100] Update setup-tracing.md (#1320) Co-authored-by: Mark Fussell --- .../content/en/operations/monitoring/tracing/setup-tracing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/monitoring/tracing/setup-tracing.md b/daprdocs/content/en/operations/monitoring/tracing/setup-tracing.md index 6d481dc19..85db1cd4a 100644 --- a/daprdocs/content/en/operations/monitoring/tracing/setup-tracing.md +++ b/daprdocs/content/en/operations/monitoring/tracing/setup-tracing.md @@ -16,7 +16,7 @@ the cloud or on-premises. The `tracing` section under the `Configuration` spec contains the following properties: ```yml -tracing: +spec: tracing: samplingRate: "1" zipkin: From 16b29599a877c39e665a96319a1ed62eadcc5319 Mon Sep 17 00:00:00 2001 From: Javier Vela Date: Sun, 21 Mar 2021 08:48:03 +0100 Subject: [PATCH 051/100] fix link annotated dapr & added link to all dapr annotations --- .../en/operations/hosting/kubernetes/kubernetes-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md index 87febadc4..3c5129e8c 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md @@ -10,7 +10,7 @@ description: "Overview of how to get Dapr running on your Kubernetes cluster" Dapr can be configured to run on any Kubernetes cluster. To achieve this, Dapr begins by deploying the `dapr-sidecar-injector`, `dapr-operator`, `dapr-placement`, and `dapr-sentry` Kubernetes services. These provide first-class integration to make running applications with Dapr easy. - **dapr-operator:** Manages [component]({{< ref components >}}) updates and Kubernetes services endpoints for Dapr (state stores, pub/subs, etc.) -- **dapr-sidecar-injector:** Injects Dapr into [annotated](#adding-dapr-to-a-kubernetes-cluster) deployment pods and adds the environment variables `DAPR_HTTP_PORT` and `DAPR_GRPC_PORT` to enable user-defined applications to easily communicate with Dapr without hard-coding Dapr port values. +- **dapr-sidecar-injector:** Injects Dapr into [annotated](#adding-dapr-to-a-kubernetes-deployment) deployment pods and adds the environment variables `DAPR_HTTP_PORT` and `DAPR_GRPC_PORT` to enable user-defined applications to easily communicate with Dapr without hard-coding Dapr port values. - **dapr-placement:** Used for [actors]({{< ref actors >}}) only. Creates mapping tables that map actor instances to pods - **dapr-sentry:** Manages mTLS between services and acts as a certificate authority. For more information read the [security overview]({{< ref "security-concept.md" >}}). @@ -22,7 +22,7 @@ Read [this guide]({{< ref kubernetes-deploy.md >}}) to learn how to deploy Dapr ## Adding Dapr to a Kubernetes deployment -Deploying and running a Dapr enabled application into your Kubernetes cluster is a simple as adding a few annotations to the deployment schemes. To give your service an `id` and `port` known to Dapr, turn on tracing through configuration and launch the Dapr sidecar container, you annotate your Kubernetes deployment like this. +Deploying and running a Dapr enabled application into your Kubernetes deployment is a simple as adding a few annotations to the deployment schemes. To give your service an `id` and `port` known to Dapr, turn on tracing through configuration and launch the Dapr sidecar container, you annotate your Kubernetes deployment like this. For more information check [dapr annotations]({{< ref kubernetes-annotations.md >}}) ```yml annotations: From 73526beec6ed47514e47eddf4a18f8c3db5ea239 Mon Sep 17 00:00:00 2001 From: newbe36524 Date: Sun, 21 Mar 2021 17:27:37 +0800 Subject: [PATCH 052/100] Update Chinese translations --- translations/docs-zh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/docs-zh b/translations/docs-zh index e26148b86..1806602cc 160000 --- a/translations/docs-zh +++ b/translations/docs-zh @@ -1 +1 @@ -Subproject commit e26148b866552f94a148c5ad6fe81e066775b804 +Subproject commit 1806602cccee4cc091c38d6bb06ef7b0220a53ed From e3d1b8e6b26104fe67fe533100827d920aab5239 Mon Sep 17 00:00:00 2001 From: Chris Gillum Date: Sun, 21 Mar 2021 16:35:45 -0700 Subject: [PATCH 053/100] Remove broken actors link Removing a link that resulted in a 404. The link appears to have been redundant, so I just removed it instead of correcting it, making the paragraph more consistent with the surrounding paragraphs. --- daprdocs/content/en/concepts/building-blocks-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/building-blocks-concept.md b/daprdocs/content/en/concepts/building-blocks-concept.md index 111c8fc16..f310910ce 100644 --- a/daprdocs/content/en/concepts/building-blocks-concept.md +++ b/daprdocs/content/en/concepts/building-blocks-concept.md @@ -24,6 +24,6 @@ The following are the building blocks provided by Dapr: | [**State management**]({{}}) | `/v1.0/state` | Application state is anything an application wants to preserve beyond a single session. Dapr provides a key/value-based state API with pluggable state stores for persistence. | [**Publish and subscribe**]({{}}) | `/v1.0/publish` `/v1.0/subscribe`| Pub/Sub is a loosely coupled messaging pattern where senders (or publishers) publishes messages to a topic, to which subscribers subscribe. Dapr supports the pub/sub pattern between applications. | [**Resource bindings**]({{}}) | `/v1.0/bindings` | A binding provides a bi-directional connection to an external cloud/on-premise service or system. Dapr allows you to invoke the external service through the Dapr binding API, and it allows your application to be triggered by events sent by the connected service. -| [**Actors**]({{}}) | `/v1.0/actors` | An actor is an isolated, independent unit of compute and state with single-threaded execution. Dapr provides an actor implementation based on the Virtual Actor pattern which provides a single-threaded programming model and where actors are garbage collected when not in use. See [Actor Overview](./actors#understanding-actors) +| [**Actors**]({{}}) | `/v1.0/actors` | An actor is an isolated, independent unit of compute and state with single-threaded execution. Dapr provides an actor implementation based on the Virtual Actor pattern which provides a single-threaded programming model and where actors are garbage collected when not in use. | [**Observability**]({{}}) | `N/A` | Dapr system components and runtime emit metrics, logs, and traces to debug, operate and monitor Dapr system services, components and user applications. | [**Secrets**]({{}}) | `/v1.0/secrets` | Dapr offers a secrets building block API and integrates with secret stores such as Azure Key Vault and Kubernetes to store the secrets. Service code can call the secrets API to retrieve secrets out of the Dapr supported secret stores. From 7d8911b65de13b11d58376d5f6d2305007596c52 Mon Sep 17 00:00:00 2001 From: meijin Date: Mon, 22 Mar 2021 17:42:44 +0800 Subject: [PATCH 054/100] fix app-id 'testpubapp' not match 'testpubsub' when publish --- .../building-blocks/pubsub/howto-publish-subscribe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md index affecfbf8..96d81bc5f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md @@ -367,7 +367,7 @@ dapr run --app-id testpubsub --dapr-http-port 3500 Then publish a message to the `deathStarStatus` topic: ```bash -dapr publish --publish-app-id testpubapp --pubsub pubsub --topic deathStarStatus --data '{"status": "completed"}' +dapr publish --publish-app-id testpubsub --pubsub pubsub --topic deathStarStatus --data '{"status": "completed"}' ``` {{% /codetab %}} From e93e6c48e1a33de5e6bac87ebf79ad0712068eb3 Mon Sep 17 00:00:00 2001 From: Ben Hummerstone Date: Mon, 22 Mar 2021 15:28:17 +0000 Subject: [PATCH 055/100] updated s3 binding with examples --- .../setup-bindings/supported-bindings/s3.md | 83 ++++++++++++++++++- 1 file changed, 81 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/s3.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/s3.md index deaaf0add..e38dc221d 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/s3.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/s3.md @@ -29,8 +29,8 @@ spec: value: ***************** - name: secretKey value: ***************** - - name: bucket - value: mybucket + - name: sessionToken + value: mysession ``` {{% alert title="Warning" color="warning" %}} @@ -54,6 +54,85 @@ This component supports **output binding** with the following operations: - `create` +### Create file + +To perform a create operation, invoke the AWS S3 binding with a `POST` method and the following JSON body: + +> Note: by default, a random UUID is generated. See below for Metadata support to set the name + +```json +{ + "operation": "create", + "data": "YOUR_CONTENT" +} +``` + +#### Examples + + +##### Save text to a random generated UUID file + +{{< tabs Windows Linux >}} + {{% codetab %}} + On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World" }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +##### Save text to a specific file + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-test-file.txt\" } }" \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-test-file.txt" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + + +##### Upload a file + +To upload a file, pass the file contents as the data payload; you may want to encode this in e.g. Base64 for binary content. + +Then you can upload it as you would normally: + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"(YOUR_FILE_CONTENTS)\", \"metadata\": { \"key\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "$(cat my-test-file.jpg)", "metadata": { "key": "my-test-file.jpg" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + ## Related links - [Basic schema for a Dapr component]({{< ref component-schema >}}) From 231049a368ad71127f64cb1ae0a72a87cc497baa Mon Sep 17 00:00:00 2001 From: Ben Hummerstone Date: Mon, 22 Mar 2021 15:30:36 +0000 Subject: [PATCH 056/100] added examples for gcp storage bucket binding --- .../supported-bindings/gcpbucket.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/gcpbucket.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/gcpbucket.md index e52a252cb..b00f19822 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/gcpbucket.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/gcpbucket.md @@ -70,6 +70,85 @@ This component supports **output binding** with the following operations: - `create` +### Create file + +To perform a create operation, invoke the GCP Storage Bucket binding with a `POST` method and the following JSON body: + +> Note: by default, a random UUID is generated. See below for Metadata support to set the name + +```json +{ + "operation": "create", + "data": "YOUR_CONTENT" +} +``` + +#### Examples + + +##### Save text to a random generated UUID file + +{{< tabs Windows Linux >}} + {{% codetab %}} + On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World" }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +##### Save text to a specific file + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"name\": \"my-test-file.txt\" } }" \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "name": "my-test-file.txt" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + + +##### Upload a file + +To upload a file, pass the file contents as the data payload; you may want to encode this in e.g. Base64 for binary content. + +Then you can upload it as you would normally: + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"(YOUR_FILE_CONTENTS)\", \"metadata\": { \"name\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "$(cat my-test-file.jpg)", "metadata": { "name": "my-test-file.jpg" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + ## Related links - [Basic schema for a Dapr component]({{< ref component-schema >}}) From 5e0edb517f70599e729b20cc095174605706dff4 Mon Sep 17 00:00:00 2001 From: Otto Lote Date: Mon, 22 Mar 2021 19:06:49 +0100 Subject: [PATCH 057/100] Add setup for GKE clusters --- .../hosting/kubernetes/cluster/setup-gke.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md new file mode 100644 index 000000000..9b1c5e23c --- /dev/null +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md @@ -0,0 +1,55 @@ +--- +type: docs +title: "Setup a Google Kubernetes Engine cluster" +linkTitle: "Google Kubernetes Engine" +weight: 2000 +description: "Setup a Google Kubernetes Engine cluster" +--- + +### Prerequisites + +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +- [Google Cloud SDK](https://cloud.google.com/sdk) + +## Create a new cluster +```bash +$ gcloud services enable container.googleapis.com && \ + gcloud container clusters create $CLUSTER_NAME \ + --zone $ZONE \ + --project $PROJECT_ID +``` +For more options refer to the [Google Cloud SDK docs](https://cloud.google.com/sdk/gcloud/reference/container/clusters/create), or instead create a cluster through the [Cloud Console](https://console.cloud.google.com/kubernetes) for a more interactive experience. + +{{% alert title="For private GKE clusters" color="warning" %}} +Sidecar injection will not work for private clusters without extra steps. An automatically created firewall rule for master access does not open port 4000. This is needed for Dapr sidecar injection. + +To review the relevant firewall rule: +```bash +$ gcloud compute firewall-rules list --filter="name~gke-${CLUSTER_NAME}-[0-9a-z]*-master" +``` + +To replace the existing rule and allow kubernetes master access to port 4000: +```bash +$ gcloud compute firewall-rules update --allow tcp:10250,tcp:443,tcp:4000 +``` +{{% /alert %}} + +## Retrieve your credentials for `kubectl` + +```bash +$ gcloud container clusters get-credentials $CLUSTER_NAME \ + --zone $ZONE \ + --project $PROJECT_ID +``` + +## (optional) Install Helm v3 + +1. [Install Helm v3 client](https://helm.sh/docs/intro/install/) + +> **Note:** The latest Dapr helm chart no longer supports Helm v2. Please migrate from helm v2 to helm v3 by following [this guide](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/). + +2. In case you need permissions the kubernetes dashboard (i.e. configmaps is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard" cannot list configmaps in the namespace "default", etc.) execute this command + +```bash +kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard +``` From 5448050b49c6d3798579f18fb12d52b98a0003b8 Mon Sep 17 00:00:00 2001 From: Otto Lote Date: Mon, 22 Mar 2021 19:16:50 +0100 Subject: [PATCH 058/100] Add private GKE cluster troubleshooting --- .../content/en/operations/troubleshooting/common_issues.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/troubleshooting/common_issues.md b/daprdocs/content/en/operations/troubleshooting/common_issues.md index 0d3c8a186..581a041ff 100644 --- a/daprdocs/content/en/operations/troubleshooting/common_issues.md +++ b/daprdocs/content/en/operations/troubleshooting/common_issues.md @@ -47,6 +47,8 @@ If your pod spec template is annotated correctly and you still don't see the sid If this is the case, restarting the pods will fix the issue. +If you are deploying Dapr on a private GKE cluster, sidecar injection does not work without extra steps. See [Setup a Google Kubernetes Engine cluster]({{< ref setup-gke.md >}}). + In order to further diagnose any issue, check the logs of the Dapr sidecar injector: ```bash @@ -202,4 +204,4 @@ This is usually due to one of the following issues - You may have defined the `NAMESPACE` environment variable locally or deployed your components into a different namespace in Kubernetes. Check which namespace your app and the components are deployed to. Read [scoping components to one or more applications]({{< ref "component-scopes.md" >}}) for more information. - You may have not provided a `--components-path` with the Dapr `run` commands or not placed your components into the default components folder for your OS. Read [define a component]({{< ref "get-started-component.md" >}}) for more information. -- You may have a syntax issue in component YAML file. Check your component YAML with the component [YAML samples]({{< ref "components.md" >}}). \ No newline at end of file +- You may have a syntax issue in component YAML file. Check your component YAML with the component [YAML samples]({{< ref "components.md" >}}). From 63575539878206365c39a67dd7aaec43cc6020cc Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 16 Mar 2021 14:20:48 -0400 Subject: [PATCH 059/100] Added details on the application-level dapr.io/enable-metrics annotation --- .../monitoring/metrics/metrics-overview.md | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index 7e1d3a045..e8e98eef4 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -12,9 +12,39 @@ Dapr exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you ca The metrics endpoint is enabled by default, you can disable it by passing the command line argument `--enable-metrics=false` to Dapr system processes. -The default metrics port is `9090`. This can be overridden by passing the command line argument `--metrics-port` to Daprd. +The default metrics port is `9090`. This can be overridden by passing the command line argument `--metrics-port` to Daprd. Additionally, the metrics exporter can be disabled for a specific application by setting the `dapr.io/enable-metrics: "false"` annotation to your application deployment. With the metrics exporter disabled, `daprd` will not open the metrics listening port. -To disable the metrics in the Dapr side car, you can use the `metric` spec configuration and set `enabled: false` to disable the metrics in the Dapr runtime. +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nodeapp + labels: + app: node +spec: + replicas: 1 + selector: + matchLabels: + app: node + template: + metadata: + labels: + app: node + annotations: + dapr.io/enabled: "true" + dapr.io/app-id: "nodeapp" + dapr.io/app-port: "3000" + dapr.io/enable-metrics: "false" + spec: + containers: + - name: node + image: dapriosamples/hello-k8s-node:latest + ports: + - containerPort: 3000 + imagePullPolicy: Always +``` + +To disable the metrics collection in the Dapr side cars running in a specific namespace, you can use the `metric` spec configuration and set `enabled: false` to disable the metrics in the Dapr runtime. ```yaml apiVersion: dapr.io/v1alpha1 From 18194eeea7416edf7c7f8a66cfbab0cda65d8278 Mon Sep 17 00:00:00 2001 From: Javier Vela Date: Tue, 23 Mar 2021 19:13:20 +0100 Subject: [PATCH 060/100] fix Kubernetes doc --- .../en/operations/hosting/kubernetes/kubernetes-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md index 3c5129e8c..781050e26 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md @@ -22,7 +22,7 @@ Read [this guide]({{< ref kubernetes-deploy.md >}}) to learn how to deploy Dapr ## Adding Dapr to a Kubernetes deployment -Deploying and running a Dapr enabled application into your Kubernetes deployment is a simple as adding a few annotations to the deployment schemes. To give your service an `id` and `port` known to Dapr, turn on tracing through configuration and launch the Dapr sidecar container, you annotate your Kubernetes deployment like this. For more information check [dapr annotations]({{< ref kubernetes-annotations.md >}}) +Deploying and running a Dapr enabled application into your Kubernetes cluster is as simple as adding a few annotations to the deployment schemes. To give your service an `id` and `port` known to Dapr, turn on tracing through configuration and launch the Dapr sidecar container, you annotate your Kubernetes deployment like this. For more information check [dapr annotations]({{< ref kubernetes-annotations.md >}}) ```yml annotations: From 752dbaaa3fdfd76f0d7225e323e6df2baf1299e0 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 23 Mar 2021 19:25:13 -0400 Subject: [PATCH 061/100] Tweaks per PR feedback --- .../en/operations/monitoring/metrics/metrics-overview.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index e8e98eef4..e6cda87b0 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -3,7 +3,7 @@ type: docs title: "Metrics" linkTitle: "Metrics" weight: 4000 -description: "Observing Dapr metrics" +description: "Observing Dapr metrics in Kubernetes" --- Dapr exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you can scrape to gain a greater understanding of how Dapr is behaving and to setup alerts for specific conditions. @@ -34,7 +34,8 @@ spec: dapr.io/enabled: "true" dapr.io/app-id: "nodeapp" dapr.io/app-port: "3000" - dapr.io/enable-metrics: "false" + dapr.io/enable-metrics: "true" + dapr.io/metrics-port: "9090" spec: containers: - name: node From 670a580bb1a653f8d128f5bf4fb2a70ebfdb34e7 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 23 Mar 2021 19:26:38 -0400 Subject: [PATCH 062/100] Tweaks per PR feedback --- .../en/operations/monitoring/metrics/metrics-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index e6cda87b0..e9d0b51bc 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -57,7 +57,7 @@ spec: tracing: samplingRate: "1" metric: - enabled: false + enabled: true ``` ## Metrics From fce1579065a2a8a16f0fdd4f1294ac88133f62ee Mon Sep 17 00:00:00 2001 From: Mukundan Sundararajan Date: Tue, 23 Mar 2021 16:45:45 -0700 Subject: [PATCH 063/100] Create setup-dynamodb.md --- .../setup-state-store/supported-state-stores/setup-dynamodb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md index 9cadf1546..fa1fcf9d9 100644 --- a/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md +++ b/daprdocs/content/en/operations/components/setup-state-store/supported-state-stores/setup-dynamodb.md @@ -7,7 +7,7 @@ description: Detailed information on the AWS DynamoDB state store component ## Component format -To setup a DynamoDB state store create a component of type `state.dynamodb`. See [this guide]({{< ref "howto-get-save-state.md#step-1-setup-a-state-store" >}}) on how to create and apply a state store configuration. +To setup a DynamoDB state store create a component of type `state.aws.dynamodb`. See [this guide]({{< ref "howto-get-save-state.md#step-1-setup-a-state-store" >}}) on how to create and apply a state store configuration. ```yaml apiVersion: dapr.io/v1alpha1 From b4bd54c5209db3a5674cf1ec3e2329c6c50b95e5 Mon Sep 17 00:00:00 2001 From: Karol Deland Date: Tue, 23 Mar 2021 22:45:33 -0400 Subject: [PATCH 064/100] Added some explanation on insecure ssl Using SSL is usually considered secure. In this context, it may be a good idea to explain why it's insecure. --- .../en/operations/hosting/kubernetes/kubernetes-annotations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md index df0163196..1a7a5a94b 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md @@ -20,7 +20,7 @@ The following table shows all the supported pod Spec annotations supported by Da | `dapr.io/api-token-secret` | Tells Dapr which Kubernetes secret to use for token based API authentication. By default this is not set. | `dapr.io/app-protocol` | Tells Dapr which protocol your application is using. Valid options are `http` and `grpc`. Default is `http` | `dapr.io/app-max-concurrency` | Limit the concurrency of your application. A valid value is any number larger than `0` -| `dapr.io/app-ssl` | Tells Dapr to invoke the app over an insecure SSL connection. Applies to both HTTP and gRPC. Default is `false`. +| `dapr.io/app-ssl` | Tells Dapr to invoke the app over an insecure SSL connection. Applies to both HTTP and gRPC. Traffic between your app and the Dapr sidecar is encrypted with a certificate issued by a non-trusted certificate authority, which is considered insecure. Default is `false`. | `dapr.io/metrics-port` | Sets the port for the sidecar metrics server. Default is `9090` | `dapr.io/sidecar-cpu-limit` | Maximum amount of CPU that the Dapr sidecar can use. See valid values [here](https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/). By default this is not set | `dapr.io/sidecar-memory-limit` | Maximum amount of Memory that the Dapr sidecar can use. See valid values [here](https://kubernetes.io/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/). By default this is not set From 96b30bdce5e980f094780900f478e02d1d18464d Mon Sep 17 00:00:00 2001 From: Otto Lote Date: Wed, 24 Mar 2021 10:39:27 +0100 Subject: [PATCH 065/100] Set correct hugo weight --- .../en/operations/hosting/kubernetes/cluster/setup-gke.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md index 9b1c5e23c..5a7b7607c 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md @@ -2,7 +2,7 @@ type: docs title: "Setup a Google Kubernetes Engine cluster" linkTitle: "Google Kubernetes Engine" -weight: 2000 +weight: 3000 description: "Setup a Google Kubernetes Engine cluster" --- From 8a4ffa399ad9e27d57a94ea2ed194468682d3b13 Mon Sep 17 00:00:00 2001 From: Otto Lote Date: Wed, 24 Mar 2021 10:54:16 +0100 Subject: [PATCH 066/100] Update minikube weight --- .../en/operations/hosting/kubernetes/cluster/setup-minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md index 4c9f5deff..8222d7f0b 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md @@ -2,7 +2,7 @@ type: docs title: "Setup an Minikube cluster" linkTitle: "Minikube" -weight: 2000 +weight: 1000 description: > How to setup Dapr on a Minikube cluster. --- From cffe1e3f6ed1c0a4db3861f21dcd2fe5e1bd554e Mon Sep 17 00:00:00 2001 From: Mike Casas Date: Wed, 24 Mar 2021 10:35:31 -0400 Subject: [PATCH 067/100] Grammar fix. Simple grammar fix. --- daprdocs/content/en/concepts/security-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/security-concept.md b/daprdocs/content/en/concepts/security-concept.md index dd097337e..4eef5676b 100644 --- a/daprdocs/content/en/concepts/security-concept.md +++ b/daprdocs/content/en/concepts/security-concept.md @@ -112,7 +112,7 @@ Threat modeling is a process by which potential threats, such as structural vuln ### February 2021 -In February 2021, Dapr has gone a 2nd security audit targetting it's 1.0 release by Cure53. +In February 2021, Dapr has gone through a 2nd security audit targetting it's 1.0 release by Cure53. The test focused on the following: * Dapr runtime code base evaluation since last audit From 9d4145e54291ed62264157630271a0089f7370cb Mon Sep 17 00:00:00 2001 From: Hugo Meyronneinc Date: Tue, 23 Mar 2021 17:43:20 +0100 Subject: [PATCH 068/100] feat: add shutdown docs --- .../hosting/kubernetes/kubernetes-job.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md new file mode 100644 index 000000000..7c4f9b9c6 --- /dev/null +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md @@ -0,0 +1,60 @@ +--- +type: docs +title: "Running Dapr with a Kubernetes Job" +linkTitle: "Kubernetes Jobs" +weight: 1000 +description: "Use Dapr API in a Kubernetes Job context" +type: docs +--- + +# Kubernetes Job + +The Dapr sidecar is designed to be a long running process, in the context of a [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) this behaviour can block your job completion. +To address this issue the Dapr sidecar has an endpoint to `Shutdown` the sidecar. + +When running a basic [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) you will need to call the `/shutdown` endpoint for the sidecar to gracefully stop and the job will be considered `Completed`. + +When a job is finish without calling `Shutdown` your job will be in a `NotReady` state with only the `daprd` container running endlessly. + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: job-with-shutdown +spec: + template: + metadata: + annotations: + dapr.io/enabled: "true" + dapr.io/app-id: "with-shutdown" + spec: + containers: + - name: job + image: busybox + command: ["/bin/sh", "-c", "sleep 20 && wget localhost:3500/v1.0/shutdown"] + restartPolicy: Never +``` + +You can also call the `Shutdown` from any of the Dapr SDK + +```go +package main + +import ( + "context" + "log" + "os" + + dapr "github.com/dapr/go-sdk/client" +) + +func main() { + client, err := dapr.NewClient() + if err != nil { + log.Panic(err) + } + defer client.Close() + defer client.Shutdown() + // Job +} +``` \ No newline at end of file From 9904d78fb87d24d87af9ccc1198d1f23d54fd4e8 Mon Sep 17 00:00:00 2001 From: Lynn Orrell Date: Wed, 24 Mar 2021 18:18:01 -0500 Subject: [PATCH 069/100] Added docs for Local Storage binding --- .../supported-bindings/_index.md | 1 + .../supported-bindings/localstorage.md | 266 ++++++++++++++++++ 2 files changed, 267 insertions(+) create mode 100644 daprdocs/content/en/operations/components/setup-bindings/supported-bindings/localstorage.md diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md index e07b2c3b8..b854accd0 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md @@ -29,6 +29,7 @@ Table captions: | [InfluxDB]({{< ref influxdb.md >}}) | | ✅ | Alpha | v1 | 1.0 | | [Kafka]({{< ref kafka.md >}}) | ✅ | ✅ | Alpha | v1 | 1.0 | | [Kubernetes Events]({{< ref "kubernetes-binding.md" >}}) | ✅ | | Alpha | v1 | 1.0 | +| [Local Storage]({{< ref localstorage.md >}}) | | ✅ | Alpha | v1 | 1.x | | [MQTT]({{< ref mqtt.md >}}) | ✅ | ✅ | Alpha | v1 | 1.0 | | [MySQL]({{< ref mysql.md >}}) | | ✅ | Alpha | v1 | 1.0 | | [PostgreSql]({{< ref postgres.md >}}) | | ✅ | Alpha | v1 | 1.0 | diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/localstorage.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/localstorage.md new file mode 100644 index 000000000..7268b2bd9 --- /dev/null +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/localstorage.md @@ -0,0 +1,266 @@ +--- +type: docs +title: "Local Storage binding spec" +linkTitle: "Local Storage" +description: "Detailed documentation on the Local Storage binding component" +--- + +## Component format + +To set up the Local Storage binding, create a component of type `bindings.localstorage`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. + + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: + namespace: +spec: + type: bindings.localstorage + version: v1 + metadata: + - name: rootPath + value: +``` + +## Spec metadata fields + +| Field | Required | Binding support | Details | Example | +|--------------------|:--------:|--------|---------|---------| +| rootPath | Y | Input / Output | The root path anchor to which files can be read / saved | `"/temp/files"` | + +## Binding support + +This component supports **output binding** with the following operations: + +- `create` : [Create file](#create-file) +- `get` : [Get file](#get-file) +- `list` : [List files](#list-files) +- `delete` : [Delete file](#delete-file) + +### Create file + +To perform a create file operation, invoke the Local Storage binding with a `POST` method and the following JSON body: + +> Note: by default, a random UUID is generated. See below for Metadata support to set the name + +```json +{ + "operation": "create", + "data": "YOUR_CONTENT" +} +``` + +#### Examples + + +##### Save text to a random generated UUID file + +{{< tabs Windows Linux >}} + {{% codetab %}} + On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World" }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +##### Save text to a specific file + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"fileName\": \"my-test-file.txt\" } }" \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "fileName": "my-test-file.txt" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + + +##### Save a binary file + +To upload a file, encode it as Base64. The binding should automatically detect the Base64 encoding. + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"fileName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "fileName": "my-test-file.jpg" } }' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +#### Response + +The response body will contain the following JSON: + +```json +{ + "fileName": "" +} + +``` + +### Get file + +To perform a get file operation, invoke the Local Storage binding with a `POST` method and the following JSON body: + +```json +{ + "operation": "get", + "metadata": { + "fileName": "myfile" + } +} +``` + +#### Example + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d '{ \"operation\": \"get\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "get", "metadata": { "fileName": "myfile" }}' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +#### Response + +The response body contains the value stored in the file. + +### List files + +To perform a list files operation, invoke the Local Storage binding with a `POST` method and the following JSON body: + +```json +{ + "operation": "list" +} +``` + +If you only want to list the files beneath a particular directory below the `rootPath`, specify the relative directory name as the `fileName` in the metadata. + +```json +{ + "operation": "list", + "metadata": { + "fileName": "my/cool/directory" + } +} +``` + +#### Example + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d '{ \"operation\": \"list\", \"metadata\": { \"fileName\": \"my/cool/directory\" }}' http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "list", "metadata": { "fileName": "my/cool/directory" }}' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +#### Response + +The response is a JSON array of file names. + +### Delete file + +To perform a delete file operation, invoke the Local Storage binding with a `POST` method and the following JSON body: + +```json +{ + "operation": "delete", + "metadata": { + "fileName": "myfile" + } +} +``` + +#### Example + +{{< tabs Windows Linux >}} + + {{% codetab %}} + ```bash + curl -d '{ \"operation\": \"delete\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + + {{% codetab %}} + ```bash + curl -d '{ "operation": "delete", "metadata": { "fileName": "myfile" }}' \ + http://localhost:/v1.0/bindings/ + ``` + {{% /codetab %}} + +{{< /tabs >}} + +#### Response + +An HTTP 204 (No Content) and empty body will be returned if successful. + +## Metadata information + +By default the Local Storage output binding auto generates a UUID as the file name. It is configurable in the metadata property of the message. + +```json +{ + "data": "file content", + "metadata": { + "fileName": "filename.txt" + }, + "operation": "create" +} +``` + +## Related links + +- [Basic schema for a Dapr component]({{< ref component-schema >}}) +- [Bindings building block]({{< ref bindings >}}) +- [How-To: Trigger application with input binding]({{< ref howto-triggers.md >}}) +- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) +- [Bindings API reference]({{< ref bindings_api.md >}}) From 7567af92e2d245e9ec8f061459a3b786488b671d Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 25 Mar 2021 15:51:57 -0700 Subject: [PATCH 070/100] Updating current version to v1.1 --- README.md | 4 ++-- .../en/getting-started/install-dapr-selfhost.md | 4 ++-- .../operations/hosting/kubernetes/kubernetes-deploy.md | 4 ++-- .../hosting/kubernetes/kubernetes-upgrade.md | 4 ++-- .../hosting/self-hosted/self-hosted-upgrade.md | 6 +++--- .../en/operations/support/support-release-policy.md | 10 +++++++--- daprdocs/content/en/reference/cli/dapr-upgrade.md | 4 ++-- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index c203d9d9c..5b3b6deb2 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ The following branches are currently maintained: | Branch | Website | Description | |--------|---------|-------------| -| [v1.0](https://github.com/dapr/docs) (primary) | https://docs.dapr.io | Latest Dapr release documentation. Typo fixes, clarifications, and most documentation goes here. -| [v1.1](https://github.com/dapr/docs/tree/v1.1) (pre-release) | https://v1-1.docs.dapr.io/ | Pre-release documentation. Doc updates that are only applicable to v1.1+ go here. +| [v1.1](https://github.com/dapr/docs) (primary) | https://docs.dapr.io | Latest Dapr release documentation. Typo fixes, clarifications, and most documentation goes here. +| [v1.2](https://github.com/dapr/docs/tree/v1.2) (pre-release) | https://v1-2.docs.dapr.io/ | Pre-release documentation. Doc updates that are only applicable to v1.2+ go here. For more information visit the [Dapr branch structure](https://docs.dapr.io/contributing/contributing-docs/#branch-guidance) document. diff --git a/daprdocs/content/en/getting-started/install-dapr-selfhost.md b/daprdocs/content/en/getting-started/install-dapr-selfhost.md index 476b81c71..c6ab64b43 100644 --- a/daprdocs/content/en/getting-started/install-dapr-selfhost.md +++ b/daprdocs/content/en/getting-started/install-dapr-selfhost.md @@ -52,8 +52,8 @@ dapr --version Output should look like this: ``` -CLI version: 1.0.0 -Runtime version: 1.0.1 +CLI version: 1.1.0 +Runtime version: 1.1.0 ``` ### Step 4: Verify containers are running diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md index fd7d385a9..762fdefd9 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md @@ -122,7 +122,7 @@ The latest Dapr helm chart no longer supports Helm v2. Please migrate from Helm ```bash helm upgrade --install dapr dapr/dapr \ - --version=1.0.1 \ + --version=1.1.0 \ --namespace dapr-system \ --create-namespace \ --wait @@ -132,7 +132,7 @@ The latest Dapr helm chart no longer supports Helm v2. Please migrate from Helm ```bash helm upgrade --install dapr dapr/dapr \ - --version=1.0.1 \ + --version=1.1.0 \ --namespace dapr-system \ --create-namespace \ --set global.ha.enabled=true \ diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md index 9077c673a..6f8d0fd99 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md @@ -11,12 +11,12 @@ description: "Follow these steps to upgrade Dapr on Kubernetes and ensure a smoo - [Dapr CLI]({{< ref install-dapr-cli.md >}}) - [Helm 3](https://github.com/helm/helm/releases) (if using Helm) -## Upgrade existing cluster to 1.0.1 +## Upgrade existing cluster to 1.1.0 There are two ways to upgrade the Dapr control plane on a Kubernetes cluster using either the Dapr CLI or Helm. ### Dapr CLI -The example below shows how to upgrade to version 1.0.1: +The example below shows how to upgrade to version 1.1.0: ```bash dapr upgrade -k --runtime-version=1.0.1 diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-upgrade.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-upgrade.md index 0befb2e4a..620ba0637 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-upgrade.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-upgrade.md @@ -25,11 +25,11 @@ description: "Follow these steps to upgrade Dapr in self-hosted mode and ensure dapr init ``` -1. Ensure you are using the latest version of Dapr (1.0.1) with: +1. Ensure you are using the latest version of Dapr (v1.1.0) with: ```bash $ dapr --version - CLI version: 1.0.0 - Runtime version: 1.0.1 + CLI version: 1.1.0 + Runtime version: 1.1.0 ``` diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index e77cf8c0b..7dd39ebe4 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -31,7 +31,9 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| -| Feb 17th 2021 | 1.0.1
(Mar 4th 2021) | 1.0.0 | Java 1.0.0
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported (current) | +| Feb 17th 2021 | 1.0.0
| 1.0.0 | Java 1.0.0
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported | +| Mar 4th 2021 | 1.0.1
| 1.0.1 | Java 1.0.0
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported | +| Mar 30th 2021 | 1.1.0
| 1.1.0 | Java 1.1.0
Go 1.1.0
PHP 1.1.0
Python 1.1.0
.NET 1.1.0 | 0.6.0 | Supported (current) | ## Upgrade paths After the 1.0 release of the runtime there may be situations where it is necessary to explicitly upgrade through an additional release to reach the desired target. For example an upgrade from v1.0 to v1.2 may need go pass through v1.1 @@ -40,8 +42,10 @@ The table below shows the tested upgrade paths for the Dapr runtime. For example | Current Runtime version | Must upgrade through | Target Runtime version | Notes |--------------------------|-----------------------|------------------------- |------------------------- | -| 0.11 | N/A | 1.0.0 | Use Dapr CLI to upgrade for both self hosted and Kubernetes -| 1.0-rc1 to 1.0-rc4 | N/A | 1.0.0 | See Dapr 1.0 release notes +| 0.11 | N/A | 1.0.1 | Use Dapr CLI to upgrade for both self hosted and Kubernetes +| | 1.0.1| 1.1.0 | +| 1.0-rc1 to 1.0-rc4 | N/A | 1.0.1 | See Dapr 1.0 release notes +| 1.0.0 or 1.0.1 | N/A | 1.1.0 | See Dapr 1.1 release notes ## Feature and deprecations There is a process for announcing feature deprecations. Deprecations are applied two (2) releases after the release in which they were announced. For example Feature X is announced to be deprecated in the 1.0.0 release notes and will then be removed in 1.2.0. diff --git a/daprdocs/content/en/reference/cli/dapr-upgrade.md b/daprdocs/content/en/reference/cli/dapr-upgrade.md index 34f20dd93..b2e019762 100644 --- a/daprdocs/content/en/reference/cli/dapr-upgrade.md +++ b/daprdocs/content/en/reference/cli/dapr-upgrade.md @@ -36,12 +36,12 @@ dapr upgrade -k ### Upgrade specified version of Dapr runtime in Kubernetes ```bash -dapr upgrade -k --runtime-version 1.0.0 +dapr upgrade -k --runtime-version 1.1.0 ``` ### Upgrade specified version of Dapr runtime in Kubernetes with value set ```bash -dapr upgrade -k --runtime-version 1.0.0 --set global.logAsJson=true +dapr upgrade -k --runtime-version 1.1.0 --set global.logAsJson=true ``` # Related links From 36372b6c1966d9295da61b328afa42a877a41487 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 25 Mar 2021 16:07:59 -0700 Subject: [PATCH 071/100] Update install-dapr-selfhost.md --- daprdocs/content/en/getting-started/install-dapr-selfhost.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/install-dapr-selfhost.md b/daprdocs/content/en/getting-started/install-dapr-selfhost.md index 476b81c71..05e7b06df 100644 --- a/daprdocs/content/en/getting-started/install-dapr-selfhost.md +++ b/daprdocs/content/en/getting-started/install-dapr-selfhost.md @@ -52,7 +52,7 @@ dapr --version Output should look like this: ``` -CLI version: 1.0.0 +CLI version: 1.0.1 Runtime version: 1.0.1 ``` From 5a6c7906037a6303c05c33c6b1b53b76100bb040 Mon Sep 17 00:00:00 2001 From: Lynn Orrell Date: Fri, 26 Mar 2021 12:14:54 -0500 Subject: [PATCH 072/100] ci: add Azure Static Web Apps workflow file on-behalf-of: @Azure opensource@microsoft.com --- ...static-web-apps-zealous-pond-0160b0210.yml | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml diff --git a/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml b/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml new file mode 100644 index 000000000..ae6482060 --- /dev/null +++ b/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml @@ -0,0 +1,45 @@ +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - v1.1 + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - v1.1 + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v0.0.1-preview + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ZEALOUS_POND_0160B0210 }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/daprdocs" # App source code path + api_location: "api" # Api source code path - optional + output_location: "public" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v0.0.1-preview + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ZEALOUS_POND_0160B0210 }} + action: "close" From 785bd35c86d6cb2b60da09da35d1969c048400a8 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 16 Mar 2021 14:20:48 -0400 Subject: [PATCH 073/100] Added details on the application-level dapr.io/enable-metrics annotation --- .../monitoring/metrics/metrics-overview.md | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index 7e1d3a045..e8e98eef4 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -12,9 +12,39 @@ Dapr exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you ca The metrics endpoint is enabled by default, you can disable it by passing the command line argument `--enable-metrics=false` to Dapr system processes. -The default metrics port is `9090`. This can be overridden by passing the command line argument `--metrics-port` to Daprd. +The default metrics port is `9090`. This can be overridden by passing the command line argument `--metrics-port` to Daprd. Additionally, the metrics exporter can be disabled for a specific application by setting the `dapr.io/enable-metrics: "false"` annotation to your application deployment. With the metrics exporter disabled, `daprd` will not open the metrics listening port. -To disable the metrics in the Dapr side car, you can use the `metric` spec configuration and set `enabled: false` to disable the metrics in the Dapr runtime. +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nodeapp + labels: + app: node +spec: + replicas: 1 + selector: + matchLabels: + app: node + template: + metadata: + labels: + app: node + annotations: + dapr.io/enabled: "true" + dapr.io/app-id: "nodeapp" + dapr.io/app-port: "3000" + dapr.io/enable-metrics: "false" + spec: + containers: + - name: node + image: dapriosamples/hello-k8s-node:latest + ports: + - containerPort: 3000 + imagePullPolicy: Always +``` + +To disable the metrics collection in the Dapr side cars running in a specific namespace, you can use the `metric` spec configuration and set `enabled: false` to disable the metrics in the Dapr runtime. ```yaml apiVersion: dapr.io/v1alpha1 From 1061c0dfa05d193579dc87c492867d69b43ffca5 Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 23 Mar 2021 19:25:13 -0400 Subject: [PATCH 074/100] Tweaks per PR feedback --- .../en/operations/monitoring/metrics/metrics-overview.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index e8e98eef4..e6cda87b0 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -3,7 +3,7 @@ type: docs title: "Metrics" linkTitle: "Metrics" weight: 4000 -description: "Observing Dapr metrics" +description: "Observing Dapr metrics in Kubernetes" --- Dapr exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you can scrape to gain a greater understanding of how Dapr is behaving and to setup alerts for specific conditions. @@ -34,7 +34,8 @@ spec: dapr.io/enabled: "true" dapr.io/app-id: "nodeapp" dapr.io/app-port: "3000" - dapr.io/enable-metrics: "false" + dapr.io/enable-metrics: "true" + dapr.io/metrics-port: "9090" spec: containers: - name: node From e66a602ab12c4b55d9aeefa58d16f9553d382f6c Mon Sep 17 00:00:00 2001 From: Phil Kedy Date: Tue, 23 Mar 2021 19:26:38 -0400 Subject: [PATCH 075/100] Tweaks per PR feedback --- .../en/operations/monitoring/metrics/metrics-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md index e6cda87b0..e9d0b51bc 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/monitoring/metrics/metrics-overview.md @@ -57,7 +57,7 @@ spec: tracing: samplingRate: "1" metric: - enabled: false + enabled: true ``` ## Metrics From a9ff4a653110600afe8b6f8b4efe0fc13a137806 Mon Sep 17 00:00:00 2001 From: Hugo Meyronneinc Date: Tue, 23 Mar 2021 17:43:20 +0100 Subject: [PATCH 076/100] feat: add shutdown docs --- .../hosting/kubernetes/kubernetes-job.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md new file mode 100644 index 000000000..7c4f9b9c6 --- /dev/null +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md @@ -0,0 +1,60 @@ +--- +type: docs +title: "Running Dapr with a Kubernetes Job" +linkTitle: "Kubernetes Jobs" +weight: 1000 +description: "Use Dapr API in a Kubernetes Job context" +type: docs +--- + +# Kubernetes Job + +The Dapr sidecar is designed to be a long running process, in the context of a [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) this behaviour can block your job completion. +To address this issue the Dapr sidecar has an endpoint to `Shutdown` the sidecar. + +When running a basic [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) you will need to call the `/shutdown` endpoint for the sidecar to gracefully stop and the job will be considered `Completed`. + +When a job is finish without calling `Shutdown` your job will be in a `NotReady` state with only the `daprd` container running endlessly. + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: job-with-shutdown +spec: + template: + metadata: + annotations: + dapr.io/enabled: "true" + dapr.io/app-id: "with-shutdown" + spec: + containers: + - name: job + image: busybox + command: ["/bin/sh", "-c", "sleep 20 && wget localhost:3500/v1.0/shutdown"] + restartPolicy: Never +``` + +You can also call the `Shutdown` from any of the Dapr SDK + +```go +package main + +import ( + "context" + "log" + "os" + + dapr "github.com/dapr/go-sdk/client" +) + +func main() { + client, err := dapr.NewClient() + if err != nil { + log.Panic(err) + } + defer client.Close() + defer client.Shutdown() + // Job +} +``` \ No newline at end of file From 4859d44b3ebf31ca740d4517ebbbe9719c0f1889 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Fri, 26 Mar 2021 18:44:14 -0700 Subject: [PATCH 077/100] Removing redundant workflow file and addressing feedback --- ...static-web-apps-zealous-pond-0160b0210.yml | 45 ------------------- .../supported-bindings/_index.md | 2 +- 2 files changed, 1 insertion(+), 46 deletions(-) delete mode 100644 .github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml diff --git a/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml b/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml deleted file mode 100644 index ae6482060..000000000 --- a/.github/workflows/azure-static-web-apps-zealous-pond-0160b0210.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Azure Static Web Apps CI/CD - -on: - push: - branches: - - v1.1 - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - v1.1 - -jobs: - build_and_deploy_job: - if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v2 - with: - submodules: true - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v0.0.1-preview - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ZEALOUS_POND_0160B0210 }} - repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) - action: "upload" - ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### - # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig - app_location: "/daprdocs" # App source code path - api_location: "api" # Api source code path - optional - output_location: "public" # Built app content directory - optional - ###### End of Repository/Build Configurations ###### - - close_pull_request_job: - if: github.event_name == 'pull_request' && github.event.action == 'closed' - runs-on: ubuntu-latest - name: Close Pull Request Job - steps: - - name: Close Pull Request - id: closepullrequest - uses: Azure/static-web-apps-deploy@v0.0.1-preview - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ZEALOUS_POND_0160B0210 }} - action: "close" diff --git a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md index b854accd0..692149ac5 100644 --- a/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md +++ b/daprdocs/content/en/operations/components/setup-bindings/supported-bindings/_index.md @@ -29,7 +29,7 @@ Table captions: | [InfluxDB]({{< ref influxdb.md >}}) | | ✅ | Alpha | v1 | 1.0 | | [Kafka]({{< ref kafka.md >}}) | ✅ | ✅ | Alpha | v1 | 1.0 | | [Kubernetes Events]({{< ref "kubernetes-binding.md" >}}) | ✅ | | Alpha | v1 | 1.0 | -| [Local Storage]({{< ref localstorage.md >}}) | | ✅ | Alpha | v1 | 1.x | +| [Local Storage]({{< ref localstorage.md >}}) | | ✅ | Alpha | v1 | 1.1 | | [MQTT]({{< ref mqtt.md >}}) | ✅ | ✅ | Alpha | v1 | 1.0 | | [MySQL]({{< ref mysql.md >}}) | | ✅ | Alpha | v1 | 1.0 | | [PostgreSql]({{< ref postgres.md >}}) | | ✅ | Alpha | v1 | 1.0 | From 895fa1d00af847432734c357017db95919b0dea0 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Tue, 30 Mar 2021 12:50:37 -0700 Subject: [PATCH 078/100] Pull latest zh docs --- translations/docs-zh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/docs-zh b/translations/docs-zh index 1806602cc..036fc63bf 160000 --- a/translations/docs-zh +++ b/translations/docs-zh @@ -1 +1 @@ -Subproject commit 1806602cccee4cc091c38d6bb06ef7b0220a53ed +Subproject commit 036fc63bf0a919843827e263ec287d55e3188b7b From 2dfe2252f2f25af3332fc672505a9b0e033e9338 Mon Sep 17 00:00:00 2001 From: Donovan Brown Date: Tue, 30 Mar 2021 19:39:13 -0500 Subject: [PATCH 079/100] Update secret-stores-overview.md Just updated a sentence that I feel reads better now. Updated "with secure store" to "with secure storage" --- .../components/setup-secret-store/secret-stores-overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/components/setup-secret-store/secret-stores-overview.md b/daprdocs/content/en/operations/components/setup-secret-store/secret-stores-overview.md index 43405461e..5822ff211 100644 --- a/daprdocs/content/en/operations/components/setup-secret-store/secret-stores-overview.md +++ b/daprdocs/content/en/operations/components/setup-secret-store/secret-stores-overview.md @@ -7,7 +7,7 @@ weight: 10000 type: docs --- -Dapr integrates with secret stores to provide apps and other components with secure store and access to secrets such as access keys and passwords. Each secret store component has a name and this name is used when accessing a secret. +Dapr integrates with secret stores to provide apps and other components with secure storage and access to secrets such as access keys and passwords. Each secret store component has a name and this name is used when accessing a secret. As with other building block components, secret store components are extensible and can be found in the [components-contrib repo](https://github.com/dapr/components-contrib). @@ -79,4 +79,4 @@ kubectl apply -f secret-store.yaml ## Related links - [Supported secret store components]({{< ref supported-secret-stores >}}) -- [Secrets building block]({{< ref secrets >}}) \ No newline at end of file +- [Secrets building block]({{< ref secrets >}}) From 9edf64a6fc8bd06363d382bf4fa4de6c606044a2 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Wed, 31 Mar 2021 16:57:43 -0700 Subject: [PATCH 080/100] adding service mesh concept page --- daprdocs/content/en/concepts/faq.md | 23 +---------- daprdocs/content/en/concepts/service-mesh.md | 41 +++++++++++++++++++ daprdocs/static/images/service-mesh.png | Bin 0 -> 60762 bytes 3 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 daprdocs/content/en/concepts/service-mesh.md create mode 100644 daprdocs/static/images/service-mesh.png diff --git a/daprdocs/content/en/concepts/faq.md b/daprdocs/content/en/concepts/faq.md index 8106ef646..1c291d447 100644 --- a/daprdocs/content/en/concepts/faq.md +++ b/daprdocs/content/en/concepts/faq.md @@ -6,27 +6,8 @@ weight: 1000 description: "Common questions asked about Dapr" --- -## Networking and service meshes - -### Understanding how Dapr works with service meshes - -Dapr is a distributed application runtime. Unlike a service mesh which is focused on networking concerns, Dapr is focused on providing building blocks that make it easier for developers to build microservices. Dapr is developer-centric versus service meshes being infrastructure-centric. - -Dapr can be used alongside any service mesh such as Istio and Linkerd. A service mesh is a dedicated network infrastructure layer designed to connect services to one another and provide insightful telemetry. A service mesh doesn’t introduce new functionality to an application. - -That is where Dapr comes in. Dapr is a language agnostic programming model built on http and gRPC that provides distributed system building blocks via open APIs for asynchronous pub-sub, stateful services, service discovery and invocation, actors and distributed tracing. Dapr introduces new functionality to an app’s runtime. Both service meshes and Dapr run as side-car services to your application, one giving network features and the other distributed application capabilities. - -Watch this [video](https://www.youtube.com/watch?v=xxU68ewRmz8&feature=youtu.be&t=140) on how Dapr and service meshes work together. - -### Understanding how Dapr interoperates with the service mesh interface (SMI) - -SMI is an abstraction layer that provides a common API surface across different service mesh technology. Dapr can leverage any service mesh technology including SMI. - -### Differences between Dapr, Istio and Linkerd - -Read [How does Dapr work with service meshes?](https://github.com/dapr/dapr/wiki/FAQ#how-does-dapr-work-with-service-meshes) Istio is an open source service mesh implementation that focuses on Layer7 routing, traffic flow management and mTLS authentication between services. Istio uses a sidecar to intercept traffic going into and out of a container and enforces a set of network policies on them. - -Istio is not a programming model and does not focus on application level features such as state management, pub-sub, bindings etc. That is where Dapr comes in. +## How does Dapr compare to service meshes such as Istio, Linkerd or OSM? +Dapr is not a service mesh. While service meshes focus on fine grained network control, Dapr is focused on helping developers build distributed applications. Both Dapr and service meshes use the sidecar pattern and run alongside the application and they do have some overlapping features but also offer unique benefits. For more information please read the [Dapr & service meshes]({{}}) concept page. ## Performance Benchmarks The Dapr project is focused on performance due to the inherent discussion of Dapr being a sidecar to your application. See [here]({{< ref perf-service-invocation.md >}}) for updated performance numbers. diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md new file mode 100644 index 000000000..cba402532 --- /dev/null +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -0,0 +1,41 @@ +--- +type: docs +title: "Dapr & service meshes" +linkTitle: "Service meshes" +weight: 700 +description: > + How Dapr compares to, and works with service meshes +--- + +Dapr uses the sidecar architecture, running as a separate process alongside the application and includes features such as network security and distributed tracing. This often raises the question - how does Dapr compares to service mesh solutions such as Linkerd and Istio? + +## How Dapr and service meshes compare +While Dapr and service meshes do offer some overlapping capabilities, **Dapr is not a service mesh**. Unlike a service mesh which is focused on networking concerns, Dapr is focused on providing building blocks that make it easier for developers to build microservices. Dapr is developer-centric versus service meshes being infrastructure-centric. + +In most cases, developers do not need to be aware that the application they are building will be deployed in an environment which includes a service mesh since a service mesh intercepts network traffic. Service meshes are mostly managed and deployed by system operators. However, Dapr building block APIs are very much intended to be used by developers explicitly in their code. + +Some common capabilities Dapr shares with service meshes include: +- Secure service-to-service communication through mTLS encryption +- Metric collection +- Distributed tracing +- Resiliency through retries + +However, Dapr does not provide capabilities for traffic behavior such as routing or traffic splitting. Dapr does provide application level building blocks for state management, pub/sub messaging, actors and more. + +The illustration below captures some of the overlapping features and unique capabilities Dapr and service meshes offer: + + + +## Using Dapr together with a service mesh +Dapr can work well with service meshes. In the case where both are deployed together, both a Dapr and service mesh sidecar will be running in the application environment. In those cases, it is recommended to ensure only Dapr or only the service mesh perform mTLS encryption and distributed tracing. + +Watch these recordings from the Dapr community calls showing presentations on running Dapr together with service meshes: +- General overview and a demo of [Dapr and Linkerd](https://youtu.be/xxU68ewRmz8?t=142) +- Demo of running [Dapr and Istio](https://youtu.be/ngIDOQApx8g?t=335) + +## When to choose using Dapr, a service mesh or both +Should you be using Dapr, a service mesh or both? The answer depends on your requirements. If, for example, you are looking to use Dapr for one or more building blocks such as state management or pub/sub and considering using a service mesh just for network security or observability, you may find that Dapr is a good fit and a service mesh is not required. + +If however, you need advanced, fine grained networking control, you would probably benefit from using a service mesh. + +In some cases, where you require capabilities that are unique to both you will find it useful to leverage both Dapr and a service mesh - as mentioned above, there is no limitation for using both. diff --git a/daprdocs/static/images/service-mesh.png b/daprdocs/static/images/service-mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..f9dd4eb4158b2b864dcc7e2de4021370c7fa0c14 GIT binary patch literal 60762 zcmeFZhg(xwzcviR2qOrLV?n9oIEoHUM0&|6Dk=gZN|6!}0jZ&fmIMnRBA_C@*#MCe ziVz?P0cp}Z0YVar)Q|)SDUkMtnR(84p69&pKk!|L>*6A;tiAWzYyJAV@0EDV(o9lZ zR$NF(Nb>r%%eRGu_6a`zF!a+8f#5&yQXgEiMWPRi{dD z-1fTe54`3OA|xc$w)ZRC1^Vd+mR4uD)9M#LK7OI)4|w6npK5AAfk$cEf`DTc(9;;>gd;={g^7lTVYctYA2MKfywx$Nu>w z{J)=q|91|A{&x-pTJirMInV>e+rNwm{d{@}(_DQw)K+(@}ms^FF zCDOva8Sb^+a=3Z?#tHGn$HD_Lr%5ltdu?xPvd+J`boiHjB6%7&Cr(iJ+Wz#=^f(iD z=67*XJz!S3DPeD9u|4;DZi!o8JN(zs5>O(09n(ABygU5<<(a=n7x~wK|42G(diL@O z>wgAldB896PY48^-ShJjS8&mr4kw)(HKmo!mJ>b?Cym_aMvyK!ftG{AUVsZtj+pAg z0pRq|Esg1#qJeTp*;=h@r~dstG+otE9<4$mLcg1$CzY=q3z<3-&zf%84RH7pvuFyk zV$((124bohj}w&hv0hv7C`(pY>YOo=6WThGK5gmjtS?ti`qSXwUocTPWKK;&U|4@W zxQ4C7Z4Y-X?fd;{qudl-2PicP7Wx-vC-ln4hTl_la$fZQRJ%CvrgO-G$z({sOny@v_v&FC-ouDr3@`ELuQ zEZP^R3(I0k3%$I*W>;}9k_VDo6R$jL9^t7im2F(NZ>i?QnD!VpySHmbBa^7>IuEDF zg?SD>rb?~{1UcVgf#=~$@;kZgt24B%FWE^MH_{{}<#ZFdVJ5%{&lCComp4CE2aZkR z8Q*RHpiNa0`nALF*v9l0FwfQH!B2zbohNEb>RX(2zJIkwTz64-M(`R>*l4V1@4gW` zokxu3#6dbEQ*>W8%=^2z3`K8&b}jW6TVKhT=xrrRn>f~ZLf&~VN8OFs@BQ!cs4TkO zq*6S*do}-zw%PE`^X$cPzhV6w5te^O4CuU>^pQh_Z5Q2NUU`}n$rlpxE`rjQ#@S&` zOeVXZbYL!fTF zGnzWRK8JKI_2=?gU4TkQ!~n`t<-ZI3>u-j=y5sah%v#STus|=g;M(c$MGg~(7c$_P z=}Lv@OBW(G?`i3J95b{(I{4>NdYW2`{KdIrA6x6aZJtF$coKz#NS5Z;a6UaV?k>o3xj0s)yI#8GtzwrArbR&XyrV7$jmA; zg|k3gINk4{IvntcD8GKztv#h6WI&(GX6nKh#6%AKtnil|DXEDxD~C_wVR9SZ{Yf^) zWG-d>ypFxjxlsmlIlfY&;g!Qw(MFX?F9 z`@;J^Izg@?6>lEuQ@#FL#cl#*8E4^RT;Pyw>S^WQx}=s{5CdC_WWs*4W#pOI43M-| zIh|bv8Zi-H9gI79#miX*a4SW_kU2YF?D!FNpZ85_^sustas@5lO;eDCF#`K-ROzKf zyGW{5>P@ElN}pmKhN8Jv$}G+?KGpy1;7N7#_DES}Qx7Ud>A<-^L;tdT`Ql6Ytx4FU zb0_Pk|<55Ib z!mTShi8aWr!~PeE&}o*>czh|%_QlS6S#@o5PIcho8a)o9TV~|mm4YT!A~RGS?z@Qm zxo=7@d}fy+R*8eaEe<6omC0#Gk)-r)*(F3@6hw{yujY?N&o@GR zHP(&iz7iG&Aq|0sOiqGw0hIWuaxgi&#x-(IJzzF^k!aAkGB)1pVZm`Wee$#%y8C_+ zwx-J{k50(9Vda0kB=MQ1s0eOdu(9H>zY#z$bPdhlV0d)6gpB%O>GB;Qel-m1%)|?! zwN&lI8n6CXrW?cCSuSuqDp8@rpA`cPjX%i8hvO`~rlWhq>uLv0aI&t3G!$)MblmAH z`CDGE28NRtGEmKaE^QNkKlUHbl7C}SA*kM>2{^t`YnSE!SPrwCa&NZc)*V2MdvUp+ zj=8M67~&LX@iryze9Bm*Z53wGR)sbA2!v{4njqJ4(9FX1>b64umRYt9P@`*sdJlJY z7h-q5b|ohDz1c4)_TkOd$LTWL$D?K|K%wiq;axbwdIYIO1hfXbjI|4Zg|m9C1hzTw<~4z zNX;WJ+l7}?HjaTo#Oc~60Ok?rNhITOi%=nRgJnaJn_`o#bp6jd4UrIj1k@>36Q!wX zx5*-RP2d}3C_ji1X-@VRT}(71rjIix3W$zIfphT38f3%G5#?e~hR=)8^O8F}`DH-n4Ue%;)`bv;gTH@8wuDe}IgGIruK;#L@>_G44_6+PbBPGzrXVYjl;U+r z@b`aAdLGUZ*7LAT;Jr69jjtMW1}Tql9UvqSJOtVAg=2v7+CdEyP~$T@tqJKAl~k=JRv=6!vFFO8Sfa6=xlS5f19g z;klm&6zcxeK`}>*2%OX7VO#g{-Zd+6jYe0fZ|i@VqLW0#*6RjS@};KWcqkGWvpRKN zdD7Zaa>E)g#@p||t0qe}TaJHY7N=MqECT&V~=dM+>8MN6flt=J-0y=mqB zo{BDonYM)t8p|XIA8p^Y%+>Lq6)act?&s`ucb$NlhzSQTi|q4Pfa>;Dvy<+r5GtCv z?ScEncfmg?wAZ^N-}XqtbiJP}XD&k_+!5(zh-M-w*~_xwyWP7;{(Ez+_{AFRVgZ&%C|UYg zpj|?*&?gV)j4Ek4{{ED(u1%pKiFmgJ1t)l!%B0zcaacTcw0=Y=x}woF*8GI=twZm9 zv6Y@dzqrOOi2N1NdOH)2qarGxX(86D#KohK_{QFZ!ruDdf*SV>1>#PjmlV!3`=p$S zN%R%|PFXuC%KS>rV@3O#mGnlV>f^I^f4IjMO>H>-M1VYR*iC%b#f==&1f!zno#FW# zUBYZ2cTmcX`=Kq}N-=^QA~Pe0v_rAxlcJdvf0uUe*rJ|;&En^3N0M`@i97~^ghg-* zDP0d@No#8XsLiWzfg9{81tJ0*x&|Z-DfPU5#NuMcJ_#(P0r%P6YOH9gO{*;E+j^;5 z)dUljAOU<3Hqdrx0O~sSCer*=Kyb%v{*&cAUGtfVfSGfC)9*6@1@y1Vg|PG7UTrz? z$Pcqn3F&Jjf6guj&4=+XLtYb}ns7SRJ!|fdQ7ZXvvCcTcNHv3`&xTOaZ$AY>Plyz8BUWMAV ze@KYxnf&edCKeSo-_N@mCu$$*{!O#`eo&j@I9COD#jis37h?1xOQS=F1U5lBCNiMl zddP))XMJ9y!+sI?_^Zzc4$lDU!umem9Fu8gnewJO-9%GH^Q+aGGS7fx>rOZm`-0Ex zinUxk*?Kxo>@#A(J1+zMqt*MOCqW?@Xx$**Y$8qUMILu#C|g4^e{*Z-xE1W&;!9HD z6!5^tkyNFKek~aS+qNw}QIfQ)TMk9OtNc#&hA^hQG*BCt1`CWkdZ63GW+VCrz|);# zE9M>pdHPCF)?ALZ??)?_XtK6u3t}d?Hy6}g>Ur}(Ro|=MOr1szsVG{H3jAiCp0)0m zv55%=8OH>{*f;=x$EtBUyHPlpu3!?wI%H+E$rN~rcL|EStc6q$4Nr$UO}DR4ec|Yd zx>EmVUa`36??oG)e=8BL%+*G^B{*m58W8AQ7oW+Uk}_l%HuGRestu1S3<+CWv(p|$Q zpYhM{MeU2pMA7JH~d9Ydgl32)$o@UGvk-9;Na&Tsa#meqm%lV;S(;Rq9eB= zCd!~Tb0XB1+dV$FgG5YKT;oXtjYp`;xgo-$>@-h0Wyw^z;$F6oD6xa z&>i0dtgWb2HGd3SjKznE!^Qdgh>d5pbbHl*pdo|t9C}z>;pf-nHH6>vZI)xXfrEcr zaUDrl6^AMs0jeCiYOv9x9Iq70Mv5J2rmrQ7fT9*#0BAkIhzi+#!0;Bsv>gE>hWW#6t zJ1#n}VUJ=?*uL5A09J5@2YRLT>}x(|r`wiW)ENXJ9z!7X?o%TC#_e{za^k9SKuMxZ zXf}hV(yO7rYvZuHW@By=8NHZwqRb4|u*Q>H=F)f?9#JcXDjspxO69M!VW@4|2k5z0 zori)9%wEK4qeVIuu+Z#w(onL2Xd~kq=W0J^YhAH0Z*#VRrdSYaP1Tg49}l6l z9U6=X?3-f3oY+$}`&2Ucly?YT*M3;pPRA4N65|u$2-nyv^H3{Ep2f6~uFT*$FGZVp z+f?DB4~7xV^oouo6|NZg*et8%ugXbIA-LU*w~?G}af9PC+4WpWr{c#I12~cKEBGg6HZ79`uY|$2x^{Y$|g&jm!MTpoMtXf}nR&^!Y~}d{J|`)9R5W zOjcS!ejo+4=pLFfxp0;G2R|U)p{aCkC?XH~P;eB|DnG%rxsW`EFIX4%>^f`13q0`sWx@`VJCEf*Lvzm@Q=m22?6l zN0p2_$IpsSG`pZ`QtURIR-AY>{=o6y0vHRa2&mn}SgFlo53^5e@Y|PTu0gf)?qRRC zmU2PQpX3`y*EhfMW*&T4U1#SM)FCi!o(k||enH>Tl&vznr(Q+en<`cRWtTx#QH&s< zzD6|jd2A2x8aiFkIO-XULHWgQpTtpBJ^GkUrUo!Tx$m)1_St+@>Ya5+X6(rny{}=l z7L~KdXRDNKRmyPUsQ_Ms!_PB0Iw8nV{oR!ht3R?c$OZ&) zMGvXFXKGKj;u#1Gm;C&Qijl~A zem^#o8(88Y7CxQx=jijgQd{Nqd*@nIGLM{Rd;n`0ZS%(zX$$-9^6Xh5D{?R`^NgPM zuY&hgQ+>ffi4c0DqY=SP_O-(hbU2d0n0(x%3pPSyxtK6v7m}tL|#?+ezYbgjGjnk}c z#{8sD-^{UzlA#Fgncr22FO>eU|2o(tRK$XbxT8Qz!A_{7#7ti5Q_kHzr9K>LvCI98(a(H*Uq z&!RICA5;$ef4uQ`9Z{eSooYZhtl80}rkF#zXJgIZiDM_+*ak(Yhq3K8r>{Q|wq4R- z%~t}#04uYMXe!b?K?K^gOhD#EPLxs)MA>9Mmw5fd*kr%Kg4S~RvCYBmW#U%1B{rEi zV9~}WQVQ3n`J*HmxY}VA$v7hP=WU5|5{iz;&p)VQO`;i7VTIwyI%-wdL4e`+mjh(O zumEf&S4Y%7yoe;I1kA#jGvli-r38=lMRG4AfjbFAi!9e>W4(u{Sd*uxLng-6V7?PX zsuFbDSF1^bsOQzW#Z;7I=5}@EYx__AivI`=!SAY-+4?zck2f7RP`)?-TX~X#kecB) zK?TVPN06K#_~V1mgwxb;~C{g9<^+k!ffN0ZlJ zLDRLDq$0nXDEfqB|7eL-rt_y&^lEW#`vFpn$ME|r_hSoTyvS_m%DaU2wgy<2cEpD3 zlx=@Vm>Y=mS(rw-{`?B+x0W1Z2V$LAq-iwp%}47mkJ}Si;Fu zWo`+0TmHl4ej5oZ+|`Q*Hh$4;5euvLM(}z&96QG+QY-K^eFsw2dhIT#I@W7z^cs}e zVKp3XW2R!t9ROaI_!Uih+G)`KB|nFza_Hg>=dpPET%RJ*h`E{Mq~=L`J3H8%+o&|x zlDyb;B$yuN6?57gF@|NXHoH>c$rO%K9e{5=cW{NvqiQl;m~rKSTZ(B?JHR^3GycJc zng}ntJQ(@?dwf5G=C=Bgd0In{Mz9hTeHI@R(gZ0V1C?OryuI?Yw}7=R15@B(G-8UE zSbN!AJ^nbvH)WL$8;E4Z&86|^FT{LPsCP#fsa>H;leCIg+GYg1kbBz4XXWqr41GS| z5*!4eG%Pr=myKmAipMJ7YP4Bd^x9TxsuQ36tkcqzNV?M&5?V$ZFdU?qrxK&V2bt>R zH)|Q6MgPuBKA;u|m^x27VF;^-0}Q2yeHG}{jYZ=MCibg0OY`I1GTUtmZT6s^rKWP^+Q2((`H`Y0@*}PJIC34;QY>_a zltOXFu-@O=&T>B79Q&Z{+s>eo-nz`7Rl|I5os9&jyc#7(^WeLDNaZiL6V>h+H@@2_ zpDupFQWa%nDtD%c&Qn9bFCS zD$5u8OzPa$4oWUa`)5TxZ2M><_uX0V8~soDV&;W=a2IsDP}13Zbv}0|g`{OKe7Y{O z4z)^mvTmQ3lGC{v#hFji;Ngfo&!a#3O@FyQfu+8p;E{+11?K0IE{lRlEYCpunK}K} z0dhSqpw`6VMYb1zEYZQe_!+X+rLy~okR5x;BaTJ5(@j+JloVi*lg~| z=^u3w z_ABuU;rIqGWEfxd%?sb?ZNEt`ei#G+T^!kRw{ohsO4y~7belOnOI&Fe-iLhbkGXz& zYclg_U2F=`=>A8CI&ziH_zlU8&x>JJGqn##K53_!RT#5~U0mK|g=hqAX?HnV&BP6H z9itz(RvK+#62!c2##v^$;Fo&Em*tJ<@G-%t#Grlvs%$F&|YsJ)P7x5dmE@9 zxsA56Lc+FpAg7&&_R8?eJc`mNj6O7(&u4e!08Q?M1cM;cJHE=>)1>Dmijg5%<^0() zQ!r|~^g}=ll*P&>=~iNvs#}S>{W^(1jKrTcE$b1Is2R&KZA{5*I^pNlL{ce8N*Q^E z3YDz-zIMBL8ZBL(96>!b6Z{6<+k3fyTPgI{?vkbB_k14BuJP!dP(cpq0c9nXheA%Q zC-+`+REcAHb$U05#B6D#5<}q5(nb$Ko9O#yI54Z*gdBd*H|p9l*Fa&!jTjE#t|}r? zjA@k`PiN=3fEJlvWsdg>4=c$BAd;t7Qw}1*a_9x}2XHfFn*x3@U5ESR3_4E#AZNlG zRQ!RIsevw=GVw6JF|LmIq4xwkjDlibObDF}q2?Qg83a0!AEMn= z<)G&fOw%^20`zYYqV_kVHWFHVbzpTq?sI0J*W@N(7fS2~4=Sq@^=hH!t%_sXCa?2< zrJ#u-poq;u4NI0Ep`=#^Q|HI)?Oj5n){`nUwM)${Hb%KzW8i2ow0E5W7tNw z;N|#DWt|^^4foIb#41I8KUiIN|30?dVKhp_C}ioTW=mUwbY|9b;k{6;|FO`jwL_F3 zk?096G=a3|HON$fi4cUWWYy$3tVbNV(7t^mWVlk-H+Uc1f?1SfKWLPBNhh@Mc)*BI zrjHY$2Aw8v!g}8??jfb!lhS@5TBQM0vSNwvukFexGS@v2^8xBU7cH)nEUP9OVagY7 z`n0Dj-O0c{T*M$cH(shNcW0_oI-wk2hMv549Uf*=th3&Lt8q`kTGW@@S6|ZEnHuzn zT0m0A=@38K)5MzYCKHHU_zYz6Y#i`ms>opZ^D!Z~!(HYIUSiPX(@S+q(|Sn$EfG{q z_fk_oorLwDs)8n|?mBGb+o$Wcc+CJ9RM1TgC-@I+xnr}tE>AoQ2=41~kkcGW;_9;T zc@GQ##p-wGJB55jYnK3QS@Fv@?4w2-n#O}`n~a+DGP!y`p3mZE_kd`|K<3p72Mp95 zg8#BFiHD7QWf^`=T#$Fv3TK@E6;-?pGPe2SSz##N@6FY(xrggMG^L~WulpB8sF}?~ zPyX&D`uBE8^47q*cCOQ^#q5UZKvT_IAY0!0{>OgL6JNovdy$JhKid1jRj~VrPGRHYnbbzCWxj#Z(9Vz)*>D}|+7*t$aNesY zC^UfBcnRGYqL)PwapsyU8mXsBLqbO7;U6VD==+gB#l|u#H-7-^#@b<>|S~UA*1uYRrzG z$J`;N%L0_%@%+^zHH|T~^U4k>Ym6RYEcz{lIl~4#e3&&>H9r%7N?AwMpxLdpIu66) z&acF4r1)epY4NK7EehDLB)&W0!c8Nz>zcxI*;zIPX_fccN!hm2>1@CR?b!Vrj;^tQ zo$rUTGt$w3Mh8Sd{yIrew|VWY*&^c-@h%$j`L>9>jwd1SJ+B^>aCqiO&V?2?g!ijX z`azE*=f;)#fQ8Do&>-oCM$v|qcRGz9ZYTI4M!acK3g6;2-YJ(4(pttO&-!0S_AzV3?=nen$T-;1BH-**3lGV(Z;^vBRVZIj8bFTqhT=myoD%q?j%8Il_e7o zgDyQ;P>;UfW9>}jF&FsvLS~b-^N|7Iv3&l*Q+B-}c~ekJBv8hbo5Q2vISYygv(l;R z#2P4qD5#EKqUN0B2al#vEgd%&G0*OrNQ&h7+&q4-UsNv!Y!|dl!rx>5LakFOIyl&q zF@5<=ZF+}s?9p{&_rH-0K}-1?3a*=-O)Ks1Xze17k-!IZZLfQGmWl&dOSNpT&g&;U z&o?lUR4ALuYY|~SmwBB%T5MrV-af*8Xp?WkcKX!u~2B=oS6KV zGWplX7B&xwr{`rv!Ywdi-|`*{6B;}m;M1cC1EiqkAuhm?26g5(xg`}GJGYn-zuRQi znXeDJTXlWT{BxRaiydIstt%I}8aO^GMwrAbw{%OEA+^i(>gGn><%;?5-KGcSiWSGt z?R<;BZg%0O9%|!zNGn%yQK#|o zdXa}{gzE|@(Yer}=dLYWSbbXHqUr-i0VS%@u47-pUKRGocz2C9(IVnjM0=gbgvN4dlnF&Sn&nXnkvg&APmAd|7_4 zvA8H}ssI?yOAVR_VeVCVN0FzK<<{WryRAaK``$AZXv|N?Asd)f!!7nghngKhs1WNl zpN;NxX5Jyk_sf06i0~a()~1r|6r-_70E^zHE#?dy-C4?M1M#Qb@IF$cdm)o*Kz1ZH z$31F7p6x2gyL~MooLnzDcQrkgODqB037K}+F4^V+mjTT`SzmeP7kF*~el>MPk^W@@2}^V%)tx2se9DAz+h_Aqj=+ zn+slr(KnWUtd%1~E+-o^r>|i4MahX64IY~nF`&?r3Y8ikba=sz*A8l%@*srxR2Yp^ z3)>x43PW=1BWV(_lQLt9aV9a&2R4@XJwa3lK&YD~gD#sql2$-u#P+6@RTGQ8staje zKdFgM9V^)CSi7{Tocpl*wW^Xu0XPt=E7hMf^G1O8jxN zqZF>CA6TvrHuxXZjqW&Nx4kmFkfhQ4(!>c7fFHF2KWpE271Unk8q9>qsitvXYBx#WBszoR2nk52fcW^*b9cp(B|yy6avly8W=wd51#yS)(5mIQIj$MC}`x>DFd5BhPf&u|qmsR1%Scjz$IX-(b$!^& zk#ahXmyV05HrP&`THhaL7H(-hdaNjjd7Qc;YJVo|)1@>+arm!{h9uf$MEN>ozpYNz z)_9XxCp2vFt-dnm0+%Htz(UNtDFhhqeDXT2M4S13XxDg~aT6}c z;3az*t5u;)V^Z-=XLMVo3REG6*8t^i3Gg?BT4(&%D{*16vKb1&tPwP>%RjcGs|QnN zHzo-KFTUby^O6R2j2M}5W-)ME&*vBjS;;&DQnw?mJoskZ)500!a|OR!=Xm*pD13J( zRat%$y~)IHbkua@4pQ{!4f!f=v4VOo1A*?!kD@lnB*0G7=-7j6^<(4OelAET*IO50 zU5lmqP76F&sc-)YXI}=ga;YSh~}U03rh_w4H(?lS!KmEX8(_d)xD zu)8$##L>knsr#|glrM$HW;YiQva@oarf@->S7F2hW6YS@No=Y6Jf63`n5!$zzKF0k zB$z}c;LO&Xf#Vc`u0h$KoCD<0rc7&OKhW^qhS%rT)4KSWW#_sOit&+|{ zP0;wt<8I4j;iDN9E&$kS&Rt(!ojxvAkblcRfSg0mC48*HJPefZ;UT` zB2J9D3v72jv-{JRtjQwtOerN3CzpYI-{vb5HQuAetD`06K_`pt@&sFV?(IWs3a(cU zjC}DP-6qv_Fs?}i&kbLBta`-kyX^^qgUY(#JyPY?_R&F0#dWI2qox?wCV=>4=tsdC z{`e^xkfds``Y~58{?YT=JDAyEysE>Lg#017lxV z^Z;g^JB2d!$4-O4`>QyIwjVTe3LU-@ZblG)T%KlZjw)()!!N0o=>|B|RtMNT1+5}E zWCy^Cwp({og>tFufxr?|kEo6y z7(cHnio2^O8I~(CI6jsrHlbYzb)Oupj9{55gSo?r_>_kAN6MlH&N@wf=Xbu*d(b0e z28L8GJ$1q5Gag!8j7uoA*)nVaz0R1>9ErOVg8KfQ zC2Ukb>3#(1Tkm_~jZ^OH?75p10Q}h-k(K7}9@i zz`2Vu;vYJfTL@B8o36mEC?FHr3P_s82mWA%5hM088X#m! zAb)nDr|bBu8Yx@{wiJLI*rJ#a>a8rcF=`Cv&_Uuv?R!cMPSq|745G6Av`f7Y5z6E; zaJ0{5>Tm^sWrq0u4v|C1aUqNWHzTvyMa}$UvWdGT_x|{^NZ*oX?i5~QuwijwD%J0y zJ>otWg@J6)LWXYVWI-I-mN92IcxwAe+0%-Ijj2IdPem72$A{8<1_P3}d zIPuE;hviDOI@B%m^oDDT!%f*GU*|gM=!YjCGc$5MV&l#y+=H4uMpmdwQos4O`WuOG zB3Dr61l1W!)t)Uuy+M8I9O&+x`8zdyd>@`Zw?9n=#5IiZ=(RI%-kr1THBkI*)Hh&t zx{79H$J?C=v*Nig>dX8Hi2s5sb}K$JqqpL`*(Lz=H2bAONKY`!aDgFpNJxnTD)JTz zb+#dXi*sgJY87e37>r!dP4gi7>*SpB)t+`dIuf6ZOd3f#1 zXY65-Ke3JBVDdhQveWL^3oRvCCa`3NpP;C5B*TAdl9gTV^m02*Vs%)%Y+{mVt-)IO zAuN|3JwS=rt;n%N1b}-?arv7M=Wy?=NRC6RxEO2L;_5^N4lJ@4-0orPwt6)H%XuNt zjVDS61jTaowx*SWXv!8OY#CtpiPM--XDQqzkLy9Ru%Q`Y~+q$GkBXy z1fG7-Hjr;fqK(%`aOd|!DEF|~@fmcgy#8&;Dm}OE!u`7;f`Zo*;R$4M0sC(IR8)cO z<6n5mzvZv;+$zk|lAo%5@|#z%ibx3O04ga(~Y z``6lkgl)`4cNGSXSurQA{TL_m4dq87`67l#p~4NccM1lID5e#IwK-=NIs&}+8LknN z)$G>R*$jyWn`{f|R|$&3(Sey#`37VRlYmqR93tQYFp*o|uZM;C#7ZcY%7j}ZJP0}7 z{A1B`qYLWttf@kt$$Zr~NdlO3Kax)?kUn6%%N?ZPoDlDB-6&a=+ORcY`?tw-9iE{+ zZF@{)8<)FndB^Plx4l1U1MF`fd8P;OGGWn244y#wFV-t%)~ zx_`&()zdx@vOK-1>79CwW4AnF9}s@`~Cg#C2A}t99G8Biu(AF%CL zG0}N{FjeHoyfKE($Ex zaZ1OfpxlS4=x_tUCOnMI24<+MaVkn3kby#R&V9MMOo7JhRV_3}Q_$ummI?-70;~`M z<`S5ECSBL5&YN~s|5|N$tGJ9}%JfK8z;>p_b}qE-TO6O|V-aXr)Ew{~<)w5ivX6F1 zof~Ws7=qjkiF#Lc=`(9>C;p1Sm~Rh%X_Gr0>YX*&=(gS}SsUP;wVf2N57Q*Qaow10 z#R6fFw2nt8-%>SEN!i~6945epu=t~~!twR@x9ms-1*q@E(n~IS8?{=yR)C$3Qe})D zc?Rp*lc%fw5czevIhiCJ(biyB!`($?3H(RIGE`xBiLuKa=Fn<>0vZi&mQ-@ zIAJ6(xg#5Br{V(^g~9^|rgSR(_x)7_65y*3@eEd~+9~lCeut%(;6eUE&bo! zZZMx-`59Z`So@&c&hz3Ui#WiTnkxQ0q??^;$y!uXf+0u=hQCODY0m#G?h))5#5=E z>w$uu1S#IEao3LQ_lG2La0%%#=8KPgRXJnsl`_VN-lW`>&u!1D_0*92P0Qo@#_Sh@ zf%+|bZU1NHz-?x{mBz!YKqphOhV1FW;d3-;N%Ma2`J6@=nnxMxIJsR9DPZ0i%U=I?Q5O*LDp9|@=Y@b~hSqO<~bc5lNb zRA?P1a_N_5*sHfekTP{8sJeN7)LBzWx1X{#&TBikCQ1mRq2?=}n*$$d=0SWjIZ0auS6Q(1J~W=+N!9FRN*k9UR`h^Ch z{70SoKdT<9&>eLWg$Z|vzn+fh%}5UJaBB1>ywqpD;BR@EPmkJ zmm^-=h0WLn8_}CU13$uNO$pmn=Z2_u&iE5gHCWXAyqrlMc<@==73e9w_8cS+wIi_b zIraUSBSlC5A#S;jtVi;fHynK!&6P{%Hqm%-Ku~DA0#0F=4wS+)E)7w%+0L*P4lDxL=MSYqI%FC3<`v>|v4V=mVV~3p#f+5KlJwgCAmZ!gV=?ZI!t?Aq7*v z>fbo-O8<1e7Q$v&$hta^1;9pTbNvlZLNpb)+RYOt3ll>(vYPn98c;sm~ih4QT2g=KZ2Ii4Gmp z&PkOTz2Yv|a)q}^X!;Y=gI0r4Uu8f&<(=r2-1Pki&I$dV`oNU?bs2V( zwWXYDh2yoB;+O@E5T#)+{_e&)4Dy`@gFF~u7@w|>4qgjM!%XKGX#GPK!QBFYH|=D? zV8KX{O868%KIdeBpdyXH%7=UP&w)9;a|kH83g;vBvooU00fzowkf|6Ec?~1&3*@-o zAItmYkhT!ge67QR zEl>faOT2&$4y_LBg8L|(;m!WGEe+ie@xLXvKiB2ry$xG+pIDE3Iq8sYd9IEs_FRG* zIQKth{w4VS+u5IU-w*c$JjpLQt@ZNeQ3ow(AGDvDd`!hj?^l|Yu%X*I0V(k9e2fvO zE@Ha15T1t&eqzE_jSSyp4UM_cq?MEJ=}&OR2mx=eIAX|S@C!@y2_K{ge))oCkKmU+W0 z=8F1Mjh1IDCO8-=^a4-{N%l3Hxt-P6bwpv1+xyn-P~Bp`)0>gx|KPL==yn+bxc0Q> z-mo9vyoai98!hC`wgwfd`_H9aEQHUndbW!oU25myWrzMzleZf}*7&1bS+D9gh}eOh z)*#sDDbjAv0E{zz5dVY7OvO@FrFH`0=(W>L6Y{4+9%nxiG&>aSmm^CC>i?6~`9eW;kHz}dBEoB8i@&Dj!Djn_*R&~5p`(=$kmaDY1lz)S zi?@E{8Bw#ovyLW`m)L#4-m27QI_i!`+{f0!$QatCihYB1`Edt30`&+Q(e59z&&aGU+ z^ut(*VAbkA>41Yu!*!k*5{9su1K{lJ#F=lG39pgFfuE`q%Wm)fCnFb4$q?`ag@$a) zry3$zkG0WV&`3HmWI%RfRRfp<S32Q5sN8oSK|HNNFROB2S z&LM0nOn@MElJbm3TRkojUYUu&#uJ5}Y{h;n(%j5ez6~ac%sfdCk<4q+|!6NzyjFZS5_%fKVm* zm;W^-{LSl5{ZmBf&j8KLWdEN6gh5kIKtv<7cIVE0o?Wj7x0lAZTXsYkZZmS)sI2K$ z-2x(638?BMt6H9U_la4l1mN()>B$UN?Q3WEc)4o*0yq|imQQ^qfc7-*mp}ABsqf|= z5U?WwKXm>0&mjIk_WbZKlQ@jH?j!df{s-Cq;r^MwzFH9apI>RB{@-5}Tjo#K9jtEl z{OoI&4VsA6`M=!S=9#dL&CepC0fI9H{*AbAAqZ8D80h{7$A7rEMW{3JN1vg^%9whTu zpI_Dfy3gK0D?&ooB>uX=Uq>GZjR?Xf+ZCt3zKH$uznA>KXY9K5vSk6P0f;#Z4prJJ z({ka>rAGbw^yf=Iop>7jDa{f(x8x`a;BG&yc9)SYd#QY`rTX>r0esav${_6cT5|N? zJ#P(!4K#|_R?fKknVJaJ{Ki(kVaQUA;PO_v6~UeMZuk2%yzQh?%(LSw_8una(ipY7y1(<%0|Aq*{P(FwIi0acCY0%qWp?I@0k$R^T1`#(egoqF zJhF1Tdn3}y*m$!Z2Qd0bORKb*^uUT?Soe!Gf5{dVkyp7MPEo)oG`R1U6StKB-qqkA z{_DL;3)Rt^ORbeaz18nBFJ67SAdsEwY!?FoRM*EWg?vn*H^6jdA;SG9o^6y){TuGawl?P3Rz)dy%oP;#uWQpu3NP}%sS94GRp_6#+iFqH}0%Y5sKm;5{Wdu`@6;)e{~S} z)4lH5_Y<302^ijnc6WjWj-P{okK15gA$X!n5yQ{QY$7oX7Wl zn$J=Hhq~_$hjUx|X4{cOiHPVSi56Xm5~PYcA~9n|H$)Jf=$#b3MHzx1%81^_D5C^X zMi9LWqeP9G(TVsTWbc!6-t4{4`~CA>-yg1AX=~ljmd+;KW7e4f6$nse342J2fGTSWyjF#Mo5ri zTX3pVVqw^}g_{ur4b#(Be1u_z>FJH6mW2tCpLgJIQx>-VZFju{$qlnh`+TB<+(Hw- zYpsTdtKzUr=0arfkQ=UiRZA{acVN5{8SwJz_v5WPLsreW6WQ_=#2bc7p)U(D8>1PR z>bDR(>Gp+(1?UDszjFd%^Es$>Nwna0HC~YSCwX?{j+7eqwD*gO+6U&$U#pd&jiLXI znTeTS;yK(_uOes2%E|%{$2`8%ju=QTOSbB)npkBsp3Z+PQL5rvwR(mKsfB9{D|*I+ zQW@74y(+tG?xceo7Oyg}yiRay+I+oq5B<3Mmh*JJ2^y8>>i#wCa_3KfPSv(?=7)|N z_>}NSq*z8}y!hRSrl*uKSWjhtT^UO3I%?f80cWirAQfult%9Dv`H5}im1-10>eHsx zb#rS~j7#7mo1Ua$3+Bb$tVnu(a8}XfVv;&$2DYk}{Evf~=B^RvP?iP(ixBX7(PhFJ zp4)`oyGHIjBL~)7ZZ`|;G~OPhwJe;BSVGdR*Z!>iPgKRjO-+R3Duq=nxVkCCjCa{` zT6j%l6e39J8_{1uLO~sCWFIzSGY;*27spqAmv{I$LowS?D#B4mZW$K|jN=T7<+q<;q(n z@VU*u8j{rc44WM3)jL~U+D5K&N%{syw3Cadt2{0?B$U4;Sov)XWk_Vhy)rvL|1e7F z8yG$MDV9fN)74w&lyuxWH@)LJ-W?+Jo;CDz*3Yg&5piZ3`&f9(}TSLCN#H1yozC`$K z>Ttu{#r9WP ze^QleoC(tPac&mzXU>(Tb0|SRb9o3dNqdEv-(RwX5)Yjj_&$*13uj$KrL>a2@SH!P zE!4W{miw$<6Swcy{35kwGwCAg+;lFpSV#NEobAC=WVdvd5K?J*49r7n7NqhekZS20 z49vVZs^OjCgW;WSo8cXJcUg5_;==>9eAz|qo`WRa6@x`tr}qFnA-%3vT*3Y(Yg#+U zOxwOxsr|D_DC=IFY42d1I(zfSJHo9?PnKLyKZ9Qxv3NlzZ!AdRq&%=3BK+f>N;XiYEQB7789hf!SU6p$~IN8Ya(0b*Km|$hJ2<_&f~*_fNRAr&6>eb#1EUtqvB_goJ*}Y<)HXIvIF|YO8@7 z;u#FPVRkanW^XJ8w(gz4XL#U0?RN6VeSNiVC<4fb_9I0$UOz3th`xkyo_=*+9#HUX z#pk9uY}Ho>+km~*KLU)&Bzu;hxP%IsjPgn!O>YJ7%$j_@qV^^sF4|ol2kE?-rY9^; zNaH#w9|v9Wx-OG#6BmDfc-=cUsQZAe089I`ojDm@LvdNOa@pP85ZTBqx>gNrjI6&V z6G~62LrW`2VVuL3_uAMq3%TyqHCL1jTsGV3;bNdp`aI($tt_(SgxzN+W=*(|5BCu~ z8w|`l&?u5L)9hGUBeA0sw{h%qRX>R;ThERyoj=f|MIOk(5qv-2MT;#aUu25$oB3~z zzQ|k_v+i#ZzIJ$eB%mvO$tU$r)fFlMm2P9pOyVdG_OiRT7dZOR_c^1S%t-DZ zpi@%UYg=;cyfccyPM_MOcU{iH3trljzk zV6HVlL~q#ZA~#?LD17cYT^+fn)+Vrf3iqQR1-*wS&cjksFaibk0qSD0J_)aWrEHrb zOlN#`y4Bv8{Il;iI&$;g5gKzrKRXllZljb|?QVrG8IU0Q$JV91OgA^LR+5bumE076jxU-W`Izo^CYcwRVo8=Yp?0Km5LkpWOua(GcqN9K z)}E6S92J$*+kS!aO<=6OHOO{D{P|0r=N%PsN}eK?LHLEjC#BJD{j*oa?Q#et_xxnz zpf;2YSv4Q*ZlikBS-OaN4y;lSg-xdSZ^D+1=N~arxeN;>(~vVqTEeEVfP=Z6OFR=5 zMy3ojXc!t(6g~*xh{jj&OvJoZo~t$ilX5&_>EC|oF*xgDXgQ@YebO&sR%P=P^VOs; z=Dwn4vAeyHUELfWbVlj{P8GbXKSf)~_Ol-e5Y;MgjhD%00!+!mCm}aT^poAbDha=M zt}U#INJI6Um}EuzET=g&W#P*{K*Do?9rrdjaK(BI7CcqdJhWs2NkjV@m-~75L4W9& zA>!blcN{dz^NoJu!;{`Elo!OI*=0j+`gRGXmCtS1RL-jb$tUj5l#{4CXL{&D;U(N8 zk%jU8`=D>A1imJDFQ}J6xhvj?ib691w5t*&PI{gC*BbOF3Z6anDRBpQUK}e z?>6`Ta&=ujFI9 z7}!EfW9Qk#jBC`*s|HrQTSY*OHhtuDQvS{9geXS&s`T4YBcKrObeHJ-Yz|^xE!syu zJ-qW)k`>yIeU796U7)=Bm_5pzhJ-(hm84$;6-bQ}vc%6ZqjhTJ&)3|3?J#P?LNET1&!TS9R!Gkl^EMc5!G8HDtcc zqyFO1i3Y)v%n*m1jf90-@2&M1)Tgq)WkfviEDgVl`62<8P-Yt9*QqzawQ-jzJM?w$ zjE%r!((4)22yqyS*sBbvZ7Bp!Mq?@5oxwXLY3-efsom9?OJC_=@~4@`+jYJau$Hf; z#?EdfV?bQ!R3Y3LBuyMRIc~& zhmMud3uGG{XBpy$B3>EESOPMEJvL~JXrz9fF2&M0^~ zAD;ABDB}qpuq;DIS8qDX0;hzEmp0q3;q=X=>qBh>y7Piq{jgzc@@PizbLT{m-xQtUc4NNYGo(1&M)VioIWy#ztCLs3}V6E*Kf`f%kj~o zKSi(^Y!<7OT|a9U!QuPCdHIb=4y9i2h@m195oFCdNI;qfszaywFu#w*!+`3SL~0Nz zc#`dAu6^mQrAWWZrV%HClf+|EEm?UBzOh>`!UeqVm6Q@9*;UdYy@wT@zoWYT4| zr1J_XXB94(S9ngeuDjFiajnyPx44+sUm*J-_lnhKZ)F_b7&HkYDu67wQ%t&6`>+RdII4n=?7P z8!UfaFqb-~Jtot&Y##G>o*`@I8)YGUvBB6h3nVvy_6-wAbmZIX&J#ECA`iNpb1i9K zCKg*Z3)qzX$ZyDR$(4xgRS2OU3W%Os2kG0ZBg7&3;w!f|TgTPyDDF^50s~vBWJeWBNv7@m`~Hc{Z0v^xA1juWLQ>i2{Bh zJ4)$10j^og;+Wvf^hlY@ecy!McM~b?WcJ;U1AX9gz+|`3^;@GR5a+W+s!p|u^Yu*h zWA53(vg?&Qb!dz~64A4O*(3szM&y&)N!S@SSr^`%`j zqq%k|7q?oLi*J~8bKa{FGIrhQ0MJrB9pm%Sh^ii23wR)%rFj`;EdS{mF=rMH#%p!F zHnOc33fzr-fk_+lrpQo3JtMIy?h6*-A~&^^04E_{&3G04b;!>7O)%D-RC-%EkM7o9 zedx=FQsAy4unBI}OtW+-i03H@zYy}|;z`Qk+Y&XX%*O><>cgSMh&S(sJG-AvBw5;% z=&oOdPMpO#jmS;(rG~tWLA|vYMso>`E_XYolK-tG))1=?X}`OVoTQav(-CfYDNu2A zu)(~bWf`o#=g{)AP6uP>cN6`KkJ=nubP9}kO2)`As8nn^v3f_&w{e;I z3(nx{{at_vvz^EV;mnF(zu$5o# z?01dmEG&p2FU3Zm>P#SfHY3tW1WkH`NlJ!j77` zG^}3sHCB!(tri3OQ5G)TA6a&sweTL6n|_?g3J68e4Lj$9zBlSQ@2kWSDl2@Yj3w}~ zi`lj!C^S?A_vJc|jW+Kg^%3jgo9Tj)X8X+ZZKV9K-f-n8Y1E2&Is(4K+N)~yF2d=p z^|V*R^CeBa_1?khT}~Yls|M<@G+daMqzs^r34^p;g2R{iMy?qJ-d~tsksnL!r(D8Y zk-NQ$qO*Es<_xyb<{s8-hhQlSG0uBW5tq7(_M<5O((-7Bh?FO;1L|MH9;<|!`2O5i z;J11NsQeT4eCVzB{lCL~yPg}iAj*V3_}^E2VGXG343BPc`chtCv5}8*D7V%WDfmDh zT=_x1aL#JAQ(g3{ z3M}IZgi1uyjIkm{6Q%Q*E8WLF*TmuPR=!9#7MP2dtIE*=l@Ryeia>LDdTo^5o?wmQ zXwcZcGM3XuwBQnTH#0oR_|C7Dz=(uj!!7SAZ3SUS=nSImQ5T3)cP^klZaC-al(BvA zWsS1cZqn-hk#p^8S!6;tZB(K;NpwwQUGGLeh%%#0#;r|gDy+1Ecymb0qg#s_ZdFR2 zPWD`ejOul<^BlTS9qi^@Jgqt#DZ_`$k}T^JCv3dhqD@G0pIBstM}Ag~<3Asj4G{U{ zy-f65==YwNbf2fZ8rNQZNc)}A1BJqq7~^MlAH`U6&b`y#+^Uw4_-^Q(kP}2v=+w1Zv4DBF z56U7WbCv#@Kj%ryvtJVD%Rlk~^8kom!|=u;&CTZwWo`O;<9R)X$RVQOM%j5CC+~W_ z**pxcQq|)cBFTR%g`M;kPRGjqZ)ql3)?*3mi@_%^P+-PG*tGvwK8GQUMy1%&PyNSz% zY&w$M>PIWnK@}(#*o?iu$U+MQ)q^k16uEd40RI04;?E`{$?e94Oa}K}8fDlO-ZWtx zU!9o{8};veOnBU9=!5E6)YE4sugdg5`wu+TS*@)8@0SKRuL8}|2?JZp1%dLo0Ca#_ z8nAW;h~~eUCRP%>sg%HM06uZcP4&@Xt56t_Y(0#}xhyIIK)gKXAq?Z$=Sa($e2L|e z(GN)$Z{{$9D-nB%N{s69Kv#2L>g|bq;>cZ zglJe2$0!Ecaq6%~J{#;r^9?yC1*2Je9wd~SzSuO6?qsQ7C|7PE)udfepaLS4UxX&S z095Rd%HYigaJU$6C+YRD9;{Uf?*p7jJyF%#2YmF7FNApk!e^vpCSGUkRj+3VU2h&V zuBo=?UK>rmYnP^FZvRww^U7Gbi&0q_JJ7#2Qg+DkEt{L{UqiL5Yljsh?8qAltqwtrS znw1U=;P=4W)7Px}*t%~^7wI5&=ba+<+E#WWo|NnMY&wQrYWJG$Fx$*Dih@*eJJwY$ zlp~^v%Yd}zR2R6-@?xcq+AktIJQ1+Gy<69E|GqoWB(_FVHQ?i;MQ0 z_xl*?9!Hv>Yjoh$e^m#w+if{rCLSPogOh)$KYg~)5j21*(GC!z# z+SRwHMHA-OMT1S4uXey~F**3(jS9Zupy;yKeOW;HUDH9-J2~IKi)@iI)N{7&QxB?W zoyudntK>zlU=(4cx=}mJHGmk{s)7k8FQ6mE>NfS<;q^<;X4IRI;%0YgnZI6AwqkwC z{Uz0e2S^1hQjYYfO>G*LYgidIEWPZMMhxswPZj2^n>I89FXh4_l5Yt7Z8n8>lyopgM5L(V zE8Q!Nu>dUdIAl7W-|pQgJ5R|G%@AuJ9aYBI;YRXjW#fWm8b$3QbrbDv3jK-J`GB6t zb!+5Hn8p#GLDSq?fx>4MENh`}9Z}Jlz*{r)cjvuBA6%ysx5c++l5ly*xIPo4*%F}? zui*X`@GP_U^m6D@(BDSaAT)9RT zfy@wPtH~uc&@o5hw~F%u?SKdy>qb&A3)shfN4|Nby+<+FGBsXN_-s`KZ;w}2KLq(j ztS&NUX^Y+TAXf5)LqzTl0B>U{HQ(0OPs*zxldo0Qs%qa_mSYYnR;<;!6N9b#v{~)h z>Yn?DKl)1ui?Al)?~YWoRX(ewFjGFJI=y?LYHoR4*#U&GC@$8qaUJ_j&zxR`)ixJ! z@FTg{@^4%O5w}07hnwZ|$wHebY{52{JUM%qa)(bW7;C$CZ*DfqF{h(ffQUY$FFMAo z`KGsH2Ib3^P-xty@(FEbrNHbiqF|0s-9-s6^eHzwav@JXv2L~ZmS~n$T78Nw&R|wU zys57Y6Nhju6GTP~qUE{+W*GH&*;QxV_qrETa)umvfh-@8()+6<(gvv}Idv9vL`S|D z0X5Km+rpL?87x>Syv>M6osR$LypXrrc?l3q)X57ufbJMqo7!oJJVAqAv?4R;Z&O?V00dQt)G=ln!v4U4e;4B&Lb&LQ zByTv6@hcd7tWiK#;vXQ+OJe!I_eh6?FpQg@CuKmKBW0ld+f>JYBG><*_<|DEI*a>Y ztI&CvKl?$&SZ7jLszOrIoEXmUFS5ht)x=yjPasyn69*yR&jTswpAAK!TgCg^od4dY zK=zXN$Y<~G+>srX4sQo6nL$5gw-58jr(eAU^38hP7OoZ)S7%Ms`(#K)UZa6z`Qd5) zBdZ;jZZ1(5X$btc%L7C?h+*x+w0JfhlfnH5XL@x>7H6!6USbkqO80>`gN#pD)HQ`9 z_!3(brH@^$JN+l9Vb20l7IK{LB>Ef-5frOC$3H-%%uNmh+f!WCmg1dz*kg3cDS{w^48}}#y zE@5-Np>#>!(Xa)^-jooQjMH#UP8*iGQPz$VdDDW^f<M|)#=S)~VkL~F#de6-Ufr~b1B7@0i)2q;@Q2~qr`_%@vf z1KYv?1%zAg<_2HAFA=k`mwE!tCpH!7TR0UF&Bj+ws(D*_ zOyLsh>*f5ztUl7mMPISJ|wt8YfT?WH#IF zPf)qjN@*tMS)Ty@KAH4wZHkh19P8kFI*-oycx%ac3g%(7_?|*rHV=UuL zf$@1cH}zqv`08+^CE9;4nd;K8>=934|H0Erib5_69YwR^GKu)3(s}*TnCV63g_q8- ze(4~n9Ig6g^Y<$5f$@hFENW%hb*kKdFw>Xb`L)TM&)D@TZr_vk!_Y- zi;^;b;ttqJq*oNaYblH zt!8DGNY_KY$A#$a_M9v@2u@1SHP^{Kk}mImNEb<}8HIxL^Q33XX!EJj!eWD@-&j!= zQpO!C5tnD!w}l7g?@Ad-}TyZe}?f@i%Jcw9F1$IHY=RN>ucg zLBxN@g&e5)bWrs4hJQ^38@4b-lt~C3oxzUz~#JEhZZL22;*il%>zooP&wh& zP(U!4Or`T2=5PVy$4~B=kn?o3Teh$;w{J)~y_y^R)T8CEkkVm&fz?eOFoI3FVs?#U zi)d2Ur(FhSks4dmp+Q`fucdD|Sellh#XlN_cLPM%Tef+AhR-SsX)R2fEUs$t5O&9s z5{d&Q0h+}*+k@g6R4&B>oDh@A@bAa z_goVf^u5;0z_i zI<{~6P6)f!z=s@N=4ux6_wQlDEvZCj%$GdeL3HhdWd{w31^XA5J(gU1W_8VR>m&h% ze>OvamMK=9x8|01y2JfC?KQ41PSIoBF-hO;AJ+QzE8Zxq+ET}Iok_?Yl>ym>(m~vc zqD9l`mE9u--KOspWfwJU7#awDbWx_SfCpYpt0 zh%%-ngFG<9go1@uF3NAl)y8sgB4r4FhKhw*3g{e5Dx3fIiARg~G5wNv!J4w3xzgx~ zAy(55C(l0mxy2`gqOj#*|AU&0S0F^`tQgs5wq*{Ry^<-0cd(F-vNUj`3>HCIT783N zu0IFbo7xN6M25!t-T(ZdLTjnpWq$Qka@X|24QET2hK8iB?%w{psbn42&=X{noJD-M zI6zlIMH(7dn8lx2vasTbr?gT!wg6ixX>=3^%_=99HMHU$Sw+#luvNTNfBDlgs(Q(< z?&k)`J<{#%vGuJB1@Fql>SA@JTSna%jC-2)^dVmk$HRw7)>EGg^0Mhj=$@y70Jt++CO2J z(83jw*IFs8kBeS1SxW7;^c@Dlx3q_XpH;KE#J&{KI3cZHD%Sr1Hbok*iM|6@&_Z1| zcbe&U0Xo^VwUW0ZmqqktlqLPc5m`)2$hLGtND}k3vGN#E+;66mbmO_BeisBBtWv_zq3&W zRdc*7AcF_MoU%+U-l9WMqrPb8UXh{i{Itaca7l1{NNfvE3{-2m2%@BtCX&Suo~=+u zGhPmT(HKSpbu6YX74ADLA;}9}mU6mhV;O)+WJBQOth#rsI~N2OD^{j|H*z;g(7X<| ztr}QxefSgC-l&l9+tFafcPfRAak-(92ugoS)e^ze%jT66K<8vkpko4dX^>8~UGGVP zi{$0C&46r0@c{8$rfE7VDuk6)&SIEq{Ipy}VrZoOS}oal3f3#{As$)lU=*bR^q{wxnBXSX;{g9oo;aP&vHt z+ZpUaXN-KiUXRs#3(TbzB31M06ZuOWrV%)(Cf*CoH1(k+ie4XRwg$E0KvSp-G0p~( z5d)`_Ft^UT?(0JFTxDW51M+aMmOPC0Q<={j?*?#kKR5YliPy0S)dpC8;W=#a7LOg6 zNWvHdVtisE(TEm{p(tl)CI*9Fo7%v%1U~?~CInziZUSBe!X|V-33E0W^GH=5@0Sns zU9YzVzvUBJ22Y{Ju{a@!YxNX%0Y@N|(Yi{LwY4$)L=@;}?ms2TC7cW86XHuDYa{pP z6AJjTfO#mU#&KFMUCA|}ir^HKEdxKR=b94ET|gbp=~`s{3_}VonQ}C7a9t`VocryM z?f%us7bjLnGM4CQvm)#~a&0l*`r@qvtf=(uO5*&)Qcdw_I@#`MoMM}i4hdJjx;!J6*Jzqk7r z!ir=e@o2u;a3h!joWEoF%##+?O%$vv!7N?}M6Sn^5|aOFa%&ABrt8uCBK-L2yGh!% z8!s&>SJ@vvT&K%2(y?kxu%Z1xBrz1QsHao+WAI`M`zJm(Y9yks-skhPAFnFG7O)os zkGazHil|-4vPz#DV*rZp#(d}qh;%m+2}~S+`^MK}l%+UQjA6lDI-ZPS{FjLVRGiVl zu8`{2F6KD_N`W^Adfytn_xX}~#PYLOYp~1)3zmAm8c`(ua&nY~i)ZPfF^g_FdXo2k^@GG8(9yrVLdW<8OM7NascuIwE>Cbk(NG%c%6*N_~BNVwz zM2||G@XwTMuO_)rL=BE(e~OknqLEwUUuw@NT=xiPc97oRw^nd}O`T>aAqVdP?z%lj zYq6B44!pGqs7+Pxmq?3~t~r4q#_`k@&NJ16-l|*D2VOH;vnw@wtag)!!(ewHi-ipx z&8%B(z-z&~AMFd=#dOXbJC0!4vHN!^0O9znWGP}Yt2*kOpZMAw1mzN+8Iz}T4Tp^3 z+(QPzHi^K4cT-}J^}S3h_CSX5iL{K1-8-k+%MQoOUhx7Co7Otxndkd#Dk6_P;kl>R zP6)rE23iG*9z|ToE9bLtY;NZ&pY#jO!7`1fj!_Gov)~m_l$K*D&Qv1dkKCDNjzA8} zOjEAvFT0xVEgism_zu@je`VwGIbi@k)|WF$U_a(1$A}4;;U#ubP3StkTUrZ~0k})2 zQH3{%SWsxFU>k0gQctQmQeXl*{QruQvAVk_3u4*=k1<)qodlkMXNwF5Uqg}BK%%kxX`7 zc2r3tTc$r8zv51;END&xR-W^k9jmSsTsu}bIT_20OQa&EJ}|(;-oKxF{o`lv9{q3c zHsVAklqlYfViEk6894v$=i+QVBF%yXBlIq~swT;EU%9hhV>7T_&{6SGg+LC5c32iY zvU#OFr9Mo0X>wZY$OxiYS-dB+GOTm5B-e7+{>P>kK2hBVC2jYTh-)UoF5{(mx{8|j zA@-SdOGkrcDWYxrlij1vV+}bAB0@hjpb^jjB9f6NGUoAvn)#bHiP3ZJV|z6-s&^sT zu}0K~E<@FAeK+A^LZ!gA5=TLP8|H`n&jRu%rm$sR7<2lfB|xf4lgY-@r(Aq&d@vD5 z9UqMWWB3nIdH|v%A}tS{uF&tYDe%DQT;c3q%yOBhJ(^@gs$^J`uYRfg_+tbpupsU^ zLmd&i=*AXb{jmp3>2K?`B8KbzDZj5`fczN7%b?rzA+k?&zg42OLFq$kU%UB^+#D$3 z{wUpepJQC?4>QsS%*cn>TG><7BWc!4j=|uFqrGl%l>&7?@uTLLA2Gb<4(< z-OOlAL{#oyu;M0RUAA*S=*-P|R~uBcV#&Knqz2THkl$YsIY2uf>-?<+F`!`<702AC6AxWPXCMLo}OfY$>R|Wu7payn}o2E5d49y?&ef=vj_or(2fvR7=m$5 zWOTJD3Blwm>*6O65nD0fTR>PWLXg)sHu_RV^pkdN#~*8#1#rtbNv;Z`YQ{#>wpg|( zauQ1i|I{9&I=&Abg5h&BnW}CVAyf)#xi)hV@brXTg{h545JDJeibe9As~!iTQkdG+ zpM!9QIb{aR3}&d=_%``#J$TB4lJLqq))%uV zcf>~i`^?M{RvOoREn!#x36?4Miy@91%j3d35nK4`BhC6PDQGUcy6}JX+v>qavKeJO)z~k(y%tOCfq8kL(f@zG&Q6Ju*`hxrVnyz$PB_ zew22bt&Ye>kG1*(vixF}rMZ z(m(7GxG2_F{Rz^VwWvdfd?#8|ERFKNtbi=)sT(q=7BiK7JCTIv9+Cy^hCM2zZ0HqJEvr9jrt}_u3;RSbsxWWCH&0fBK0(nR&@w z3^ky^E4e~R3eqr3Ev_m#dG^d3zx!hY%r;cClpbw;!1urUB{FS>PFq|Kfd6i_GW30Y zSMtn|=TJ3GmAsW__&i1OXvC;k(LI6g{>u^d|8Pv*O)2w&T&P{>@Gh&GW_;#i%_4qU z(Q?spoax?X>w=Bfw_)asS#Xx?9Jt~YC>})$eUVAc&vXly48Prcxk|`T1G?Fsan-{~ zq45j~?qr#6_4fxn7h4?$X{AMYmh?e<+ad-B#Yj73^H#&)2ex6B?){P}M5Kb=#3 zlgzvz3u>pnNf`vuj1O3ZmxYd+GE47&Og&qE$;fw0Y}~U8Ko#!uwE9Au-ss`!YW4_> z8hAplR!Z~5Aj5mB`YZb;4Nu(r7M98oqvS;;1bj4iB0$3>fC5634|n3d(O+IH-#|zH zFgkaUHX77{byrJuh~Z+BaALX@n0P^HwRhLHXwL4H*jNRn$%8PI$nb74d zex!GLEMN++y}a%&W-GS(34s=OYo!LIOAYTE)*qwJQB=FDlQf=(Q$F&_cC>OuW@U}f4F^H@H!A`%>Jnej`kbiMW% zAaP~}Al^7D$*a!`gNqfIZ|!YMbv}v#PYl&-oWuJ$P?jOV3Kd!BF&_+;46$g8c zkupvF026gpw)*plUez}U0Z_LmBQ(=TCY@h!KgMI+s z9fZll56T7Hcja=YFv=pupfb_R9(mM&K>y?k(C7aD@saF4tZy8A5jI?uv1gM0xa%?P zyy>Ay*V>47c5T5;WqGOf=i_oM&Ri_{q?2NWurz}dt=`0W$2-jIQYO@nEmJ$!P<~Qi zpQ&0);Iq1Np8rlB`#6@a<1 zf^`n+7nD+au(Ne5p3h>_BX_e8eLENhd=XAGOLN=OcYp3$)X2`>_r>I0t$R_V(*B#YRI`W#c94AOE$_-AqD))+2Y@?^S1&+o!_Eek_~ zn87(u344Sr`;Ij#z+Te6U2e&5`I}?xTw(_APP$ z_ue@8SmoW?Z!_^E|#CfRYLIKwh=KM(JY7vqFt(`Z+6$b+V%4(<0pz%TUHzBY-CWw5t?*V;(b* zE?O!v`0&OS?DP<0Y|R8+O>xG@=*i+WrG1V&=5|Ibi8YnDS8Mqm3L5tJ7Uk4d^i>jz zp#8D$KYfmPy4%&XDoifTx;1jMT3)|zsQkQ@ z!K-JBt77=-N;d;T%r_^-&v zkPYSpVR)PKprH1rsD<|rvnd5pGCDlKWobB3GEsPkE@W|+3|K!kizyaAfKOGhDeYhGn7#?`DuHU;f#qkFs!s3^zbUG zGNLR@ocGI^b3MO5LZL83IzXO^&cK;uT|UoxWqM4bE0#^^J7A6GO}W#NZ`1GUX*-;a z@wO;4w$ahM=3yWVG+Y9g%caMcs4E@j4c%_@d8{Rjy^(Uvc6F~HCV8VD_w3?0QX~2g z3r{~0C2$>>e9BpmL)%V|`W-8&<#o$A_lE^t_zPMpd>@!scFR9M?bI^!!N%rUiw4JJ zS9Yj{-nQ-I5^jeqVp4T02k>-!H0KMHN4cZp1^eQw!dN3IpJw?CtJU<9O&?vBf_F(4 zO*Di=3Ek4+smTcw+_*up0V02YRTqYrV;U|QTac4|Bja1YrE67{&N1*E^nA>X ziAfzK}1*2%~%&mCzEu>_>e}D-Q`j3!lB^7jl33sU!vb3@`{7 zF`l=GZ$i6&g;!d|Fi}a3!G9|~;jEucP*|Ap*fI@X7X8*g0xuR&xKa4}_-5jE3B3PT zesv0_2#=URh)sNvot?X~4_s3D->(;nia0iP*F1a}9lN~s{0rAp?xPct4-{;YrZs{2 zlqrMKb%8Gww^@65Z@>1fMBqccEmkkYy}A?=UciqE9bCB|X?5rp+P!yW>4u(mGa2(Z z4L`GvHNO}{!~Mf(ZnIdo>ov3b+)T2)JV$#hO7H7vWP!c1$IkCFiN}?Fen0BF51&iD*HU)XZ1`N9Q@AYb zyQ!nB(u?k5FB|)~y9{0yawlyYNrIIa#(xLWh^O7ketl7oZ~>F-mL01^TEoCQ=-Mtk zkcGy5y-&yY3G*2tI^b0RUU`*{DXjm<>yWgbBvyi)wJ z${w&&YrOqEwIiP~Y$p6_IBZIj`6({!LW33XN?X`T8~W}CUHnDODF>_Cwnyib6X`BJ zQB*#C@=+H$LxIf>O?mNkl?gBvb%;9^*GoeG0;dD+PG(!1-7vPiH{3VbFEsUt5ZY^X znUUQOt+d5WbuRtah*DYg@KR3Z8XZZ+)gCVdG`1?PXl%LJVQv-Xp`SnAH$Sa$%zZ~1 z#$UsWe<4(5)!p9Zk)0gv885jXNP6hi-eT#Q;WiuA#XOqiV}Q)G{}*t9QR_btJkayH z0Cd$KqBP*KG{xhL`2UFV06D)b5c|IhHv;rvM*%Af5DmkR&k4L*^H(v_AH3J-I|2^= z#PWGS$0Klc9XalsV$$nb|CD)<kA#6lSH4>kpzA?THwPu@>rNqH#p1|8Sn!|BIZPV;7b^lEQXW4mTqjgbNIE3* z1j)BA20SY1RS-j;oo{TZWJStD{`8H4l}GDVuXf{rIKNjHm?ca7rzms;^q|y=Qvyn{ z%2(j&LoCQX4}2h!^*ZpyMh87kWf}<&IkKm>YPoY{wBm-TgaY)`{?ww_kW`~S^R` z1G(YAZ$~lX!WKdL=oqcsAaS+7&2gWD7J;nSrB`SvR+&2OPHh9ss2%k50{@Dd2VRE z@Y%ynq5+80`E+6juk@sgX1yk+bDgl@Kje)W=iY>Gz#vL~erGWYx>)`!Tw7@Eo4wsX zr3Nve2b6^X{S|$NhbaKQ`8Q3K=~Gc=UlClXsS}^qfPexA=uW;CNZbQ#c%|mUQDSgw z(}wMzRt8ijShAwL^1~a38;4oVbo)}lqKhAuc`T)`^;gPH`*qSydUyek)qGohJ}3t* zo(MiCeXI6P-T z-;96Eq^=XRvR{|5x{T{2V>X)nLBCnAsta(pjmOPj$ zdmAC79UFi-W1}-vJvi7Z-12^P#}|gZjX6tQB?5Y~y(k#KV$O%O|HrI*fVIv?tBpFF z6JyrAv5%g5+TEnvd-AamWc5hBZ(Dpr@8q=N`(2Q~DR{DS4AjrbTg5(F;1}L0G=k2s zDN|J;?TYqNob{(?Gkh|Isd4~{8uiQ3gDEjBj1==1zWi+#uF+U1b+h=3+c?mVkj0re zXi#xZLTWE8OzDPzqenIY=s0ch+oxY;&ey37K zii2`l!^rswRb41cvi|S97~?!Hpv>^TvEj*<@z#UIAfC{P66xY9E~m^s(CFVQ5mI*3 z+`OQ`F3%AprPh}U#U`XXLv9^rMmWg$G66q zSyv(;us1q?k#$MYqU z6D3jlWTeIpD0l&1-rcgGY9j6MyWhqmfDO(rf)p6KuC!oloSB<#f490Agjo)SIlbFd zBrr-xY-Qvw;vVX31B5)95_ihf0_qqD76Bf{zZd9wOLgwBMIK0~j<8*V|2NXeXXO|Kl}D&FQkP} zP9EmoU0lb#-Lb(@B+W>(!&>Ke@DnQhP6hV-*Uw-!Fk&0+zw#*WlCBNE>)7%IP$^Vh z4~2$qr?IZmTSbrMQ=N^>OV}eI(UD&lg5%1s>FV0PNX{z46wY1v64n@~`mf>^(N%l! zSYFRL<0VYkZ4WI!;l~D|y50^oruf5}_zgI* z{?{bRzoAV2h-?4G43%}AN-ZCs>fI`V&>>;2zBJb-%6eti6fD8IUjWRCygg((uC zel#am?dDlBQ1)2tHp~gU7s%{66SCMa&E8GAlns9eI_AyBl6t20qHQ4bHPAq)?1Ga-K`e}zq*YcVHQ^!2g!O@ZCp$ib_82f-7A5c2labGM*f zWZnSn+uY0FsbC1b+|EyQcI~h6zo}9U)HuEMS$&@H9jAxu7mI58A3Cte9QpGFsNV6m zDkjC=>7&G?vM9p_tk9==b)z@sd2c-npqe(Je*Uz{SOMkAN9KCRIe=VAXFwO4)wJh# zfOsZ`tiatTi@KE6K%cdudfpkLKZ6OV&NdC6%F}GY4D>x;JCCpO{y_hH`;Ad?RiL;! zQ~y2bpM1wRRmL%GREU2gAa2o!gEW7z@t-xvFGNRwKd<7rJzj#2Ex14lqm!_czRd>z zMqzRNAv5{>$Lm8kwY*99d~QA5^b7~?H`(q719msGZogR21ox-K+_|8p#IMg+rs0lZ z+%K?a-IgBRlEu-+b6_*48y^dnM~zAVS-2XB_b=!guuQ^=G_4CKC1z1Gg#;O z@wkN>C}@9?I-$&Ffq(OV1_JL&0s=WY=BXfv+^+T{_IU% z{6HWnll~jk#|S7T)bk0mks4&opfP zO9_YD`;Ham0o;CDvMgI7DI6}V_Y>B;=xI)q`4~o^tRTA11~)~3JK1S;v}J(xK*<}m zqax-9oC?8RO?K?Rw2}@H8HZ}%+%U!IOOfSF|vs$VtigN-^}q{DY!`uuK+8j6o1_nwrE`uy{dsC0mn? zm9a4i6I;OW<+A{WptVuZ&g$i&~UIIe1*^f?YE;-=C3(BN$ha1xJ0Igk0AOBnJ)H6ZKV^w}V%}yOY|3=E00r^*Du-P+PWWHN3G zVxz@ZLB)BtVa;IcAg_(PNmp9wwFGMUumRO~u>DN(I$_mgE_Ja55g!5Lm$CTk|5S){ z!30%4v%(G)|gvr0y*;)VMy%Q%H4!VDzB zo->k*y$$*z;+Rl{jo!j52a+=Ur?Is*rA7c-|68S(L@J^G>c?ge|M8kya49F3FELs{BggP?J6%vJ9ze+Rr;J~*M}Oc+&&xceiDZdBcGHSVpnsmuNhem23uBiG@xCtama`&_1QNWW>x0>rPN${IeTrDTKqiZn0{*GV*S6RRSSkbQt~9 z+@*;O&i4y|vQwfWTyMsU4~Pti#fawcj4*9;B$i~&*&6S&o4!Q;kJH~9CuWiWA%Tar z@jem;Yx>=S4Dd=ITrU}s!A*ZfCEtIVb}PsX3xo9~90CS?Q_zq9G>(`SuFiKF76KU4 zL%55+eax|DYm7xezyK$HtCyK8Ef6pbF)XxW5bC@!0ty&HP}>V)RuUxzo6C zNUrk^Y#D-c^BvOJ6MwQcf%8pVsM&VIwdc%wgt8plw*^FmAh<%ke<6?BXS1)a;?7L4 zwE*wM5I&ppt;%Sgg@7I@Nh*Jx5L!)yi|B?6u@K>zO`xqOcsWXJeeL=r^txX*-Mwe} zc@xOkJCE>Rs1})8QK3c_w|V@los#<-eER*m?V1e+hoNU^7A}Zdn7f*0iPYCpS(1dY zNEvG|Xl?%6X}k801^{{geYk>XuGCFU(EyrL|w=3 zy#O;aOONm1X8rm0>`5E9p4%F=CMCkO+HV$lX5ifbv;YkyV*CEu31wojvf6+<@TI9ox%44=n$01Son{|cqZ9gwbd*%aY!zg2|4P3B+deZQIa*0WO z-3UTAOR#GbBh+=AFo~8_c3A0!o~`FCExE2Fnh{7Ww&2P~lsrOth`O>6$l|20=XttB zQncfBeQvr{k(>=Ts_VEl3F-Jk?c}^I4esgulXDVMKCAx4WVXzxy1qI$$pUUJJyqMi z;hUn7Y6mmUccx7hjyo{j&7{Pr!}t4rg8I2K7V`j$k#U%RX2zuYs#8%u%b6jIf4NQ{ znr|MPC8>r&b4Gs(MG|I@~xKfdM4`fE^N*9mE`zHF6 z2!qhdY5Tx@8VRL(?Ob%_DYbPh+sL!ny(im-0bei?^2_#&kx)Me-M`F#a`6nSlWg}} zpFpkWr5kV$Iyw^QeRnH-Jfe^C{^CrGNIg1|ajF6OuSfq%WmbB$1-#>yUAt3X>&YEy zJF00Wxn-_q`LZWQ<|E3`2%eph+seeGG4@2@)63B76YTw(gJ9WT0cYIZzGR_t_vYOv zdwBO!fg%#24c#axmTo4YPFgTuW_ycK#R--Of^(*VwK8X_Nv8<10$t&TL76L$pHT4p9dIhI5wcHD3A*bd;6=Ea4M~I-y}=7#xaa@2BBhT_O#de z^<(oY@BF8i#(Ic-!mDU7HJe4JppL<-%kvF?dH%zQ{E3AJAOFx7A=W>h{KZi#_x*?- zc^PnMIY=(qk*X%OnNe=`OqnSGkDs?a)l_DAgN9f6__6jUe%ydK`O9s($|j)M0VNrW?J&Ytpt#n_476&scC@H~*~B{@qEb`(u44<)bD4lUV_@R4c4YLfuis+T5<)89i+MS$8<9J=t4Xe^}5ONa%GiAW>sTFKxWC z3a8Qy5Dpticl9RH&y44(7o~;pO7ZCsLbj(h&o!gII>TJsDctkV2ZN)_k|{HPgaPfm zN1oxh9jvA>p`UNp7M0QOqyop<@w7vqs=985#8M&Hd7Yw|&!dgl>_-^}lcxUBHWUMF zLK>YGX~7472nCvty92ToRyexQIjmx0>u(S=vGR<-_008tR1{qs9 z;suexn$zW5hM=eAmzv9AaFr(IRa`<8XX()MWFMOiaapZVQ8a7>_uXwDSC(dN*T91e z=LA?>57M6kGxqRr0@L}}WR^Nw=W&R1sBpgSIC2-6W|RBe=woI%uCiqXMRo!%&j4QD zU&zZ4Doa9X{s}8RZqHVgoJBi}CSd#78{Muo6LRYv2c`-}^Vj+I&Qhu+GTcMWy#s4> zF1ML?LhLw=ETHvkz&LD)PTFRa~mJDzdwf@OeBUX5ow zK#>_=s97cYjQ`Vv95SrQ*#?o9d=+ax8DW z582k}+RBk6^nemX=tlY`awh}_SbUpvum&be?|63=KV-}=JTR($!|&uK1I_om78D>c zlU(G;4^Z9R!CN9c@U z6RX^-E3A?l<7b%9l;Rg8%LFDKQ4BZA^VL<&jIk$f3}^s=9%{l3Op1WtkV1|YYUo9K;3NE z$~5gs?rX6f2e++z^O>*7WA_K8Sz^aBZa9bfjdzC5DCzRH&zibk?J+cvw=ar3a@-VZ z%{=fxkZfBU09+tf!F#sd@{F$=hI=EdtA$@iaSymy%yP6-xi$C^L0nHNzVy{K>(qIg zoyB!QC2W1XWU+^P_UXo}O-Jq6ug~pL^S%1`kAIYfBt2^uI%bybc-L*GPjHFMIU`lP zGq!!4ll65_A1{230Gr|utMK(JQMJE@y6A<#ij(n;Zs&?J$@M`Z;m8{OSs%ATSwBG| zqUS#ZNE6S|HEay|Qn5&lgV5dbMqxWlXF?Fgm5GJ4FC7k9krLrB(W+WO;ivhwosXV%AGsy@(5!7z%G_1P<2_f1jDYB|ol!=jHKnOU@7 zPTF2}i!7s`9nLvv6KmDH5)ZL%=i1m>(4IYu^4DIeVxhvKh=m!4@;fr}{Ft(-?a}_9 zJ7rAzcj-H!bxBlGahVGx{tf*gi8o-%G^}w>1d@T^nJty@d7>7;;!O8W5&`ZvUAJs{KJ;qqI({L)tKDh(tN(U$_Jhi!M zZ*>ttR-jrJXr6s*WhRdc8peI5W8WhtYR;2B-IJphx1 z0Q1oIRb7`(*U_^5DF$5GM)FwJj9Pa`^(t`y2umZ8!92-q|4nqIS-8o0TLaI~Mi?E8lnk8=1d`B#$%O~JurE4zkIcq5DMC0nEKrIjAk zV;$C4_AY+#LvSFB`N$mL(ToVVQ7{x|HqZGRbmsskfVYo}CwG_7#?YIsk!_%YB9o42 zu1c~WG_`{FuG(Sc#{M$Z+y}hC8!KO^o$EEuUt~n<0btj+3i)HkKRi;}ioM*>5l-SI zXwW)f{Mf4Rs>hKEr$*=u7$_Z0@4!h6V)05VWc9{R^(N1&lb0!66@eDt!XY{Y)(w|O zVwlxsEYi)r-!vtt-LZ=@ynvQ@p^&8wJH#1IzG&RFy57-Q1x$=--ax}UT8C94prP}Dw zO-58XUgDTe)ROsa>SAf=mUKIB899X3(E)vMx+BCy#)Hu_63o7ZNY%W$-_QJ^vjX(7T5HU;HY@)?{J7fGdj7afT8NQ)(3Y`-k-zABg0Bc^2a0J|-~`h9DJW@01s#An6$3yAS`#tFCwlSAkt*~T{w{WMs ztpKk)wYO`zTvNB)YY69+e~86H~z%LTOx!E z0P;KnJ{U}5fJ%T&^yT|qzWvR|qC8yiH#Q|e0S4==tMAPZ|7Xgzhp9mjg&K`=RKAe>PAP{JmR8{XP?tzSGnsk{#f)dx}J zyQ1Ugdu*6E-v5*v7_J`356nqM*f3()5SN+3WHYX*4Qmu30aLXpeSbYu`6ENQn<0lBu3-dNQ)gfnMC1l8gJUQac5!#Vux5eMu4&Yylk?Dm9k;5KgXW z_%m3DkxiFa#9c2fnd&90@b^m*`#aMvFB^yJG@>1id3oQpi5W-am$03ilfClg`3T}? zlFU6OQ(YNo5JZxi<_R1L4Q>SpGXvFH zEGT$F*?W72tg~V@MdUpjbSIhZ85}yR4`Mdnof{Cwb_n*4YRwdPVuf&|W8hMt1Sg}K zd80a9#9Sh+8qzKQc!(7988JoyDds-B%Kba@CCdi6b0B4Ml$cy%AUCMtjr!Uf)i#6G z9m3kK0`G9ppBdB3l(dsLYMO#Bu{4^)|PG8uEmkO>dA z?h+9sHeG#;f6it;$Yf^r&&hnm8PkZ@{El6*J4J|rO&I?CW)1TQ1L-Rhj%^zq>KOmli|LYYPgK2QJ6m*)8~%;or7;5&QX^A zTY}ym2(DPcg3p?G`3xeb2-pSW*xB@~$BN4YSgB-Exoz01FvY03nVn)_Lk(5;(y4~e? zu;&Wj?7;NzM;78|FKFZiR!}}w0d--L9h!>Yp4v<1OHg{0o%d+meg^OQ2z))7AstO> zQ{@AOcH-l>0rg&lR&LM_05IXE3txZr?Y}`5H|_fznQ#9P(z@yUmxzA*$7cedVW7zW z?XN6Hv)@t!rxh=A?xyhw0OW|tN4WXz^ZiU#B$QiHp0>Uwzxm1g9qW7g=Rh~78;A(a z#%Jf7ACpUCo<)e15dp=ZZ@?xUygzTB&3>ARk#V018EAVCaJo?`mMhB5(+q+1qVz8V zeg6EEDC~ysy*rIM70?EZ{y#Fb_3QQF99_}}2yZfLoXEM}#AqT+-ovor^?{KzN0-(IQ!KZ!|2*6!5 znbAi(Hv|E6xe49-Y(Hn*n5hP~|9sa`dpf>x`YIUp&+l8em&prm44nVM?Yr2rIVZ2! zuh;c-S}3|cI7V4v(MXp@@#5Ir!4^2WkS2s@90o)LB$_ zRZ*XCc}h5QeI}HZCLd{fykS4RQ&_WfSP7e|tCoufBuQu^=jWxkvcJ+tn?NXP_txx5 zBWQ&%9P)#&UmSzvV!-B{vRwN^n$u*~etlxd#9||rvyJmO^H%8i%A9d#--(Qx%O+*t zPQ~>A-;Vn#;eMst%!eeG%;J$Ni5a_N4^uT!QQes+1S~vHETMKzUUSi7sk zJ`I>c?{z```S-|3#%I}|o@G}rGo;0}uvNPSo9_`(O4d~`i{H01AW#%1){0R4toT`z zm;~{isR~V)>(|$KasK}P+X9CdXBU-Xnh?2Tixm0F;p1gmRHLD-@%Wk{=5(T~YE8l5P&a`|qm&KX)vt9k`V|>-; z_6HghiSy!2rahVlAAWdMddON-$Tgc@pAOIJgsp5%L)GbP8sBxLvzBs z>Zi9FQ;Jyh>NGT5JlhNTd71?@s!bF5K%fN%yNbC5f0o{03b$O@4faI+r>irv8)B}~ z(>BS^@Vvi8`OI)cd@^r&k51@$^exHmzvfFE$`?%_FO6a8Jik?uLd{lO!0o=^^PR_mx)Zcu0)a3fpe!dsyHYYQr0BRD+S=Oc%;B|q zw2Xb3yF|r316y~zB4$itHOUOAIp+?w)V1R!_Kzoj?lOJ^50aUez?FM3eBlyEGa%-A z^1W{7?N7w)&qxLxB4_qP3h=fJz@Y-M%7#arJF!obYg_DnpMV7mKdftCe-}Lpfihoz z+dlZ`ewp-Ur+3C3 zY(Bj(vJK@sTvacU%v;KmKB#n?1Z>|7~P|(w@dIIh|kQexRyw+A!(c7W>RStLke(pMc#T`BiCJgfn-3>M>?1A_eA zrr(G8&#^RkKrP{eJ2_khqMF<_o6yP$_8F&xINc+VT*juLt%2wE_g~>O&g+xLC)sR6 zrriQ|sc$g)e9JdRt?Wpv;F(*ax>PZ3`RY|Oh{t6`Q5%2o!rQ*BR$TdT-#hS&e4kqM z%f}_AJ#lM8Su7g1r{Q@Y2eEU_8WKpsVAY)p_jTH6Hz^?edkLOzXAza1dhgyWy5o`)rDw!9X;71 zAo2h!IZic97*U(7Rd$UogA<0HffuQrUn55?6}W7l5?)<&&x!;-F3D4j+|;p2dxnON zUTHH`m|rNySjZvisuws_<>nZbYkp*D_n<|wt7LthMAGd>akXLSKUHMFjd8*na$Uk6m`%wbRE%1`EA-Lf|qKZ*OGyOW2NT!#q7j%yS8 zs1pLn)0xU`xUUtbHmPVx5}CGx97bb>(SQJWf?njhR1?O(WUM` zg0)AjhZ8D=%)(3cH%1F8-%Ko2G-ME+uBL^474Vp}_R^=OrY-`^GCI}KY|tD2x7U}) zGe@eCdwWGSn+Zs&1$5v~N$%D>-05BmZ+xb9TP%^P?<;Kb(*eOu_O92q~b8?^+qbbrat0aB*zsIm$Xn^ijK=?(87 z(4P@EjSzwSh=-m}F-_po%H`%s)iIP|$bhg4&AzXbs;eMPb3}lG@~J@W(WH=EDv;OV z2+&#Z%(B*Lix=py8y~+R6|PpKS0J*bgi!%{JOBMX5VM+sZ7P3MJxgRY^tCS3C^2gE zhNB1T#LLEW(Swdx2Sf>5rPB%Cv z@H=lu>0d7|^J!tq)<2xY?rv_EQQ0QvIciqJE-#!-Z|wkgqO0UJ(79IvqPl%{w#ugd zjzJtm14`&fHlB{0xLoyAyaEdK3A~-gl12;pI+9 zhSL;il}oYf;^!jp>L}LfH+W7mc9xOzIRQ|N{x8(hPMhO~?a0AIY$BKHuN06+Un)Z( zd@sN~ah!n!OjG~jh#VoVdTldM&@3> zDTD^(IQ5OLzk@H%%?X=NYg?69$1_OLov*kM_yAwbu;FOgFSjM7?4j~p#pv=t&{zgk zFJeQY<%eKvXZH&M`-KAIoP^+67)^!^w`cLa#$QX~iQNdheB^amN*)Ube37scNNrp7N+n>Z^Jr^ZnHQ}DP(12`%8km^U%sNbAFdw)p6KLp3i%5c zg{D#fI}!(h05C-DN*k$SsZT(XQH?y3E{8!QH_qd=I(6r`mLigvY6s;zQOTf^>sMOLBOr>enF5Z_L z%2{%%(Y{^|=E}7ZNsy|^fy}|ZdXMvAmD&1jcRQ20MxV*)8c5#g2&Jl;mr52O2mrq; zZB}~bN^22wz0trtO)ts(4k)p1K)x^bde4zDhBj1qy)aVgaQo`0BDudFdc7 zb74L@E;%#_9bG)r-cg&crE0H{%6210Hb58i6vtVD8t@KgHmJ9+6Ha$3!xDl_RnRN1 zQ0)8)KB*Rq=L=toPZef&a#8felJI_YThEc8aD8%Otk{e3RV6;-#EEr!@oK1MV5G`(NqbtHP?^$Scf_QmG= z370H=)2CAAr!G5;=*NeWPwE}g2H|(7s~xb(o+k_OxgD4@QVM$3`EGQC)0Quw%nAD; zL)M4a`cp(dy%b4NTncEPeY+o=x>Ez$;P7S9uh+rH!y{zYsWR)M$S@yK?Ck03QGLvB zxA0D!(Zn=Sj7j6;h>k4N4h+gCD0mGVr3{MbBunUMXdx8*X8;Z;w|=kS2vCPr06t3e z1J=l+)arbZ%__S^0I-WwS8Fxw>t51pgBc05%lM;l3s5%&_ zckDYdU*6w5DrJ62u1p1J*x?K&jbb74cmM)0bE1k3so}I5eG;1I$>+3XajIa|I(Ak$ znZK;KnMyn_W3$$&|!)#liFVx#CFYf7$Eg-k2r5k5(IDq=R7xwEo$ z^bASCu->JGyC~dql^(qoe6;Le%oJ?UziJTUqTbS6Cs#+h+WBD*-pHOWu8l;s`cH zsi#u4n!chtzCrFf#&@FU!gKNU_zW-m+Xd?;?)bUtG9}ZVQNp=LP$8J zmYP8Mt5x7xf%k2|@fpGSAbCKO-tA;}z9PpZ#~1~R%sf8zQ=*odh?=RIk;+K|H~6cd zc)nKoI$*vkY?jF?BCC1CPgzXnwne&FM>8<`_Qr8`afuFda~6KIioa1_Zl1ey!czxJ zKY!9Ktba&`P*2&z7po0pHoVt^x>+~?25EcvFtKjVY-L<>@$N+eQs9SrLC^0IvD%f< z{DI7^)YKo~eMaAU{2cF{Iq$`*qMhoQaCpz>w8MV@2>_E{SauzC3<*-OzD|z{HSOlH z-7TK-c~hd0{t$1eowiGTK!_+vqe(kim>79ZAsLfAqs`Au{j%SqD;ZET0q=2wLljfe z7$B$gQ!Ii-ndkBb&t6Dp_YI)M9uuf5uC)oC3~&=UOFKDB$9j6C37+@*^{>?vj2l_f z4banR-76ErFQdcMx%TR!iVmI_SMw*T~W?Lb0xK zaXk$JLrESpEof?j>5_zVfl`BA^DU;7It5;VF|}%wtf-Y9sDd`BtGb5|xMo3lebOHH zsd|gV8>B=3UoNk{8vdx(!blvkrobVE<|a_n*j3xoHSckkzZNX(x?TG4-T@H&Og{u1 zdIq{eStVZ8Y-K|ZP!cbs^ZQB!eKhz<91sdc7R@0UULMYgPD%l^fTR+f20MGARzZ%h zQI=8hQEx1}#L7sLnkL8T(DZgIq5g0HYV7n)_LC3XmZ8&A6WSZMA$&T9CWZD(_I@0=u8)R)#UHOQk zoMrf<)U)b~h%E_pKXU1b5SHd|?+Q6|k!s75BLp#Zn409T{qiUaZM`<({eO9cj*Ugi4|?zFOrf zoekkPXY!w?_Lj3g@d|t*50`eA|vLvD=sQ zefx4U$7;iS%Mwx4<#ic?EVQ7Nl@+VUFsW_I!P7I_;nDr*)5LsmPvu1(FFuKn+PBYR62L}Nw9|@tDArG5( zn#&K*G17(4aW(mer6bzFYGz03$iUk0q&FOZ5m(=uu2z1;Ged5G-guN>?$Pwct=wr# zt49JbnX?5effEd{lz-X@jSOD5sZ)bU1%*!|l}*3(OEPw6=g!UUmFuP?5UWhIrKuCj z`UBQ<5~ARK!k*cedEmSj)FOHz*6H+?_$&4B3L4`>bQ~noi-SC|cpC{*5pEydHRrV* zfv$w1!8)W#nq`R9(Xz^|`DqM01MOXI8pfJebMcpNT#+UCe3zAyEV?x+)#_$199KWf&7?_$ z`obS`(QFMa&o%j#+k|oAd8ZXMDDjR^)0r~%Gc=PXN|P%uqUGhLU1gK<=FFn-xa=AL zpR0A=DI_S%v6FzP0N*$2lN)O(A{4kzto))SE6eX{%_Jmy-*NbIT4Ub|lj}|je zly>*a8p=G>L|NbSL$TC#M{QL9eyimQckLGX*$2@+1L%D$a-;W6wJlAu;iYmk*y>ii zBsF32rF{gEqO_6y^RY?Cal-!<7$~z)F4BWu5aslb19 zGo^N9U9*1L#nP~eVt~JHt4bv3`PRm!@GQCa=gP_y%u?m-*AR@*qb|_mI=6~fDgZ~C z&)t~Rm1;dYq^jD{907b03~M2U8XoE*sZd`wXc>Z{99f#Ah&xi}c_MN|Xqg1l{Ef8V zGmKQdoa%c*oIBxIBvH7#r;Kbsj_<+ZxNB-}0^s-z{pf2SxJ{C2?k2JbY3+r#obDbs zXMFS2@9?{1_IhMn(+48$N+q}`D~!o~W1*=MXrHY5%`CLwWtax!DTQ`^&+8&7JO%t` z5P~V-v}@wn=1!%K5ecrzwd9T7QbJbv7G+u>D+scRMpK@!tFYGNUiykPQ?Q4L}tVAFYSpiIgsT4savKmssHOVqsK=fmAUyVUCU=yj>tmJ9Z%h_l%adeLF5! zXFv-jS4Yxid%8NHg<-7D3D{<|a0c}%RVyb1wFs9H-0LHI3yU11tc9|{QaQu-saPA? ztFyQgp%kj6_a*cYkPI`;DIY8t)t z8&nJqpUT!s0nW|L=OqzDLE>jyM~lkYrA|m`S{%x%Txq%Qe-_MkiC`kDR@l{+8Mw(r zV_XI*#XIp$hU9JnIvKcBPH8T$Q)w|oGc13tPnIf}+ONs*hSh{y#OwjNMz1`ndZD94 zZ5N!&d;>=8^%P4_7K@=$^H$1^dEV)=NvtV*>M}!OWR-OlGOC0m+5p zUzVC3@fpg;Bf_LO&A%bF|JvgH6t7bhARVCAyD%8D=q$vG>XdagiCe;d9) z+_mU)8~OR!!~i>Yj1mwSfdaXE~tvTG~2FJky8uY}4JkIN_Rd6}-3a~ z*Y6>3k&uw+SyFf-@o1yU0K?!h+q_^ML=*>U-dSH?_S_z~t0t--Lgzr7i!O19Ml&E6 zKOnH)v3g)H>!oPo)Iga9>(wU{hRE}z6wJi3??EJ;1}Wx*N)v4b?pK-VGX4uIwz@wu zW#fH=Ro3^0$|)~U^Bx3SG%0_ajX-T1Ue!#$KxSX_Pp|6;&C5A)oH(YS9@>fjc9r%k zUGQbJK6V^wcg;Y?P{f|iH8MRNgBQabJtf1r*iLQ0OhY;Ez)Cp#bY2@%gx38LQ&xua zkpr``u!mbCK2igt^9CkjX9o61Q$bELr^4@@cnk83>9NZ`Qo^AFMIRKGYKvP`Ny2DK2mRKrF6y@$@}H(H3(mxxgyqFfHucyK~& zjoBqQQ(3fa(+fQ{JZ$Tx;HK**P9B@Own;7ZN}rT=PQ<~oNi8jzuzdZ9-nWB{Oh+O4 zhnX`8;{wei!gXS}`RPv)J(F=(j_EH$E>1=jwhyEC5O)18(VQuI4)nG1Ld4n)Qq^)* zK%+@Er0Sxq_2Oe`*H5!AaC86X**+jY?oY?&FHjr*ObB`3j7M`gx{&-(;?r2)6i&e@ zKfEnX)47(|?P>A)#rBKZn&MHBqS3O!-7g!LD>!|80u$$@QPG5&_1Q~ISEz8$#nG^6 z3Ca)KIClkVB)y_SY`(;d(fnGX+ZjjRNpHcJvUl0w1v8 z#82~eNJT@A14-NXF}T>qNIPPOW|TV$bJey3V?+w*Kz~ z`hk`DZ{uWLVA#H*5uSWa#s=$}`9o4V8bRVg{Ai4jP78ET%z&0am zP)kYr)+7S{^_B|Q2P?BvM#Qv}mp~2hsog?(O-9Q@#AaDx>m)Z?40a=Eec0@~8N_$4y$X-3! z!dAawRn$g&%lM07n^ghZP7(Ca0Pu8AIb%i?D`V6=yTTG*K#H7KA%36_l;!?riUEb) zw(K1!h{!Gt3yw&&V9xt^#C#`QkQN5khypWVgeol*Y+wTap+BYif~vWu4iO)bmwB_y zWU;fAxS}g_Xj;mSQn#=x5d&Z$5Erc+6F~{6=-Ggtijc=UhZ`)-kUT{!w;V0hof`T0 zZrtA2yx3&P5|R((Q&QpxdZ`bPi~1$gc8(w4inb__%EDW6Zy$Blrg7=wr8d1PaojAD z{xGA#TP8g5EMIu-hdzx!9XDH1@Ug2GxKD@0i<^=h1vGbVcgp!tLk?6QU_|uLYxOp! zN)FEopcG2G{*o{J0Kx#Kxp|Yo{WC%O2n66F9@hRfpK-4dc<%=@H>SzsfIm_kL^ptu z&$p>`ygzb7tlPj(w=aI8`y<(EI1NBTgq*4^=x`NZli%)ra}_ZB?H6fM|43SXu)D#N zOe|%l$h-`L+&a@(i&(%1Z2_wcTMaD4Wfd} z&4yI^{?>500kh Date: Wed, 31 Mar 2021 17:01:36 -0700 Subject: [PATCH 081/100] Update commit --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 4baad5453..51e058411 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 4baad5453f2de231ae7d50cb232060084e55caf7 +Subproject commit 51e058411081aff1d91323e987bb8f0a59548bd0 From ab4db10634dfaaea0b94f765131113482eb414d4 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Wed, 31 Mar 2021 17:31:56 -0700 Subject: [PATCH 082/100] Update service-mesh.md --- daprdocs/content/en/concepts/service-mesh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md index cba402532..67902e48d 100644 --- a/daprdocs/content/en/concepts/service-mesh.md +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -7,7 +7,7 @@ description: > How Dapr compares to, and works with service meshes --- -Dapr uses the sidecar architecture, running as a separate process alongside the application and includes features such as network security and distributed tracing. This often raises the question - how does Dapr compares to service mesh solutions such as Linkerd and Istio? +Dapr uses the sidecar architecture, running as a separate process alongside the application and includes features such as network security and distributed tracing. This often raises the question - how does Dapr compare to service mesh solutions such as Linkerd and Istio? ## How Dapr and service meshes compare While Dapr and service meshes do offer some overlapping capabilities, **Dapr is not a service mesh**. Unlike a service mesh which is focused on networking concerns, Dapr is focused on providing building blocks that make it easier for developers to build microservices. Dapr is developer-centric versus service meshes being infrastructure-centric. From 908c1fa1472c645bd41810f50d8f6e98c83f0443 Mon Sep 17 00:00:00 2001 From: Mark Fussell Date: Wed, 31 Mar 2021 21:21:01 -0700 Subject: [PATCH 083/100] Update service-mesh.md --- daprdocs/content/en/concepts/service-mesh.md | 34 +++++++++++--------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md index 67902e48d..5ee94f698 100644 --- a/daprdocs/content/en/concepts/service-mesh.md +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -1,41 +1,45 @@ --- type: docs -title: "Dapr & service meshes" +title: "Dapr and service meshes" linkTitle: "Service meshes" weight: 700 description: > How Dapr compares to, and works with service meshes --- -Dapr uses the sidecar architecture, running as a separate process alongside the application and includes features such as network security and distributed tracing. This often raises the question - how does Dapr compare to service mesh solutions such as Linkerd and Istio? +Dapr uses a sidecar architecture, running as a separate process alongside the application and includes features such as, service invocation, network security and distributed tracing. This often raises the question - how does Dapr compare to service mesh solutions such as Linkerd, Istio and Open Service Mesh (OSM)? ## How Dapr and service meshes compare -While Dapr and service meshes do offer some overlapping capabilities, **Dapr is not a service mesh**. Unlike a service mesh which is focused on networking concerns, Dapr is focused on providing building blocks that make it easier for developers to build microservices. Dapr is developer-centric versus service meshes being infrastructure-centric. +While Dapr and service meshes do offer some overlapping capabilities, **Dapr is not a service mesh** where a service mesh, is defined as a *networking* service mesh. Unlike a service mesh which is focused on networking concerns, Dapr is focused on providing building blocks that make it easier for developers to build applications as microservices. Dapr is developer-centric versus service meshes being infrastructure-centric. -In most cases, developers do not need to be aware that the application they are building will be deployed in an environment which includes a service mesh since a service mesh intercepts network traffic. Service meshes are mostly managed and deployed by system operators. However, Dapr building block APIs are very much intended to be used by developers explicitly in their code. +In most cases, developers do not need to be aware that the application they are building will be deployed in an environment which includes a service mesh since a service mesh intercepts network traffic. Service meshes are mostly managed and deployed by system operators. However, Dapr building block APIs are intended to be used by developers explicitly in their code. -Some common capabilities Dapr shares with service meshes include: -- Secure service-to-service communication through mTLS encryption -- Metric collection -- Distributed tracing +Some common capabilities that Dapr shares with service meshes include: +- Secure service-to-service communication with mTLS encryption +- service-to-service metric collection +- service-to-service distributed tracing - Resiliency through retries -However, Dapr does not provide capabilities for traffic behavior such as routing or traffic splitting. Dapr does provide application level building blocks for state management, pub/sub messaging, actors and more. + Importantly Dapr provides service discovery and invocation via names which is a developer centric convern. This means that through Dapr's service invocation API, developers call a method on a service name, whereas service meshes deal with network concepts such as IPs and DNS addresses. However, Dapr does not provide capabilities for traffic behavior such as routing or traffic splitting. Traffic routing is often addressed with ingress proxies to an application and does not have to use a service mesh. In addition, Dapr does provides other application level building blocks for state management, pub/sub messaging, actors and more. -The illustration below captures some of the overlapping features and unique capabilities Dapr and service meshes offer: +Another difference between Dapr and service meshes is with observability (tracing and metrics). Service meshes operate at the network level and trace the network calls between services. Dapr does this with service invocation, however Dapr also provides observability (tracing and metrics) over pub/sub calls using trace ids written into the Cloud Events envelope. This means that the metrics and tracing with Dapr is more extensive than with a service mesh for applications that use both service-to-service invocation and pub/sub to communicate. + +The illustration below captures the overlapping features and unique capabilities that Dapr and service meshes offer: -## Using Dapr together with a service mesh -Dapr can work well with service meshes. In the case where both are deployed together, both a Dapr and service mesh sidecar will be running in the application environment. In those cases, it is recommended to ensure only Dapr or only the service mesh perform mTLS encryption and distributed tracing. +## Using Dapr with a service mesh +Dapr does work with service meshes. In the case where both are deployed together, both Dapr and service mesh sidecars are running in the application environment. In this case, it is recommended to configure only Dapr or only the service mesh to perform mTLS encryption and distributed tracing. -Watch these recordings from the Dapr community calls showing presentations on running Dapr together with service meshes: +Watch these recordings from the Dapr community calls showing presentations on running Dapr together with different service meshes: - General overview and a demo of [Dapr and Linkerd](https://youtu.be/xxU68ewRmz8?t=142) - Demo of running [Dapr and Istio](https://youtu.be/ngIDOQApx8g?t=335) ## When to choose using Dapr, a service mesh or both Should you be using Dapr, a service mesh or both? The answer depends on your requirements. If, for example, you are looking to use Dapr for one or more building blocks such as state management or pub/sub and considering using a service mesh just for network security or observability, you may find that Dapr is a good fit and a service mesh is not required. -If however, you need advanced, fine grained networking control, you would probably benefit from using a service mesh. +Typically you would use a service mesh with Dapr where there is a corporate policy that traffic on the network needs to be encrypted regardless for all applications. For example, you may be using Dapr in only part of your application and other services and processes that are not using Dapr in your application also need encrypted traffic. In this scenario a service mesh is the better option and most likely you should use mTLS and distributed tracing on the service mesh and disable this on Dapr. -In some cases, where you require capabilities that are unique to both you will find it useful to leverage both Dapr and a service mesh - as mentioned above, there is no limitation for using both. +If you need traffic splitting for A/B testing scenarios you would benefit from using a service mesh, since Dapr does not provide this. + +In some cases, where you require capabilities that are unique to both you will find it useful to leverage both Dapr and a service mesh - as mentioned above, there is no limitation for using them together. From d761a46840f973e183eac5a4bfce07aec126b528 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Apr 2021 07:56:57 +0000 Subject: [PATCH 084/100] Bump y18n from 4.0.0 to 4.0.1 in /daprdocs Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.1. - [Release notes](https://github.com/yargs/y18n/releases) - [Changelog](https://github.com/yargs/y18n/blob/master/CHANGELOG.md) - [Commits](https://github.com/yargs/y18n/commits) Signed-off-by: dependabot[bot] --- daprdocs/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daprdocs/package-lock.json b/daprdocs/package-lock.json index f31aedfcc..8caa8959e 100644 --- a/daprdocs/package-lock.json +++ b/daprdocs/package-lock.json @@ -918,9 +918,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yargs": { From 39c232b21c98432de07fe443345d4fca01488661 Mon Sep 17 00:00:00 2001 From: wise-Kaas Date: Thu, 1 Apr 2021 13:02:52 +0300 Subject: [PATCH 085/100] matched default ports for http and gprc --- daprdocs/content/en/reference/cli/dapr-run.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/cli/dapr-run.md b/daprdocs/content/en/reference/cli/dapr-run.md index 7461f8eee..f1ca6ddf3 100644 --- a/daprdocs/content/en/reference/cli/dapr-run.md +++ b/daprdocs/content/en/reference/cli/dapr-run.md @@ -30,8 +30,8 @@ dapr run [flags] [command] | `--app-ssl` | | `false` | Enable https when Dapr invokes the application | `--components-path`, `-d` | | `Linux & Mac: $HOME/.dapr/components`, `Windows: %USERPROFILE%\.dapr\components` | The path for components directory | `--config`, `-c` | | `Linux & Mac: $HOME/.dapr/config.yaml`, `Windows: %USERPROFILE%\.dapr\config.yaml` | Dapr configuration file | -| `--dapr-grpc-port` | | `3500` | The gRPC port for Dapr to listen on | -| `--dapr-http-port` | | `50001` | The HTTP port for Dapr to listen on | +| `--dapr-grpc-port` | | `50001` | The gRPC port for Dapr to listen on | +| `--dapr-http-port` | | `3500` | The HTTP port for Dapr to listen on | | `--enable-profiling` | | `false` | Enable `pprof` profiling via an HTTP endpoint | `--help`, `-h` | | | Print this help message | | `--image` | | | The image to build the code in. Input is: `repository/image` | From fc9df14a7bc4de63cbfd50b852f18a2a8c99cc01 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 1 Apr 2021 08:37:22 -0700 Subject: [PATCH 086/100] Typo fixes --- daprdocs/content/en/concepts/service-mesh.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md index 5ee94f698..7e2f11344 100644 --- a/daprdocs/content/en/concepts/service-mesh.md +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -16,11 +16,11 @@ In most cases, developers do not need to be aware that the application they are Some common capabilities that Dapr shares with service meshes include: - Secure service-to-service communication with mTLS encryption -- service-to-service metric collection -- service-to-service distributed tracing +- Service-to-service metric collection +- Service-to-service distributed tracing - Resiliency through retries - Importantly Dapr provides service discovery and invocation via names which is a developer centric convern. This means that through Dapr's service invocation API, developers call a method on a service name, whereas service meshes deal with network concepts such as IPs and DNS addresses. However, Dapr does not provide capabilities for traffic behavior such as routing or traffic splitting. Traffic routing is often addressed with ingress proxies to an application and does not have to use a service mesh. In addition, Dapr does provides other application level building blocks for state management, pub/sub messaging, actors and more. + Importantly Dapr provides service discovery and invocation via names which is a developer centric concern. This means that through Dapr's service invocation API, developers call a method on a service name, whereas service meshes deal with network concepts such as IPs and DNS addresses. However, Dapr does not provide capabilities for traffic behavior such as routing or traffic splitting. Traffic routing is often addressed with ingress proxies to an application and does not have to use a service mesh. In addition, Dapr does provides other application level building blocks for state management, pub/sub messaging, actors and more. Another difference between Dapr and service meshes is with observability (tracing and metrics). Service meshes operate at the network level and trace the network calls between services. Dapr does this with service invocation, however Dapr also provides observability (tracing and metrics) over pub/sub calls using trace ids written into the Cloud Events envelope. This means that the metrics and tracing with Dapr is more extensive than with a service mesh for applications that use both service-to-service invocation and pub/sub to communicate. From 87126869cbf12d9b5ec6bd237212b6f6c2749617 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 1 Apr 2021 08:39:11 -0700 Subject: [PATCH 087/100] small phrasing change --- daprdocs/content/en/concepts/service-mesh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md index 7e2f11344..342aa1049 100644 --- a/daprdocs/content/en/concepts/service-mesh.md +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -40,6 +40,6 @@ Should you be using Dapr, a service mesh or both? The answer depends on your req Typically you would use a service mesh with Dapr where there is a corporate policy that traffic on the network needs to be encrypted regardless for all applications. For example, you may be using Dapr in only part of your application and other services and processes that are not using Dapr in your application also need encrypted traffic. In this scenario a service mesh is the better option and most likely you should use mTLS and distributed tracing on the service mesh and disable this on Dapr. -If you need traffic splitting for A/B testing scenarios you would benefit from using a service mesh, since Dapr does not provide this. +If you need traffic splitting for A/B testing scenarios you would benefit from using a service mesh, since Dapr does not provide these capabilities. In some cases, where you require capabilities that are unique to both you will find it useful to leverage both Dapr and a service mesh - as mentioned above, there is no limitation for using them together. From bdbb6ae7dc8e0da7f5926786658ad9a0d1be1bd5 Mon Sep 17 00:00:00 2001 From: Artur Souza Date: Thu, 1 Apr 2021 09:07:47 -0700 Subject: [PATCH 088/100] Update support-release-policy.md --- .../content/en/operations/support/support-release-policy.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 7dd39ebe4..8766f4db0 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -32,8 +32,8 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| | Feb 17th 2021 | 1.0.0
| 1.0.0 | Java 1.0.0
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported | -| Mar 4th 2021 | 1.0.1
| 1.0.1 | Java 1.0.0
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported | -| Mar 30th 2021 | 1.1.0
| 1.1.0 | Java 1.1.0
Go 1.1.0
PHP 1.1.0
Python 1.1.0
.NET 1.1.0 | 0.6.0 | Supported (current) | +| Mar 4th 2021 | 1.0.1
| 1.0.1 | Java 1.0.2
Go 1.0.0
PHP 1.0.0
Python 1.0.0
.NET 1.0.0 | 0.6.0 | Supported | +| Apr 1st 2021 | 1.1.0
| 1.1.0 | Java 1.0.2
Go 1.1.0
PHP 1.0.0
Python 1.1.0
.NET 1.1.0 | 0.6.0 | Supported (current) | ## Upgrade paths After the 1.0 release of the runtime there may be situations where it is necessary to explicitly upgrade through an additional release to reach the desired target. For example an upgrade from v1.0 to v1.2 may need go pass through v1.1 @@ -66,4 +66,4 @@ Here is an example, using a hypothetical 1.1.0 as the deprecation announcement r Dapr can support multiple hosting platforms for production. With the 1.0 release the two supported platforms are Kubernetes and physical machines. For Kubernetes upgrades see [Production guidelines on Kubernetes]({{< ref kubernetes-production.md >}}) ## Related links -* Read the [Versioning policy]({{< ref support-versioning.md >}}) \ No newline at end of file +* Read the [Versioning policy]({{< ref support-versioning.md >}}) From 5ff6ff437b4ed24bbbd0223e46e8a9bcc2d37856 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Thu, 1 Apr 2021 10:27:27 -0700 Subject: [PATCH 089/100] Update SDK-Docs --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 51e058411..fadb6c265 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 51e058411081aff1d91323e987bb8f0a59548bd0 +Subproject commit fadb6c2654255864438c387a1a2b862eaf3af240 From 67aa327da7f03ca9a08cf659cbef1c9e4b01675d Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Thu, 1 Apr 2021 13:55:53 -0700 Subject: [PATCH 090/100] ci: add Azure Static Web Apps workflow file on-behalf-of: @Azure opensource@microsoft.com --- ...re-static-web-apps-proud-bay-0e9e0e81e.yml | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml diff --git a/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml new file mode 100644 index 000000000..2ab15ad3c --- /dev/null +++ b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml @@ -0,0 +1,45 @@ +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - v1.1 + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - v1.1 + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v0.0.1-preview + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/daprdocs" # App source code path + api_location: "api" # Api source code path - optional + output_location: "public" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v0.0.1-preview + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} + action: "close" From d52a169dd7451b8b5ea3d30408ccad9f0421f667 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Thu, 1 Apr 2021 13:58:16 -0700 Subject: [PATCH 091/100] Update workflow --- .../azure-static-web-apps-proud-bay-0e9e0e81e.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml index 2ab15ad3c..0028230f8 100644 --- a/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml +++ b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml @@ -17,10 +17,15 @@ jobs: steps: - uses: actions/checkout@v2 with: - submodules: true + submodules: recursive + - name: Setup Docsy + run: cd daprdocs && git submodule update --init --recursive && sudo npm install -D --save autoprefixer && sudo npm install -D --save postcss-cli - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v0.0.1-preview + env: + HUGO_ENV: production + HUGO_VERSION: "0.74.3" with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) @@ -30,6 +35,7 @@ jobs: app_location: "/daprdocs" # App source code path api_location: "api" # Api source code path - optional output_location: "public" # Built app content directory - optional + app_build_command: "hugo" ###### End of Repository/Build Configurations ###### close_pull_request_job: From f5b39a3f4886348e83f8705ab13c2ff3f6fc9d80 Mon Sep 17 00:00:00 2001 From: Charlie Stanley Date: Thu, 1 Apr 2021 14:54:30 -0700 Subject: [PATCH 092/100] Update kubernetes-upgrade.md --- .../hosting/kubernetes/kubernetes-upgrade.md | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md index 6f8d0fd99..2e44e4e55 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md @@ -25,6 +25,26 @@ The example below shows how to upgrade to version 1.1.0: You can provide all the available Helm chart configurations using the Dapr CLI. See [here](https://github.com/dapr/cli#supplying-helm-values) for more info. +#### Troubleshooting upgrade using the CLI + +There is a known issue running upgrades on clusters that may have previously had a version prior to 1.0.0-rc.2 installed on a cluster. + +Most users should not encounter this issue, but there are a few upgrade path edge cases that may leave an incompatible CustomResourceDefinition installed on your cluster. The error message for this case looks like this: + +``` +❌ Failed to upgrade Dapr: Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply +The CustomResourceDefinition "configurations.dapr.io" is invalid: spec.preserveUnknownFields: Invalid value: true: must be false in order to use defaults in the schema + +``` + +To resolve this issue please run the follow command to upgrade the CustomResourceDefinition to a compatible version: + +``` +kubectl replace -f https://raw.githubusercontent.com/dapr/dapr/5a15b3e0f093d2d0938b12f144c7047474a290fe/charts/dapr/crds/configuration.yaml +``` + +Then proceed with the `dapr upgrade --runtime-version 1.1.0 -k` command as above. + ### Helm From version 1.0.0 onwards, upgrading Dapr using Helm is no longer a disruptive action since existing certificate values will automatically be re-used. @@ -64,4 +84,4 @@ From version 1.0.0 onwards, upgrading Dapr using Helm is no longer a disruptive ## Next steps - [Dapr on Kubernetes]({{< ref kubernetes-overview.md >}}) -- [Dapr production guidelines]({{< ref kubernetes-production.md >}}) \ No newline at end of file +- [Dapr production guidelines]({{< ref kubernetes-production.md >}}) From 494b6b1949b2c527046fcdb0d6a7e94d4e0e9434 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 1 Apr 2021 15:39:14 -0700 Subject: [PATCH 093/100] Updating config for v1.1 release --- daprdocs/config.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 9b4b6c6b1..ecb64e448 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -1,5 +1,5 @@ # Site Configuration -baseURL = "https://v1-1.docs.dapr.io/" +baseURL = "https://docs.dapr.io/" title = "Dapr Docs" theme = "docsy" disableFastRender = true @@ -136,16 +136,16 @@ github_subdir = "daprdocs" github_branch = "v1.1" # Versioning -version_menu = "v1.1 (edge)" +version_menu = "v1.1 (latest)" version = "v1.1" archived_version = false [[params.versions]] - version = "v1.1 (edge)" + version = "v1.1 (latest)" url = "#" [[params.versions]] - version = "v1.0 (latest)" - url = "https://docs.dapr.io" + version = "v1.0" + url = "https://v1-0.docs.dapr.io" [[params.versions]] version = "v0.11" url = "https://v0-11.docs.dapr.io" From 99effae0043d76e483472d86ad2079de196ded41 Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Thu, 1 Apr 2021 18:09:05 -0700 Subject: [PATCH 094/100] Changing page ordering for k8s pages --- .../content/en/operations/hosting/kubernetes/cluster/_index.md | 2 +- .../content/en/operations/hosting/kubernetes/kubernetes-job.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/_index.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/_index.md index 6a67e6a10..ce3cad39c 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/_index.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/_index.md @@ -2,7 +2,7 @@ type: docs title: "Kubernetes cluster setup" linkTitle: "How-to: Setup clusters" -weight: 70000 +weight: 80000 description: > How to create a Kubernetes cluster --- \ No newline at end of file diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md index 7c4f9b9c6..bbbf1f483 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md @@ -2,7 +2,7 @@ type: docs title: "Running Dapr with a Kubernetes Job" linkTitle: "Kubernetes Jobs" -weight: 1000 +weight: 70000 description: "Use Dapr API in a Kubernetes Job context" type: docs --- From 1150e094e20e00a040bb651627dd80ed9ea3ae7d Mon Sep 17 00:00:00 2001 From: Ori Zohar Date: Fri, 2 Apr 2021 12:05:39 -0700 Subject: [PATCH 095/100] Updating archived version banner for v1.1 (disabled) --- daprdocs/config.toml | 1 + daprdocs/layouts/partials/version-banner.html | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 daprdocs/layouts/partials/version-banner.html diff --git a/daprdocs/config.toml b/daprdocs/config.toml index ecb64e448..c01bf3e32 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -139,6 +139,7 @@ github_branch = "v1.1" version_menu = "v1.1 (latest)" version = "v1.1" archived_version = false +url_latest_version = "https://docs.dapr.io" [[params.versions]] version = "v1.1 (latest)" diff --git a/daprdocs/layouts/partials/version-banner.html b/daprdocs/layouts/partials/version-banner.html new file mode 100644 index 000000000..0436da130 --- /dev/null +++ b/daprdocs/layouts/partials/version-banner.html @@ -0,0 +1,15 @@ + + {{ if .Site.Params.archived_version }} + {{ $color := "primary" }} + {{ $latest_version := .Site.Params.url_latest_version }} + {{ $current_version := .Site.Params.version }} +
+ {{ with $current_version }}

The documentation you are viewing is for Dapr {{ . | markdownify }} + which is an older version of Dapr. + {{ with $latest_version }}For up-to-date documentation, see the + latest version.

+ {{ end }} + {{ end }} +
+{{ end }} From 804dcac1ef6177a3e79c94146f1ca8a2397faeaa Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 5 Apr 2021 12:53:15 -0700 Subject: [PATCH 096/100] Add token flag --- .github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml index 0028230f8..3c14f7651 100644 --- a/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml +++ b/.github/workflows/azure-static-web-apps-proud-bay-0e9e0e81e.yml @@ -29,6 +29,7 @@ jobs: with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + skip_deploy_on_missing_secrets: true action: "upload" ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig @@ -48,4 +49,5 @@ jobs: uses: Azure/static-web-apps-deploy@v0.0.1-preview with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_PROUD_BAY_0E9E0E81E }} + skip_deploy_on_missing_secrets: true action: "close" From eace5730f1199e61a009bec5fe8071d62aab7c0a Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 5 Apr 2021 13:28:22 -0700 Subject: [PATCH 097/100] Add button shortcode --- daprdocs/layouts/shortcodes/button.html | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 daprdocs/layouts/shortcodes/button.html diff --git a/daprdocs/layouts/shortcodes/button.html b/daprdocs/layouts/shortcodes/button.html new file mode 100644 index 000000000..54ca0c714 --- /dev/null +++ b/daprdocs/layouts/shortcodes/button.html @@ -0,0 +1,7 @@ +{{ $color := .Get "color" | default "primary" }} +{{ $page := .Get "page" }} +{{ $link := .Get "link" | default "#" }} + +{{- if $page -}}{{- $link = ref . $page -}}{{- end -}} + +{{ .Inner }} From 08b8bf0c150bc0005e6be22a4782bec08185a522 Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 5 Apr 2021 13:35:37 -0700 Subject: [PATCH 098/100] Add regex to button --- daprdocs/layouts/shortcodes/button.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/layouts/shortcodes/button.html b/daprdocs/layouts/shortcodes/button.html index 54ca0c714..d931eab64 100644 --- a/daprdocs/layouts/shortcodes/button.html +++ b/daprdocs/layouts/shortcodes/button.html @@ -4,4 +4,4 @@ {{- if $page -}}{{- $link = ref . $page -}}{{- end -}} -{{ .Inner }} +{{ .Inner | replaceRE "(.*)\n" "$1" }} From c58a9faa79196f6ccecec374c2e178f042e40ffe Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 5 Apr 2021 13:47:28 -0700 Subject: [PATCH 099/100] Update to parameter instead of inner --- daprdocs/layouts/shortcodes/button.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/daprdocs/layouts/shortcodes/button.html b/daprdocs/layouts/shortcodes/button.html index d931eab64..5ab0ddc9b 100644 --- a/daprdocs/layouts/shortcodes/button.html +++ b/daprdocs/layouts/shortcodes/button.html @@ -1,7 +1,8 @@ {{ $color := .Get "color" | default "primary" }} {{ $page := .Get "page" }} {{ $link := .Get "link" | default "#" }} +{{ $text := .Get "text" }} {{- if $page -}}{{- $link = ref . $page -}}{{- end -}} -{{ .Inner | replaceRE "(.*)\n" "$1" }} +{{ $text }} From 2fba3f8c052dd1ffed05a5e28f5e3f4777f92acf Mon Sep 17 00:00:00 2001 From: Aaron Crawfis Date: Mon, 5 Apr 2021 13:47:35 -0700 Subject: [PATCH 100/100] Add docs --- .../en/contributing/contributing-docs.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/daprdocs/content/en/contributing/contributing-docs.md b/daprdocs/content/en/contributing/contributing-docs.md index 3fa66cbe5..c782e6300 100644 --- a/daprdocs/content/en/contributing/contributing-docs.md +++ b/daprdocs/content/en/contributing/contributing-docs.md @@ -127,6 +127,10 @@ As an example, for this specific section the complete reference to the page and {{}} ``` +## Shortcodes + +The following are useful shortcodes for writing Dapr documentation + ### Images The markdown spec used by Docsy and Hugo does not give an option to resize images using markdown notation. Instead, raw HTML is used. @@ -230,6 +234,46 @@ The shortcode would be: {{}} ``` +### Buttons + +To create a button in a webpage, use the `button` shortcode. + +#### Link to an external page + +``` +{{}} +``` + +{{< button text="My Button" link="https://example.com" >}} + +#### Link to another docs page + +You can also reference pages in your button as well: +``` +{{}} +``` + +{{< button text="My Button" page="contributing" >}} + +#### Button colors + +You can customize the colors using the Bootstrap colors: +``` +{{}} +{{}} +{{}} +{{}} +{{}} +{{}} +``` + +{{< button text="My Button" link="https://example.com" color="primary" >}} +{{< button text="My Button" link="https://example.com" color="secondary" >}} +{{< button text="My Button" link="https://example.com" color="success" >}} +{{< button text="My Button" link="https://example.com" color="danger" >}} +{{< button text="My Button" link="https://example.com" color="warning" >}} +{{< button text="My Button" link="https://example.com" color="info" >}} + ### References - [Docsy authoring guide](https://www.docsy.dev/docs/adding-content/)