diff --git a/.github/workflows/azure-static-web-apps-wonderful-island-07c05fd1e.yml b/.github/workflows/azure-static-web-apps-wonderful-island-07c05fd1e.yml new file mode 100644 index 000000000..f8a4c9949 --- /dev/null +++ b/.github/workflows/azure-static-web-apps-wonderful-island-07c05fd1e.yml @@ -0,0 +1,51 @@ +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - v1.2 + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - v1.2 + +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: 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_WONDERFUL_ISLAND_07C05FD1E }} + 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 + app_build_command: "hugo" + ###### 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_WONDERFUL_ISLAND_07C05FD1E }} + action: "close" 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 diff --git a/daprdocs/config.toml b/daprdocs/config.toml index 9b4b6c6b1..dc53e29f6 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -1,5 +1,5 @@ # Site Configuration -baseURL = "https://v1-1.docs.dapr.io/" +baseURL = "https://v1-2.docs.dapr.io/" title = "Dapr Docs" theme = "docsy" disableFastRender = true @@ -133,19 +133,23 @@ offlineSearch = false github_repo = "https://github.com/dapr/docs" github_project_repo = "https://github.com/dapr/dapr" github_subdir = "daprdocs" -github_branch = "v1.1" +github_branch = "v1.2" # Versioning -version_menu = "v1.1 (edge)" -version = "v1.1" +version_menu = "v1.2 (preview)" +version = "v1.2" archived_version = false +url_latest_version = "https://docs.dapr.io" [[params.versions]] - version = "v1.1 (edge)" + version = "v1.2 (preview)" url = "#" [[params.versions]] - version = "v1.0 (latest)" + version = "v1.1 (latest)" url = "https://docs.dapr.io" +[[params.versions]] + version = "v1.0" + url = "https://v1-0.docs.dapr.io" [[params.versions]] version = "v0.11" url = "https://v0-11.docs.dapr.io" 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. 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/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 diff --git a/daprdocs/content/en/concepts/service-mesh.md b/daprdocs/content/en/concepts/service-mesh.md new file mode 100644 index 000000000..342aa1049 --- /dev/null +++ b/daprdocs/content/en/concepts/service-mesh.md @@ -0,0 +1,45 @@ +--- +type: docs +title: "Dapr and service meshes" +linkTitle: "Service meshes" +weight: 700 +description: > + How Dapr compares to, and works with service meshes +--- + +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** 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 intended to be used by developers explicitly in their code. + +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 + + 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. + +The illustration below captures the overlapping features and unique capabilities that Dapr and service meshes offer: + + + +## 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 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. + +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 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. 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 %}} 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..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,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.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 | 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 >}}) 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 >}}) 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 >}}) 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 >}}) 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..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 @@ -16,7 +16,7 @@ metadata: name: namespace: spec: - type: state.dynamodb + type: state.aws.dynamodb version: v1 metadata: - name: table 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/cluster/setup-gke.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md new file mode 100644 index 000000000..5a7b7607c --- /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: 3000 +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 +``` 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. --- diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-annotations.md index 12d501411..47e0c3a88 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 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 --- diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md index 87febadc4..781050e26 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 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: 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 >}}) 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. 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: 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 >}}) 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" >}}). 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` | 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 }} 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": { diff --git a/daprdocs/static/images/service-mesh.png b/daprdocs/static/images/service-mesh.png new file mode 100644 index 000000000..f9dd4eb41 Binary files /dev/null and b/daprdocs/static/images/service-mesh.png differ diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 5f5326b83..fadb6c265 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 5f5326b83fa52fe1965f60f2161eb18b2940cc10 +Subproject commit fadb6c2654255864438c387a1a2b862eaf3af240 diff --git a/translations/docs-zh b/translations/docs-zh index e26148b86..036fc63bf 160000 --- a/translations/docs-zh +++ b/translations/docs-zh @@ -1 +1 @@ -Subproject commit e26148b866552f94a148c5ad6fe81e066775b804 +Subproject commit 036fc63bf0a919843827e263ec287d55e3188b7b