From eaba73f625b37634b0afe419a8c00f21bf4c2705 Mon Sep 17 00:00:00 2001 From: Marc Duiker Date: Wed, 2 Jul 2025 09:10:53 +0000 Subject: [PATCH 01/20] Update to latest Hugo version, move Hugo config to yaml, update folder structure, update partials. Signed-off-by: Marc Duiker --- .devcontainer/devcontainer.json | 2 +- .github/pull_request_template.md | 4 +- .gitmodules | 3 - .vscode/settings.json | 8 + daprdocs/{config.toml => config.toml.temp} | 0 daprdocs/content/en/_index.md | 36 +- daprdocs/content/en/concepts/_index.md | 4 +- .../en/concepts/building-blocks-concept.md | 26 +- .../content/en/concepts/components-concept.md | 52 +- .../en/concepts/configuration-concept.md | 6 +- .../en/concepts/dapr-services/operator.md | 6 +- .../en/concepts/dapr-services/placement.md | 14 +- .../en/concepts/dapr-services/scheduler.md | 16 +- .../en/concepts/dapr-services/sentry.md | 14 +- .../dapr-services/sidecar-injector.md | 4 +- .../en/concepts/dapr-services/sidecar.md | 20 +- daprdocs/content/en/concepts/faq/faq.md | 8 +- .../content/en/concepts/isolation-concept.md | 22 +- .../en/concepts/observability-concept.md | 22 +- daprdocs/content/en/concepts/overview.md | 60 +- .../content/en/concepts/resiliency-concept.md | 14 +- .../content/en/concepts/security-concept.md | 34 +- daprdocs/content/en/concepts/terminology.md | 16 +- .../en/contributing/contributing-overview.md | 10 +- .../docs-contrib/contributing-docs.md | 104 +- .../docs-templates/concept-template.md | 2 +- .../docs-templates/howto-template.md | 2 +- .../docs-templates/quickstart-template.md | 2 +- .../docs-contrib/maintainer-guide.md | 8 +- .../content/en/contributing/presentations.md | 2 +- .../building-blocks/_index.md | 2 +- .../building-blocks/actors/_index.md | 6 +- .../actors/actor-reentrancy.md | 30 +- .../actors/actors-features-concepts.md | 16 +- .../building-blocks/actors/actors-overview.md | 30 +- .../actors/actors-runtime-config.md | 38 +- .../actors/actors-timers-reminders.md | 14 +- .../actors/howto-actors-partitioning.md | 42 +- .../building-blocks/actors/howto-actors.md | 12 +- .../actors/namespaced-actors.md | 22 +- .../building-blocks/bindings/_index.md | 8 +- .../bindings/bindings-overview.md | 20 +- .../bindings/howto-bindings.md | 52 +- .../bindings/howto-triggers.md | 54 +- .../building-blocks/configuration/_index.md | 8 +- .../configuration-api-overview.md | 8 +- .../howto-manage-configuration.md | 98 +- .../conversation/conversation-overview.md | 14 +- .../conversation/howto-conversation-layer.md | 64 +- .../building-blocks/cryptography/_index.md | 6 +- .../cryptography/cryptography-overview.md | 10 +- .../cryptography/howto-cryptography.md | 44 +- .../distributed-lock/_index.md | 6 +- .../distributed-lock-api-overview.md | 4 +- .../howto-use-distributed-lock.md | 36 +- ...owto-schedule-and-handle-triggered-jobs.md | 28 +- .../jobs/jobs-features-concepts.md | 2 +- .../building-blocks/jobs/jobs-overview.md | 18 +- .../building-blocks/pubsub/_index.md | 8 +- .../building-blocks/pubsub/howto-namespace.md | 4 +- .../pubsub/howto-publish-subscribe.md | 118 +- .../pubsub/howto-route-messages.md | 38 +- .../pubsub/howto-subscribe-statefulset.md | 6 +- .../building-blocks/pubsub/pubsub-bulk.md | 64 +- .../pubsub/pubsub-cloudevents.md | 44 +- .../pubsub/pubsub-deadletter.md | 8 +- .../pubsub/pubsub-message-ttl.md | 28 +- .../building-blocks/pubsub/pubsub-overview.md | 50 +- .../building-blocks/pubsub/pubsub-raw.md | 44 +- .../building-blocks/pubsub/pubsub-scopes.md | 10 +- .../pubsub/subscription-methods.md | 120 +- .../building-blocks/secrets/_index.md | 8 +- .../building-blocks/secrets/howto-secrets.md | 44 +- .../secrets/secrets-overview.md | 18 +- .../building-blocks/secrets/secrets-scopes.md | 20 +- .../service-invocation/_index.md | 6 +- .../howto-invoke-discover-services.md | 66 +- .../howto-invoke-non-dapr-endpoints.md | 14 +- .../howto-invoke-services-grpc.md | 76 +- .../service-invocation-overview.md | 40 +- .../state-management/_index.md | 8 +- .../state-management/howto-encrypt-state.md | 4 +- .../state-management/howto-get-save-state.md | 154 +- .../state-management/howto-outbox.md | 68 +- .../state-management/howto-share-state.md | 2 +- .../state-management/howto-state-query-api.md | 60 +- .../howto-stateful-service.md | 4 +- .../query-state-store/_index.md | 2 +- .../query-state-store/query-cosmosdb-store.md | 2 +- .../query-state-store/query-redis-store.md | 2 +- .../query-sqlserver-store.md | 2 +- .../state-management-overview.md | 44 +- .../state-management/state-store-ttl.md | 36 +- .../building-blocks/workflow/_index.md | 6 +- .../workflow/howto-author-workflow.md | 88 +- .../workflow/howto-manage-workflow.md | 44 +- .../workflow/workflow-architecture.md | 18 +- .../workflow/workflow-features-concepts.md | 160 +- .../workflow/workflow-overview.md | 16 +- .../workflow/workflow-patterns.md | 146 +- .../debug-k8s/debug-dapr-services.md | 6 +- .../debugging/debug-k8s/debug-daprd.md | 14 +- .../develop-components/develop-middleware.md | 6 +- .../pluggable-components/develop-pluggable.md | 32 +- .../pluggable-components-overview.md | 8 +- .../pluggable-components-sdks/_index.md | 4 +- .../error-codes/error-codes-reference.md | 6 +- .../error-codes/errors-overview.md | 6 +- .../error-codes/http-error-codes.md | 4 +- .../integrations/AWS/authenticating-aws.md | 26 +- .../authenticating-azure.md | 22 +- .../Azure/azure-authentication/howto-aad.md | 12 +- .../Azure/azure-authentication/howto-mi.md | 28 +- .../integrations/autoscale-keda.md | 10 +- .../integrations/github_actions.md | 6 +- .../local-development/gRPC-integration.md | 32 +- .../local-development/ides/intellij.md | 16 +- .../vscode-how-to-debug-multiple-dapr-apps.md | 10 +- .../multi-app-dapr-run/multi-app-overview.md | 20 +- .../multi-app-dapr-run/multi-app-template.md | 84 +- .../local-development/sdk-serialization.md | 77 +- .../en/developing-applications/sdks/_index.md | 18 +- daprdocs/content/en/getting-started/_index.md | 5 +- .../en/getting-started/get-started-api.md | 48 +- .../en/getting-started/install-dapr-cli.md | 24 +- .../getting-started/install-dapr-selfhost.md | 48 +- .../en/getting-started/quickstarts/_index.md | 28 +- .../quickstarts/actors-quickstart.md | 12 +- .../quickstarts/bindings-quickstart.md | 90 +- .../quickstarts/configuration-quickstart.md | 28 +- .../quickstarts/conversation-quickstart.md | 80 +- .../quickstarts/cryptography-quickstart.md | 18 +- .../quickstarts/jobs-quickstart.md | 32 +- .../quickstarts/pubsub-quickstart.md | 138 +- .../resiliency-serviceinvo-quickstart.md | 72 +- .../resiliency/resiliency-state-quickstart.md | 36 +- .../quickstarts/secrets-quickstart.md | 26 +- .../serviceinvocation-quickstart.md | 92 +- .../quickstarts/statemanagement-quickstart.md | 84 +- .../quickstarts/workflow-quickstart.md | 40 +- .../en/getting-started/tutorials/_index.md | 8 +- .../tutorials/configure-state-pubsub.md | 84 +- .../tutorials/get-started-component.md | 18 +- .../components/certification-lifecycle.md | 2 +- .../operations/components/component-scopes.md | 24 +- .../components/component-secrets.md | 10 +- .../components/component-updates.md | 24 +- .../en/operations/components/middleware.md | 14 +- .../pluggable-components-registration.md | 26 +- .../operations/components/setup-bindings.md | 20 +- .../components/setup-pubsub/_index.md | 26 +- .../setup-pubsub/pubsub-namespaces.md | 14 +- .../components/setup-secret-store.md | 20 +- .../components/setup-state-store.md | 14 +- .../operations/configuration/api-allowlist.md | 30 +- .../configuration/configuration-overview.md | 50 +- .../configuration/control-concurrency.md | 18 +- .../environment-variables-secrets.md | 2 +- .../en/operations/configuration/grpc.md | 16 +- .../increase-read-buffer-size.md | 16 +- .../configuration/increase-request-size.md | 16 +- .../configuration/install-certificates.md | 20 +- .../configuration/invoke-allowlist.md | 36 +- .../configuration/preview-features.md | 16 +- .../operations/configuration/secret-scope.md | 29 +- .../hosting/kubernetes/cluster/setup-aks.md | 2 +- .../hosting/kubernetes/cluster/setup-eks.md | 6 +- .../hosting/kubernetes/cluster/setup-gke.md | 8 +- .../hosting/kubernetes/cluster/setup-kind.md | 8 +- .../kubernetes/cluster/setup-minikube.md | 8 +- .../kubernetes/kubernetes-dapr-shared.md | 2 +- .../hosting/kubernetes/kubernetes-deploy.md | 64 +- .../kubernetes/kubernetes-hybrid-clusters.md | 4 +- .../hosting/kubernetes/kubernetes-job.md | 4 +- .../hosting/kubernetes/kubernetes-overview.md | 18 +- .../kubernetes-persisting-scheduler.md | 48 +- .../kubernetes/kubernetes-production.md | 44 +- .../hosting/kubernetes/kubernetes-upgrade.md | 30 +- .../kubernetes/kubernetes-volume-mounts.md | 2 +- .../self-hosted/self-hosted-no-docker.md | 28 +- .../self-hosted/self-hosted-overview.md | 12 +- .../self-hosted-persisting-scheduler.md | 4 +- .../self-hosted/self-hosted-upgrade.md | 2 +- .../self-hosted/self-hosted-with-docker.md | 8 +- .../self-hosted/self-hosted-with-podman.md | 4 +- .../en/operations/observability/_index.md | 6 +- .../observability/logging/fluentd.md | 2 +- .../operations/observability/logging/logs.md | 16 +- .../observability/metrics/grafana.md | 20 +- .../observability/metrics/metrics-overview.md | 10 +- .../observability/tracing/datadog.md | 2 +- .../open-telemetry-collector-appinsights.md | 4 +- .../open-telemetry-collector-jaeger.md | 14 +- .../open-telemetry-collector.md | 6 +- .../observability/tracing/setup-tracing.md | 10 +- .../observability/tracing/tracing-overview.md | 8 +- .../tracing/w3c-tracing-overview.md | 14 +- .../perf-actors-activation.md | 4 +- .../perf-service-invocation.md | 8 +- .../resiliency/health-checks/app-health.md | 24 +- .../health-checks/sidecar-health.md | 20 +- .../operations/resiliency/policies/_index.md | 2 +- .../resiliency/policies/circuit-breakers.md | 10 +- .../resiliency/policies/default-policies.md | 8 +- .../retries/override-default-retries.md | 6 +- .../policies/retries/retries-overview.md | 14 +- .../resiliency/policies/timeouts.md | 10 +- .../resiliency/resiliency-overview.md | 28 +- .../en/operations/resiliency/targets.md | 6 +- .../en/operations/security/api-token.md | 6 +- .../en/operations/security/app-api-token.md | 4 +- .../content/en/operations/security/mtls.md | 14 +- .../content/en/operations/security/oauth.md | 10 +- .../en/operations/support/alpha-beta-apis.md | 16 +- .../breaking-changes-and-deprecations.md | 10 +- .../support/support-preview-features.md | 16 +- .../support/support-release-policy.md | 12 +- .../support/support-security-issues.md | 2 +- .../operations/support/support-versioning.md | 28 +- .../api-logs-troubleshooting.md | 4 +- .../troubleshooting/common_issues.md | 24 +- .../troubleshooting/logs-troubleshooting.md | 4 +- .../content/en/reference/api/actors_api.md | 10 +- .../content/en/reference/api/bindings_api.md | 4 +- .../en/reference/api/configuration_api.md | 12 +- .../en/reference/api/conversation_api.md | 8 +- .../en/reference/api/cryptography_api.md | 2 +- .../en/reference/api/distributed_lock_api.md | 4 +- .../content/en/reference/api/health_api.md | 12 +- daprdocs/content/en/reference/api/jobs_api.md | 2 +- .../content/en/reference/api/metadata_api.md | 2 +- .../content/en/reference/api/placement_api.md | 4 +- .../content/en/reference/api/pubsub_api.md | 14 +- .../content/en/reference/api/secrets_api.md | 6 +- .../reference/api/service_invocation_api.md | 2 +- .../content/en/reference/api/state_api.md | 14 +- .../content/en/reference/api/workflow_api.md | 4 +- .../arguments-annotations-overview.md | 40 +- .../content/en/reference/cli/cli-overview.md | 38 +- .../content/en/reference/cli/dapr-annotate.md | 4 +- .../en/reference/cli/dapr-build-info.md | 2 +- .../en/reference/cli/dapr-components.md | 2 +- .../en/reference/cli/dapr-configurations.md | 2 +- .../en/reference/cli/dapr-dashboard.md | 4 +- .../content/en/reference/cli/dapr-init.md | 20 +- .../content/en/reference/cli/dapr-invoke.md | 2 +- .../content/en/reference/cli/dapr-list.md | 4 +- .../content/en/reference/cli/dapr-logs.md | 2 +- .../en/reference/cli/dapr-mtls/_index.md | 8 +- .../cli/dapr-mtls/dapr-mtls-expiry.md | 2 +- .../cli/dapr-mtls/dapr-mtls-export.md | 2 +- .../dapr-mtls/dapr-mtls-renew-certificate.md | 4 +- .../content/en/reference/cli/dapr-publish.md | 2 +- daprdocs/content/en/reference/cli/dapr-run.md | 10 +- .../content/en/reference/cli/dapr-status.md | 2 +- .../content/en/reference/cli/dapr-stop.md | 4 +- .../en/reference/cli/dapr-uninstall.md | 4 +- .../content/en/reference/cli/dapr-upgrade.md | 4 +- .../content/en/reference/cli/dapr-version.md | 2 +- .../supported-bindings/_index.md | 6 +- .../supported-bindings/alicloud-dingtalk.md | 14 +- .../supported-bindings/alicloudoss.md | 36 +- .../supported-bindings/alicloudsls.md | 22 +- .../supported-bindings/alicloudtablestore.md | 10 +- .../supported-bindings/apns.md | 12 +- .../supported-bindings/blobstorage.md | 102 +- .../supported-bindings/cloudflare-queues.md | 36 +- .../supported-bindings/commercetools.md | 14 +- .../supported-bindings/cosmosdb.md | 20 +- .../supported-bindings/cosmosdbgremlinapi.md | 14 +- .../supported-bindings/cron.md | 12 +- .../supported-bindings/dynamodb.md | 18 +- .../supported-bindings/eventgrid.md | 26 +- .../supported-bindings/eventhubs.md | 20 +- .../supported-bindings/gcpbucket.md | 74 +- .../supported-bindings/gcppubsub.md | 14 +- .../supported-bindings/graghql.md | 14 +- .../supported-bindings/http.md | 82 +- .../supported-bindings/huawei-obs.md | 86 +- .../supported-bindings/influxdb.md | 14 +- .../supported-bindings/kafka.md | 20 +- .../supported-bindings/kinesis.md | 18 +- .../supported-bindings/kitex.md | 12 +- .../supported-bindings/kubemq.md | 36 +- .../supported-bindings/kubernetes-binding.md | 12 +- .../supported-bindings/localstorage.md | 82 +- .../supported-bindings/mqtt3.md | 16 +- .../supported-bindings/mysql.md | 12 +- .../supported-bindings/openai.md | 40 +- .../supported-bindings/postgresql.md | 14 +- .../supported-bindings/postmark.md | 14 +- .../supported-bindings/rabbitmq.md | 38 +- .../supported-bindings/redis.md | 46 +- .../supported-bindings/rethinkdb.md | 14 +- .../supported-bindings/s3.md | 130 +- .../supported-bindings/sendgrid.md | 14 +- .../supported-bindings/servicebusqueues.md | 34 +- .../supported-bindings/ses.md | 16 +- .../supported-bindings/sftp.md | 58 +- .../supported-bindings/signalr.md | 16 +- .../supported-bindings/smtp.md | 14 +- .../supported-bindings/sns.md | 18 +- .../supported-bindings/sqs.md | 18 +- .../supported-bindings/storagequeues.md | 16 +- .../supported-bindings/twilio.md | 14 +- .../supported-bindings/wasm.md | 16 +- .../supported-bindings/zeebe-command.md | 40 +- .../supported-bindings/zeebe-jobworker.md | 12 +- .../supported-configuration-stores/_index.md | 4 +- .../azure-appconfig-configuration-store.md | 12 +- .../postgresql-configuration-store.md | 6 +- .../redis-configuration-store.md | 42 +- .../supported-conversation/_index.md | 4 +- .../supported-conversation/anthropic.md | 4 +- .../supported-conversation/aws-bedrock.md | 6 +- .../supported-conversation/deepseek.md | 4 +- .../supported-conversation/hugging-face.md | 4 +- .../supported-conversation/local-echo.md | 2 +- .../supported-conversation/mistral.md | 4 +- .../supported-conversation/openai.md | 4 +- .../supported-cryptography/_index.md | 4 +- .../supported-cryptography/azure-key-vault.md | 14 +- .../json-web-key-sets.md | 4 +- .../kubernetes-secrets.md | 4 +- .../supported-cryptography/local-storage.md | 4 +- .../supported-locks/_index.md | 4 +- .../supported-locks/redis-lock.md | 38 +- .../supported-middleware/_index.md | 6 +- .../supported-middleware/middleware-bearer.md | 10 +- .../supported-middleware/middleware-oauth2.md | 14 +- .../middleware-oauth2clientcredentials.md | 12 +- .../supported-middleware/middleware-opa.md | 10 +- .../middleware-rate-limit.md | 14 +- .../middleware-routeralias.md | 10 +- .../middleware-routerchecker.md | 10 +- .../middleware-sentinel.md | 12 +- .../middleware-uppercase.md | 10 +- .../supported-middleware/middleware-wasm.md | 18 +- .../supported-name-resolution/_index.md | 6 +- .../nr-kubernetes.md | 6 +- .../supported-name-resolution/nr-mdns.md | 6 +- .../supported-name-resolution/nr-sqlite.md | 4 +- .../setup-nr-consul.md | 16 +- .../supported-pubsub/_index.md | 8 +- .../supported-pubsub/setup-apache-kafka.md | 62 +- .../supported-pubsub/setup-aws-snssqs.md | 28 +- .../supported-pubsub/setup-azure-eventhubs.md | 42 +- .../setup-azure-servicebus-queues.md | 24 +- .../setup-azure-servicebus-topics.md | 16 +- .../supported-pubsub/setup-gcp-pubsub.md | 24 +- .../supported-pubsub/setup-inmemory.md | 6 +- .../supported-pubsub/setup-jetstream.md | 20 +- .../supported-pubsub/setup-kubemq.md | 34 +- .../supported-pubsub/setup-mqtt.md | 30 +- .../supported-pubsub/setup-mqtt3.md | 28 +- .../supported-pubsub/setup-pulsar.md | 30 +- .../supported-pubsub/setup-rabbitmq.md | 66 +- .../supported-pubsub/setup-redis-pubsub.md | 46 +- .../supported-pubsub/setup-rocketmq.md | 12 +- .../supported-pubsub/setup-solace-amqp.md | 24 +- .../supported-secret-stores/_index.md | 6 +- .../alicloud-oos-parameter-store.md | 14 +- .../aws-parameter-store.md | 16 +- .../aws-secret-manager.md | 18 +- .../supported-secret-stores/azure-keyvault.md | 46 +- .../envvar-secret-store.md | 8 +- .../file-secret-store.md | 16 +- .../gcp-secret-manager.md | 14 +- .../hashicorp-vault.md | 26 +- .../huaweicloud-csms.md | 14 +- .../kubernetes-secret-store.md | 16 +- .../supported-state-stores/_index.md | 6 +- .../supported-state-stores/setup-aerospike.md | 22 +- .../setup-azure-blobstorage.md | 18 +- .../setup-azure-cosmosdb.md | 18 +- .../setup-azure-tablestorage.md | 16 +- .../supported-state-stores/setup-cassandra.md | 22 +- .../setup-cloudflare-workerskv.md | 34 +- .../setup-cockroachdb.md | 22 +- .../supported-state-stores/setup-consul.md | 22 +- .../supported-state-stores/setup-couchbase.md | 22 +- .../supported-state-stores/setup-dynamodb.md | 18 +- .../supported-state-stores/setup-etcd.md | 30 +- .../supported-state-stores/setup-firestore.md | 22 +- .../supported-state-stores/setup-hazelcast.md | 22 +- .../supported-state-stores/setup-inmemory.md | 8 +- .../setup-jetstream-kv.md | 22 +- .../supported-state-stores/setup-memcached.md | 22 +- .../supported-state-stores/setup-mongodb.md | 24 +- .../supported-state-stores/setup-mysql.md | 36 +- .../setup-oci-objectstorage.md | 12 +- .../setup-oracledatabase.md | 22 +- .../setup-postgresql-v1.md | 22 +- .../setup-postgresql-v2.md | 26 +- .../supported-state-stores/setup-redis.md | 86 +- .../supported-state-stores/setup-rethinkdb.md | 18 +- .../supported-state-stores/setup-sqlite.md | 8 +- .../supported-state-stores/setup-sqlserver.md | 18 +- .../supported-state-stores/setup-zookeeper.md | 22 +- .../en/reference/environment/_index.md | 8 +- .../resource-specs/component-schema.md | 20 +- .../resource-specs/configuration-schema.md | 26 +- .../resource-specs/httpendpoints-schema.md | 4 +- .../resource-specs/resiliency-schema.md | 8 +- .../resource-specs/subscription-schema.md | 10 +- .../components/bindings.html | 0 .../components/componenttoc.html | 0 .../components/configuration-stores.html | 0 .../components/conversation.html | 0 .../components/cryptography.html | 0 .../components/description.html | 0 .../components/locks.html | 0 .../components/middleware.html | 0 .../components/name-resolution.html | 0 .../components/pubsub.html | 0 .../components/secret-stores.html | 0 .../components/state-stores.html | 0 .../{partials => _partials}/feedback.html | 4 +- .../{partials => _partials}/footer.html | 0 .../hooks/body-end.html | 0 .../hooks/head-end.html | 0 .../{partials => _partials}/navbar.html | 0 .../page-meta-links.html | 0 .../{partials => _partials}/search-input.html | 0 .../section-index.html | 0 .../{partials => _partials}/sidebar-tree.html | 0 .../toc.html => _partials/toc.html.temp} | 0 .../version-banner.html | 0 .../{shortcodes => _shortcodes}/button.html | 0 .../code-snippet.html | 0 .../{shortcodes => _shortcodes}/codetab.html | 10 +- .../dapr-latest-version.html | 0 .../{shortcodes => _shortcodes}/partial.html | 0 .../{shortcodes => _shortcodes}/table.html | 0 .../{shortcodes => _shortcodes}/tabs.html | 8 +- daprdocs/layouts/docs/list.html | 6 +- daprdocs/package-lock.json | 3063 +++++++++++++---- daprdocs/package.json | 23 - daprdocs/themes/docsy | 1 - go.mod | 5 + go.sum | 4 + hugo.yaml | 340 ++ package-lock.json | 2845 +++++++++++++++ package.json | 52 + 444 files changed, 10078 insertions(+), 5247 deletions(-) create mode 100644 .vscode/settings.json rename daprdocs/{config.toml => config.toml.temp} (100%) rename daprdocs/layouts/{partials => _partials}/components/bindings.html (100%) rename daprdocs/layouts/{partials => _partials}/components/componenttoc.html (100%) rename daprdocs/layouts/{partials => _partials}/components/configuration-stores.html (100%) rename daprdocs/layouts/{partials => _partials}/components/conversation.html (100%) rename daprdocs/layouts/{partials => _partials}/components/cryptography.html (100%) rename daprdocs/layouts/{partials => _partials}/components/description.html (100%) rename daprdocs/layouts/{partials => _partials}/components/locks.html (100%) rename daprdocs/layouts/{partials => _partials}/components/middleware.html (100%) rename daprdocs/layouts/{partials => _partials}/components/name-resolution.html (100%) rename daprdocs/layouts/{partials => _partials}/components/pubsub.html (100%) rename daprdocs/layouts/{partials => _partials}/components/secret-stores.html (100%) rename daprdocs/layouts/{partials => _partials}/components/state-stores.html (100%) rename daprdocs/layouts/{partials => _partials}/feedback.html (98%) rename daprdocs/layouts/{partials => _partials}/footer.html (100%) rename daprdocs/layouts/{partials => _partials}/hooks/body-end.html (100%) rename daprdocs/layouts/{partials => _partials}/hooks/head-end.html (100%) rename daprdocs/layouts/{partials => _partials}/navbar.html (100%) rename daprdocs/layouts/{partials => _partials}/page-meta-links.html (100%) rename daprdocs/layouts/{partials => _partials}/search-input.html (100%) rename daprdocs/layouts/{partials => _partials}/section-index.html (100%) rename daprdocs/layouts/{partials => _partials}/sidebar-tree.html (100%) rename daprdocs/layouts/{partials/toc.html => _partials/toc.html.temp} (100%) rename daprdocs/layouts/{partials => _partials}/version-banner.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/button.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/code-snippet.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/codetab.html (64%) rename daprdocs/layouts/{shortcodes => _shortcodes}/dapr-latest-version.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/partial.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/table.html (100%) rename daprdocs/layouts/{shortcodes => _shortcodes}/tabs.html (82%) delete mode 100644 daprdocs/package.json delete mode 160000 daprdocs/themes/docsy create mode 100644 go.mod create mode 100644 go.sum create mode 100644 hugo.yaml create mode 100644 package-lock.json create mode 100644 package.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0fbb6d2ecbe..074ca604953 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -10,7 +10,7 @@ }, "ghcr.io/devcontainers/features/hugo:1": { "extended": true, - "version": "0.100.2" + "version": "0.147.9" }, "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": true, diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0d18792cda4..6b4d0637a7d 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,11 +3,11 @@ Thank you for helping make the Dapr documentation better! **Please follow this checklist before submitting:** - [ ] Commits are signed with Developer Certificate of Origin (DCO - [learn more](https://docs.dapr.io/contributing/contributing-overview/#developer-certificate-of-origin-signing-your-work)) - [ ] [Read the contribution guide](https://docs.dapr.io/contributing/docs-contrib/contributing-docs/) -- [ ] Commands include options for Linux, MacOS, and Windows within codetabs +- [ ] Commands include options for Linux, MacOS, and Windows within tabpane - [ ] New file and folder names are globally unique - [ ] Page references use shortcodes instead of markdown or URL links - [ ] Images use HTML style and have alternative text -- [ ] Places where multiple code/command options are given have codetabs +- [ ] Places where multiple code/command options are given have tabpane In addition, please fill out the following to help reviewers understand this pull request: diff --git a/.gitmodules b/.gitmodules index 2daed9e14dd..30857f4ef22 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "daprdocs/themes/docsy"] - path = daprdocs/themes/docsy - url = https://github.com/google/docsy.git [submodule "sdkdocs/python"] path = sdkdocs/python url = https://github.com/dapr/python-sdk.git diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..fb5ea311a62 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "cSpell.ignoreWords": [ + "Dapr" + ], + "cSpell.words": [ + "Dapr" + ] +} \ No newline at end of file diff --git a/daprdocs/config.toml b/daprdocs/config.toml.temp similarity index 100% rename from daprdocs/config.toml rename to daprdocs/config.toml.temp diff --git a/daprdocs/content/en/_index.md b/daprdocs/content/en/_index.md index 0e125140352..f17e63ec71f 100644 --- a/daprdocs/content/en/_index.md +++ b/daprdocs/content/en/_index.md @@ -12,7 +12,7 @@ Dapr is a portable, event-driven runtime that makes it easy for any developer to stateless and stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks. Leveraging the benefits of a sidecar architecture, Dapr helps you tackle the challenges that come with building microservices and keeps your code platform agnostic. -{{< button text="Get started" page="getting-started" >}} +{{< button text="Get started" page="getting-started.md" >}} {{% /alert %}} @@ -23,21 +23,21 @@ you tackle the challenges that come with building microservices and keeps your c
Getting started

How to get up and running with Dapr in your environment in minutes.

- +
Quickstarts

A collection of tutorials with code samples to get you started quickly with Dapr.

- +
Concepts

Learn about Dapr, including its main features and capabilities.

- +
@@ -50,21 +50,21 @@ you tackle the challenges that come with building microservices and keeps your c
Developing applications

Tools, tips, and information on how to build your application with Dapr.

- +
Building blocks

Capabilities that solve common development challenges for distributed applications.

- +
Operations

Hosting options, best-practices, and other guides and running your application on Dapr.

- +
@@ -77,21 +77,21 @@ you tackle the challenges that come with building microservices and keeps your c
Reference

Detailed documentation on the Dapr API, CLI, bindings and more.

- +
Contributing

How to contribute to the Dapr project and the various repositories.

- +
Roadmap

Learn about Dapr's roadmap and change process.

- +
@@ -109,7 +109,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn how to get up and running with Dapr in your preferred integrated development environment.

- + @@ -124,7 +124,7 @@ you tackle the challenges that come with building microservices and keeps your c

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

- + @@ -139,7 +139,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the .NET SDK.

- +
@@ -151,7 +151,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the Python SDK.

- +
@@ -163,7 +163,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the JavaScript SDK.

- +
@@ -178,7 +178,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the Java SDK.

- +
@@ -190,7 +190,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the Go SDK.

- +
@@ -202,7 +202,7 @@ you tackle the challenges that come with building microservices and keeps your c

Learn more about the PHP SDK.

- +
\ No newline at end of file diff --git a/daprdocs/content/en/concepts/_index.md b/daprdocs/content/en/concepts/_index.md index 739c90be095..84d0a8aea5b 100644 --- a/daprdocs/content/en/concepts/_index.md +++ b/daprdocs/content/en/concepts/_index.md @@ -11,6 +11,6 @@ Welcome to the Dapr concepts guide! {{% alert title="Getting started with Dapr" color="primary" %}} If you are ready to jump in and start developing with Dapr, please -visit the [getting started section]({{}}). -{{< button text="Install Dapr" page="getting-started" >}} +visit the [getting started section]({{%ref getting-started%}}). +{{< button text="Install Dapr" page="getting-started.md" >}} {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/concepts/building-blocks-concept.md b/daprdocs/content/en/concepts/building-blocks-concept.md index f1b0b0c5930..23c444f0c93 100644 --- a/daprdocs/content/en/concepts/building-blocks-concept.md +++ b/daprdocs/content/en/concepts/building-blocks-concept.md @@ -6,7 +6,7 @@ weight: 200 description: "Modular best practices accessible over standard HTTP or gRPC APIs" --- -A [building block]({{< ref building-blocks >}}) is an HTTP or gRPC API that can be called from your code and uses one or more Dapr components. Dapr consists of a set of API building blocks, with extensibility to add new building blocks. Dapr's building blocks: +A [building block]({{% ref building-blocks %}}) is an HTTP or gRPC API that can be called from your code and uses one or more Dapr components. Dapr consists of a set of API building blocks, with extensibility to add new building blocks. Dapr's building blocks: - Address common challenges in building resilient, microservices applications - Codify best practices and patterns @@ -20,15 +20,15 @@ Dapr provides the following building blocks: | Building Block | Endpoint | Description | |----------------|----------|-------------| -| [**Service-to-service invocation**]({{< ref "service-invocation-overview.md" >}}) | `/v1.0/invoke` | Service invocation enables applications to communicate with each other through well-known endpoints in the form of http or gRPC messages. Dapr provides an endpoint that acts as a combination of a reverse proxy with built-in service discovery, while leveraging built-in distributed tracing and error handling. -| [**Publish and subscribe**]({{< ref "pubsub-overview.md" >}}) | `/v1.0/publish` `/v1.0/subscribe`| Pub/Sub is a loosely coupled messaging pattern where senders (or publishers) publish messages to a topic, to which subscribers subscribe. Dapr supports the pub/sub pattern between applications. -| [**Workflows**]({{< ref "workflow-overview.md" >}}) | `/v1.0/workflow` | The Workflow API enables you to define long running, persistent processes or data flows that span multiple microservices using Dapr workflows. The Workflow API can be combined with other Dapr API building blocks. For example, a workflow can call another service with service invocation or retrieve secrets, providing flexibility and portability. -| [**State management**]({{< ref "state-management-overview.md" >}}) | `/v1.0/state` | Application state is anything an application wants to preserve beyond a single session. Dapr provides a key/value-based state and query APIs with pluggable state stores for persistence. -| [**Bindings**]({{< ref "bindings-overview.md" >}}) | `/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**]({{< ref "actors-overview.md" >}}) | `/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. -| [**Secrets**]({{< ref "secrets-overview.md" >}}) | `/v1.0/secrets` | Dapr provides a secrets building block API and integrates with secret stores such as public cloud stores, local stores and Kubernetes to store the secrets. Services can call the secrets API to retrieve secrets, for example to get a connection string to a database. -| [**Configuration**]({{< ref "configuration-api-overview.md" >}}) | `/v1.0/configuration` | The Configuration API enables you to retrieve and subscribe to application configuration items for supported configuration stores. This enables an application to retrieve specific configuration information, for example, at start up or when configuration changes are made in the store. -| [**Distributed lock**]({{< ref "distributed-lock-api-overview.md" >}}) | `/v1.0-alpha1/lock` | The distributed lock API enables you to take a lock on a resource so that multiple instances of an application can access the resource without conflicts and provide consistency guarantees. -| [**Cryptography**]({{< ref "cryptography-overview.md" >}}) | `/v1.0-alpha1/crypto` | The Cryptography API enables you to perform cryptographic operations, such as encrypting and decrypting messages, without exposing keys to your application. -| [**Jobs**]({{< ref "jobs-overview.md" >}}) | `/v1.0-alpha1/jobs` | The Jobs API enables you to schedule and orchestrate jobs. Example scenarios include:
  • Schedule batch processing jobs to run every business day
  • Schedule various maintenance scripts to perform clean-ups
  • Schedule ETL jobs to run at specific times (hourly, daily) to fetch new data, process it, and update the data warehouse with the latest information.
-| [**Conversation**]({{< ref "conversation-overview.md" >}}) | `/v1.0-alpha1/conversation` | The Conversation API enables you to supply prompts to converse with different large language models (LLMs) and includes features such as prompt caching and personally identifiable information (PII) obfuscation. \ No newline at end of file +| [**Service-to-service invocation**]({{% ref "service-invocation-overview" %}}) | `/v1.0/invoke` | Service invocation enables applications to communicate with each other through well-known endpoints in the form of http or gRPC messages. Dapr provides an endpoint that acts as a combination of a reverse proxy with built-in service discovery, while leveraging built-in distributed tracing and error handling. +| [**Publish and subscribe**]({{% ref "pubsub-overview" %}}) | `/v1.0/publish` `/v1.0/subscribe`| Pub/Sub is a loosely coupled messaging pattern where senders (or publishers) publish messages to a topic, to which subscribers subscribe. Dapr supports the pub/sub pattern between applications. +| [**Workflows**]({{% ref "workflow-overview" %}}) | `/v1.0/workflow` | The Workflow API enables you to define long running, persistent processes or data flows that span multiple microservices using Dapr workflows. The Workflow API can be combined with other Dapr API building blocks. For example, a workflow can call another service with service invocation or retrieve secrets, providing flexibility and portability. +| [**State management**]({{% ref "state-management-overview" %}}) | `/v1.0/state` | Application state is anything an application wants to preserve beyond a single session. Dapr provides a key/value-based state and query APIs with pluggable state stores for persistence. +| [**Bindings**]({{% ref "bindings-overview" %}}) | `/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**]({{% ref "actors-overview" %}}) | `/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. +| [**Secrets**]({{% ref "secrets-overview" %}}) | `/v1.0/secrets` | Dapr provides a secrets building block API and integrates with secret stores such as public cloud stores, local stores and Kubernetes to store the secrets. Services can call the secrets API to retrieve secrets, for example to get a connection string to a database. +| [**Configuration**]({{% ref "configuration-api-overview" %}}) | `/v1.0/configuration` | The Configuration API enables you to retrieve and subscribe to application configuration items for supported configuration stores. This enables an application to retrieve specific configuration information, for example, at start up or when configuration changes are made in the store. +| [**Distributed lock**]({{% ref "distributed-lock-api-overview" %}}) | `/v1.0-alpha1/lock` | The distributed lock API enables you to take a lock on a resource so that multiple instances of an application can access the resource without conflicts and provide consistency guarantees. +| [**Cryptography**]({{% ref "cryptography-overview" %}}) | `/v1.0-alpha1/crypto` | The Cryptography API enables you to perform cryptographic operations, such as encrypting and decrypting messages, without exposing keys to your application. +| [**Jobs**]({{% ref "jobs-overview" %}}) | `/v1.0-alpha1/jobs` | The Jobs API enables you to schedule and orchestrate jobs. Example scenarios include:
  • Schedule batch processing jobs to run every business day
  • Schedule various maintenance scripts to perform clean-ups
  • Schedule ETL jobs to run at specific times (hourly, daily) to fetch new data, process it, and update the data warehouse with the latest information.
+| [**Conversation**]({{% ref "conversation-overview" %}}) | `/v1.0-alpha1/conversation` | The Conversation API enables you to supply prompts to converse with different large language models (LLMs) and includes features such as prompt caching and personally identifiable information (PII) obfuscation. \ No newline at end of file diff --git a/daprdocs/content/en/concepts/components-concept.md b/daprdocs/content/en/concepts/components-concept.md index 77b7e7f3abd..919bf0c373a 100644 --- a/daprdocs/content/en/concepts/components-concept.md +++ b/daprdocs/content/en/concepts/components-concept.md @@ -11,11 +11,11 @@ Dapr uses a modular design where functionality is delivered as a component. Each You can contribute implementations and extend Dapr's component interfaces capabilities via: - The [components-contrib repository](https://github.com/dapr/components-contrib) -- [Pluggable components]({{< ref "components-concept.md#built-in-and-pluggable-components" >}}). +- [Pluggable components]({{% ref "components-concept#built-in-and-pluggable-components" %}}). -A building block can use any combination of components. For example, the [actors]({{< ref "actors-overview.md" >}}) and the [state management]({{< ref "state-management-overview.md" >}}) building blocks both use [state components](https://github.com/dapr/components-contrib/tree/master/state). +A building block can use any combination of components. For example, the [actors]({{% ref "actors-overview" %}}) and the [state management]({{% ref "state-management-overview" %}}) building blocks both use [state components](https://github.com/dapr/components-contrib/tree/master/state). -As another example, the [pub/sub]({{< ref "pubsub-overview.md" >}}) building block uses [pub/sub components](https://github.com/dapr/components-contrib/tree/master/pubsub). +As another example, the [pub/sub]({{% ref "pubsub-overview" %}}) building block uses [pub/sub components](https://github.com/dapr/components-contrib/tree/master/pubsub). You can get a list of current components available in the hosting environment using the `dapr components` CLI command. @@ -30,9 +30,9 @@ Each component has a specification (or spec) that it conforms to. Components are - A `components/local` folder within your solution, or - Globally in the `.dapr` folder created when invoking `dapr init`. -These YAML files adhere to the generic [Dapr component schema]({{< ref "component-schema.md" >}}), but each is specific to the component specification. +These YAML files adhere to the generic [Dapr component schema]({{% ref "component-schema" %}}), but each is specific to the component specification. -It is important to understand that the component spec values, particularly the spec `metadata`, can change between components of the same component type, for example between different state stores, and that some design-time spec values can be overridden at runtime when making requests to a component's API. As a result, it is strongly recommended to review a [component's specs]({{< ref "components-reference" >}}), paying particular attention to the sample payloads for requests to set the metadata used to interact with the component. +It is important to understand that the component spec values, particularly the spec `metadata`, can change between components of the same component type, for example between different state stores, and that some design-time spec values can be overridden at runtime when making requests to a component's API. As a result, it is strongly recommended to review a [component's specs]({{% ref "components-reference" %}}), paying particular attention to the sample payloads for requests to set the metadata used to interact with the component. The diagram below shows some examples of the components for each component type @@ -50,11 +50,11 @@ For example: - Your component may be specific to your company or pose IP concerns, so it cannot be included in the Dapr component repo. - You want decouple your component updates from the Dapr release cycle. -For more information read [Pluggable components overview]({{< ref "pluggable-components-overview" >}}) +For more information read [Pluggable components overview]({{% ref "pluggable-components-overview" %}}) ## Hot Reloading -With the [`HotReload` feature enabled]({{< ref "support-preview-features.md" >}}), components are able to be "hot reloaded" at runtime. +With the [`HotReload` feature enabled]({{% ref "support-preview-features" %}}), components are able to be "hot reloaded" at runtime. This means that you can update component configuration without restarting the Dapr runtime. Component reloading occurs when a component resource is created, updated, or deleted, either in the Kubernetes API or in self-hosted mode when a file is changed in the `resources` directory. When a component is updated, the component is first closed, and then reinitialized using the new configuration. @@ -66,74 +66,74 @@ The following are the component types provided by Dapr: ### Name resolution -Name resolution components are used with the [service invocation]({{< ref "service-invocation-overview.md" >}}) building block to integrate with the hosting environment and provide service-to-service discovery. For example, the Kubernetes name resolution component integrates with the Kubernetes DNS service, self-hosted uses mDNS and clusters of VMs can use the Consul name resolution component. +Name resolution components are used with the [service invocation]({{% ref "service-invocation-overview" %}}) building block to integrate with the hosting environment and provide service-to-service discovery. For example, the Kubernetes name resolution component integrates with the Kubernetes DNS service, self-hosted uses mDNS and clusters of VMs can use the Consul name resolution component. -- [List of name resolution components]({{< ref supported-name-resolution >}}) +- [List of name resolution components]({{% ref supported-name-resolution %}}) - [Name resolution implementations](https://github.com/dapr/components-contrib/tree/master/nameresolution) ### Pub/sub brokers -Pub/sub broker components are message brokers that can pass messages to/from services as part of the [publish & subscribe]({{< ref pubsub-overview.md >}}) building block. +Pub/sub broker components are message brokers that can pass messages to/from services as part of the [publish & subscribe]({{% ref pubsub-overview %}}) building block. -- [List of pub/sub brokers]({{< ref supported-pubsub >}}) +- [List of pub/sub brokers]({{% ref supported-pubsub %}}) - [Pub/sub broker implementations](https://github.com/dapr/components-contrib/tree/master/pubsub) ### State stores -State store components are data stores (databases, files, memory) that store key-value pairs as part of the [state management]({{< ref "state-management-overview.md" >}}) building block. +State store components are data stores (databases, files, memory) that store key-value pairs as part of the [state management]({{% ref "state-management-overview" %}}) building block. -- [List of state stores]({{< ref supported-state-stores >}}) +- [List of state stores]({{% ref supported-state-stores %}}) - [State store implementations](https://github.com/dapr/components-contrib/tree/master/state) ### Bindings -External resources can connect to Dapr in order to trigger a method on an application or be called from an application as part of the [bindings]({{< ref bindings-overview.md >}}) building block. +External resources can connect to Dapr in order to trigger a method on an application or be called from an application as part of the [bindings]({{% ref bindings-overview %}}) building block. -- [List of supported bindings]({{< ref supported-bindings >}}) +- [List of supported bindings]({{% ref supported-bindings %}}) - [Binding implementations](https://github.com/dapr/components-contrib/tree/master/bindings) ### Secret stores -A [secret]({{< ref "secrets-overview.md" >}}) is any piece of private information that you want to guard against unwanted access. Secrets stores are used to store secrets that can be retrieved and used in applications. +A [secret]({{% ref "secrets-overview" %}}) is any piece of private information that you want to guard against unwanted access. Secrets stores are used to store secrets that can be retrieved and used in applications. -- [List of supported secret stores]({{< ref supported-secret-stores >}}) +- [List of supported secret stores]({{% ref supported-secret-stores %}}) - [Secret store implementations](https://github.com/dapr/components-contrib/tree/master/secretstores) ### Configuration stores Configuration stores are used to save application data, which can then be read by application instances on startup or notified of when changes occur. This allows for dynamic configuration. -- [List of supported configuration stores]({{< ref supported-configuration-stores >}}) +- [List of supported configuration stores]({{% ref supported-configuration-stores %}}) - [Configuration store implementations](https://github.com/dapr/components-contrib/tree/master/configuration) ### Locks Lock components are used as a distributed lock to provide mutually exclusive access to a resource such as a queue or database. -- [List of supported locks]({{< ref supported-locks >}}) +- [List of supported locks]({{% ref supported-locks %}}) - [Lock implementations](https://github.com/dapr/components-contrib/tree/master/lock) ### Cryptography -[Cryptography]({{< ref cryptography-overview.md >}}) components are used to perform cryptographic operations, including encrypting and decrypting messages, without exposing keys to your application. +[Cryptography]({{% ref cryptography-overview %}}) components are used to perform cryptographic operations, including encrypting and decrypting messages, without exposing keys to your application. -- [List of supported cryptography components]({{< ref supported-cryptography >}}) +- [List of supported cryptography components]({{% ref supported-cryptography %}}) - [Cryptography implementations](https://github.com/dapr/components-contrib/tree/master/crypto) ### Conversation -Dapr provides developers a way to abstract interactions with large language models (LLMs) with built-in security and reliability features. Use [conversation]({{< ref conversation-overview.md >}}) components to send prompts to different LLMs, along with the conversation context. +Dapr provides developers a way to abstract interactions with large language models (LLMs) with built-in security and reliability features. Use [conversation]({{% ref conversation-overview %}}) components to send prompts to different LLMs, along with the conversation context. -- [List of supported conversation components]({{< ref supported-conversation >}}) +- [List of supported conversation components]({{% ref supported-conversation %}}) - [Conversation implementations](https://github.com/dapr/components-contrib/tree/main/conversation) ### Middleware -Dapr allows custom [middleware]({{< ref "middleware.md" >}}) to be plugged into the HTTP request processing pipeline. Middleware can perform additional actions on an HTTP request (such as authentication, encryption, and message transformation) before the request is routed to the user code, or the response is returned to the client. The middleware components are used with the [service invocation]({{< ref "service-invocation-overview.md" >}}) building block. +Dapr allows custom [middleware]({{% ref "middleware" %}}) to be plugged into the HTTP request processing pipeline. Middleware can perform additional actions on an HTTP request (such as authentication, encryption, and message transformation) before the request is routed to the user code, or the response is returned to the client. The middleware components are used with the [service invocation]({{% ref "service-invocation-overview" %}}) building block. -- [List of supported middleware components]({{< ref supported-middleware >}}) +- [List of supported middleware components]({{% ref supported-middleware %}}) - [Middleware implementations](https://github.com/dapr/components-contrib/tree/master/middleware) {{% alert title="Note" color="primary" %}} -Since pluggable components are not required to be written in Go, they follow a different implementation process than built-in Dapr components. For more information on developing built-in components, read [developing new components](https://github.com/dapr/components-contrib/blob/master/docs/developing-component.md). +Since pluggable components are not required to be written in Go, they follow a different implementation process than built-in Dapr components. For more information on developing built-in components, read [developing new components](https://github.com/dapr/components-contrib/blob/master/docs/developing-component). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/concepts/configuration-concept.md b/daprdocs/content/en/concepts/configuration-concept.md index a4a85939592..620ea973e65 100644 --- a/daprdocs/content/en/concepts/configuration-concept.md +++ b/daprdocs/content/en/concepts/configuration-concept.md @@ -48,12 +48,12 @@ spec: By default, there is a single configuration file called `daprsystem` installed with the Dapr control plane system services. This configuration file applies global control plane settings and is set up when Dapr is deployed to Kubernetes. -[Learn more about configuration options.]({{< ref "configuration-overview.md" >}}) +[Learn more about configuration options.]({{% ref "configuration-overview" %}}) {{% alert title="Important" color="warning" %}} -Dapr application and control plane configurations should not be confused with the [configuration building block API]({{< ref configuration-api-overview >}}), which enables applications to retrieve key/value data from configuration store components. +Dapr application and control plane configurations should not be confused with the [configuration building block API]({{% ref configuration-api-overview %}}), which enables applications to retrieve key/value data from configuration store components. {{% /alert %}} ## Next steps -{{< button text="Learn more about configuration" page="configuration-overview" >}} \ No newline at end of file +{{< button text="Learn more about configuration" page="configuration-overview.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/concepts/dapr-services/operator.md b/daprdocs/content/en/concepts/dapr-services/operator.md index a1f94f8d737..60462950507 100644 --- a/daprdocs/content/en/concepts/dapr-services/operator.md +++ b/daprdocs/content/en/concepts/dapr-services/operator.md @@ -5,11 +5,11 @@ linkTitle: "Operator" description: "Overview of the Dapr operator service" --- -When running Dapr in [Kubernetes mode]({{< ref kubernetes >}}), a pod running the Dapr Operator service manages [Dapr component]({{< ref components >}}) updates and provides Kubernetes services endpoints for Dapr. +When running Dapr in [Kubernetes mode]({{% ref kubernetes %}}), a pod running the Dapr Operator service manages [Dapr component]({{% ref components %}}) updates and provides Kubernetes services endpoints for Dapr. ## Running the operator service -The operator service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{< ref kubernetes >}}). +The operator service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{% ref kubernetes %}}). ## Additional configuration options @@ -17,7 +17,7 @@ The operator service includes additional configuration options. ### Injector watchdog -The operator service includes an _injector watchdog_ feature which periodically polls all pods running in your Kubernetes cluster and confirms that the Dapr sidecar is injected in those which have the `dapr.io/enabled=true` annotation. It is primarily meant to address situations where the [Injector service]({{< ref sidecar-injector >}}) did not successfully inject the sidecar (the `daprd` container) into pods. +The operator service includes an _injector watchdog_ feature which periodically polls all pods running in your Kubernetes cluster and confirms that the Dapr sidecar is injected in those which have the `dapr.io/enabled=true` annotation. It is primarily meant to address situations where the [Injector service]({{% ref sidecar-injector %}}) did not successfully inject the sidecar (the `daprd` container) into pods. The injector watchdog can be useful in a few situations, including: diff --git a/daprdocs/content/en/concepts/dapr-services/placement.md b/daprdocs/content/en/concepts/dapr-services/placement.md index c6d739957f5..2d737329fb3 100644 --- a/daprdocs/content/en/concepts/dapr-services/placement.md +++ b/daprdocs/content/en/concepts/dapr-services/placement.md @@ -5,24 +5,24 @@ linkTitle: "Placement" description: "Overview of the Dapr Placement service" --- -The Dapr Placement service is used to calculate and distribute distributed hash tables for the location of [Dapr actors]({{< ref actors >}}) running in [self-hosted mode]({{< ref self-hosted >}}) or on [Kubernetes]({{< ref kubernetes >}}). Grouped by namespace, the hash tables map actor types to pods or processes so a Dapr application can communicate with the actor. Anytime a Dapr application activates a Dapr actor, the Placement service updates the hash tables with the latest actor location. +The Dapr Placement service is used to calculate and distribute distributed hash tables for the location of [Dapr actors]({{% ref actors %}}) running in [self-hosted mode]({{% ref self-hosted %}}) or on [Kubernetes]({{% ref kubernetes %}}). Grouped by namespace, the hash tables map actor types to pods or processes so a Dapr application can communicate with the actor. Anytime a Dapr application activates a Dapr actor, the Placement service updates the hash tables with the latest actor location. ## Self-hosted mode -The Placement service Docker container is started automatically as part of [`dapr init`]({{< ref self-hosted-with-docker.md >}}). It can also be run manually as a process if you are running in [slim-init mode]({{< ref self-hosted-no-docker.md >}}). +The Placement service Docker container is started automatically as part of [`dapr init`]({{% ref self-hosted-with-docker %}}). It can also be run manually as a process if you are running in [slim-init mode]({{% ref self-hosted-no-docker %}}). ## Kubernetes mode -The Placement service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. You can run Placement in high availability (HA) mode. [Learn more about setting HA mode in your Kubernetes service.]({{< ref "kubernetes-production.md#individual-service-ha-helm-configuration" >}}) +The Placement service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. You can run Placement in high availability (HA) mode. [Learn more about setting HA mode in your Kubernetes service.]({{% ref "kubernetes-production#individual-service-ha-helm-configuration" %}}) -For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{< ref kubernetes >}}). +For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{% ref kubernetes %}}). ## Placement tables -There is an [HTTP API `/placement/state` for Placement service]({{< ref placement_api.md >}}) that exposes placement table information. The API is exposed on the sidecar on the same port as the healthz. This is an unauthenticated endpoint, and is disabled by default. You need to set `DAPR_PLACEMENT_METADATA_ENABLED` environment or `metadata-enabled` command line args to true to enable it. If you are using helm you just need to set `dapr_placement.metadataEnabled` to true. +There is an [HTTP API `/placement/state` for Placement service]({{% ref placement_api %}}) that exposes placement table information. The API is exposed on the sidecar on the same port as the healthz. This is an unauthenticated endpoint, and is disabled by default. You need to set `DAPR_PLACEMENT_METADATA_ENABLED` environment or `metadata-enabled` command line args to true to enable it. If you are using helm you just need to set `dapr_placement.metadataEnabled` to true. {{% alert title="Important" color="warning" %}} -When deploying actors into different namespaces ({{< ref namespaced-actors.md >}}), it is recommended to disable the `metadata-enabled` if you want to prevent retrieving actors from all namespaces. The metadata endpoint is scoped to all namespaces. +When deploying actors into different namespaces ({{% ref namespaced-actors %}}), it is recommended to disable the `metadata-enabled` if you want to prevent retrieving actors from all namespaces. The metadata endpoint is scoped to all namespaces. {{% /alert %}} ### Usecase: @@ -95,4 +95,4 @@ updatedAt | timestamp | Timestamp of the actor registered/updated. ## Related links -[Learn more about the Placement API.]({{< ref placement_api.md >}}) \ No newline at end of file +[Learn more about the Placement API.]({{% ref placement_api %}}) \ No newline at end of file diff --git a/daprdocs/content/en/concepts/dapr-services/scheduler.md b/daprdocs/content/en/concepts/dapr-services/scheduler.md index a0d00aa19ef..b92db205d88 100644 --- a/daprdocs/content/en/concepts/dapr-services/scheduler.md +++ b/daprdocs/content/en/concepts/dapr-services/scheduler.md @@ -5,7 +5,7 @@ linkTitle: "Scheduler" description: "Overview of the Dapr scheduler service" --- -The Dapr Scheduler service is used to schedule different types of jobs, running in [self-hosted mode]({{< ref self-hosted >}}) or on [Kubernetes]({{< ref kubernetes >}}). +The Dapr Scheduler service is used to schedule different types of jobs, running in [self-hosted mode]({{% ref self-hosted %}}) or on [Kubernetes]({{% ref kubernetes %}}). - Jobs created through the Jobs API - Actor reminder jobs (used by the actor reminders) - Actor reminder jobs created by the Workflow API (which uses actor reminders) @@ -20,7 +20,7 @@ The diagram below shows how the Scheduler service is used via the jobs API when ## Actor Reminders -Prior to Dapr v1.15, [actor reminders]({{< ref "actors-timers-reminders.md#actor-reminders" >}}) were run using the Placement service. Now, by default, the [`SchedulerReminders` feature flag]({{< ref "support-preview-features.md#current-preview-features" >}}) is set to `true`, and all new actor reminders you create are run using the Scheduler service to make them more scalable. +Prior to Dapr v1.15, [actor reminders]({{% ref "actors-timers-reminders#actor-reminders" %}}) were run using the Placement service. Now, by default, the [`SchedulerReminders` feature flag]({{% ref "support-preview-features#current-preview-features" %}}) is set to `true`, and all new actor reminders you create are run using the Scheduler service to make them more scalable. When you deploy Dapr v1.15, any _existing_ actor reminders are automatically migrated from the Actor State Store to the Scheduler service as a one time operation for each actor type. Each replica will only migrate the reminders whose actor type and id are associated with that host. This means that only when all replicas implementing an actor type are upgraded to 1.15, will all the reminders associated with that type be migrated. There will be _no_ loss of reminder triggers during the migration. However, you can prevent this migration and keep the existing actor reminders running using the Actor State Store by setting the `SchedulerReminders` flag to `false` in the application configuration file for the actor type. @@ -63,13 +63,13 @@ For non-client side errors, for example, when a job cannot be sent to an availab ## Self-hosted mode -The Scheduler service Docker container is started automatically as part of `dapr init`. It can also be run manually as a process if you are running in [slim-init mode]({{< ref self-hosted-no-docker.md >}}). +The Scheduler service Docker container is started automatically as part of `dapr init`. It can also be run manually as a process if you are running in [slim-init mode]({{% ref self-hosted-no-docker %}}). -The Scheduler can be run in both high availability (HA) and non-HA modes in self-hosted deployments. However, non-HA mode is not recommended for production use. If switching between non-HA and HA modes, the existing data directory must be removed, which results in loss of jobs and actor reminders. [Run a back-up]({{< ref "#back-up-and-restore-scheduler-data" >}}) before making this change to avoid losing data. +The Scheduler can be run in both high availability (HA) and non-HA modes in self-hosted deployments. However, non-HA mode is not recommended for production use. If switching between non-HA and HA modes, the existing data directory must be removed, which results in loss of jobs and actor reminders. [Run a back-up]({{% ref "#back-up-and-restore-scheduler-data" %}}) before making this change to avoid losing data. ## Kubernetes mode -The Scheduler service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. Scheduler always runs in high availability (HA) mode in Kubernetes deployments. Scaling the Scheduler service replicas up or down is not possible without incurring data loss due to the nature of the embedded data store. [Learn more about setting HA mode in your Kubernetes service.]({{< ref "kubernetes-production.md#individual-service-ha-helm-configuration" >}}) +The Scheduler service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. Scheduler always runs in high availability (HA) mode in Kubernetes deployments. Scaling the Scheduler service replicas up or down is not possible without incurring data loss due to the nature of the embedded data store. [Learn more about setting HA mode in your Kubernetes service.]({{% ref "kubernetes-production#individual-service-ha-helm-configuration" %}}) When a Kubernetes namespace is deleted, all the Job and Actor Reminders corresponding to that namespace are deleted. @@ -127,14 +127,14 @@ Port forward the Scheduler instance and view etcd's metrics with the following: curl -s http://localhost:2379/metrics ``` -Fine tune the embedded etcd to your needs by [reviewing and configuring the Scheduler's etcd flags as needed](https://github.com/dapr/dapr/blob/master/charts/dapr/README.md#dapr-scheduler-options). +Fine tune the embedded etcd to your needs by [reviewing and configuring the Scheduler's etcd flags as needed](https://github.com/dapr/dapr/blob/master/charts/dapr/README#dapr-scheduler-options). ## Disabling the Scheduler service If you are not using any features that require the Scheduler service (Jobs API, Actor Reminders, or Workflows), you can disable it by setting `global.scheduler.enabled=false`. -For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{< ref kubernetes >}}). +For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{% ref kubernetes %}}). ## Related links -[Learn more about the Jobs API.]({{< ref jobs_api.md >}}) +[Learn more about the Jobs API.]({{% ref jobs_api %}}) diff --git a/daprdocs/content/en/concepts/dapr-services/sentry.md b/daprdocs/content/en/concepts/dapr-services/sentry.md index c558baacd5a..57dd07c8513 100644 --- a/daprdocs/content/en/concepts/dapr-services/sentry.md +++ b/daprdocs/content/en/concepts/dapr-services/sentry.md @@ -5,25 +5,25 @@ linkTitle: "Sentry" description: "Overview of the Dapr sentry service" --- -The Dapr Sentry service manages mTLS between services and acts as a certificate authority. It generates mTLS certificates and distributes them to any running sidecars. This allows sidecars to communicate with encrypted, mTLS traffic. For more information read the [sidecar-to-sidecar communication overview]({{< ref "security-concept.md#sidecar-to-sidecar-communication" >}}). +The Dapr Sentry service manages mTLS between services and acts as a certificate authority. It generates mTLS certificates and distributes them to any running sidecars. This allows sidecars to communicate with encrypted, mTLS traffic. For more information read the [sidecar-to-sidecar communication overview]({{% ref "security-concept#sidecar-to-sidecar-communication" %}}). ## Self-hosted mode -The Sentry service Docker container is not started automatically as part of [`dapr init`]({{< ref self-hosted-with-docker.md >}}). However it can be executed manually by following the instructions for setting up [mutual TLS]({{< ref "mtls.md#self-hosted" >}}). +The Sentry service Docker container is not started automatically as part of [`dapr init`]({{% ref self-hosted-with-docker %}}). However it can be executed manually by following the instructions for setting up [mutual TLS]({{% ref "mtls#self-hosted" %}}). -It can also be run manually as a process if you are running in [slim-init mode]({{< ref self-hosted-no-docker.md >}}). +It can also be run manually as a process if you are running in [slim-init mode]({{% ref self-hosted-no-docker %}}). ## Kubernetes mode -The sentry service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{< ref kubernetes >}}). +The sentry service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{% ref kubernetes %}}). ## Further reading -- [Security overview]({{< ref security-concept.md >}}) -- [Self-hosted mode]({{< ref self-hosted-with-docker.md >}}) -- [Kubernetes mode]({{< ref kubernetes >}}) +- [Security overview]({{% ref security-concept %}}) +- [Self-hosted mode]({{% ref self-hosted-with-docker %}}) +- [Kubernetes mode]({{% ref kubernetes %}}) diff --git a/daprdocs/content/en/concepts/dapr-services/sidecar-injector.md b/daprdocs/content/en/concepts/dapr-services/sidecar-injector.md index 5a0a819ced6..242af6a373f 100644 --- a/daprdocs/content/en/concepts/dapr-services/sidecar-injector.md +++ b/daprdocs/content/en/concepts/dapr-services/sidecar-injector.md @@ -5,9 +5,9 @@ linkTitle: "Sidecar injector" description: "Overview of the Dapr sidecar injector process" --- -When running Dapr in [Kubernetes mode]({{< ref kubernetes >}}), a pod is created running the Dapr Sidecar Injector service, which looks for pods initialized with the [Dapr annotations]({{< ref arguments-annotations-overview.md >}}), and then creates another container in that pod for the [daprd service]({{< ref sidecar >}}) +When running Dapr in [Kubernetes mode]({{% ref kubernetes %}}), a pod is created running the Dapr Sidecar Injector service, which looks for pods initialized with the [Dapr annotations]({{% ref arguments-annotations-overview %}}), and then creates another container in that pod for the [daprd service]({{% ref sidecar %}}) ## Running the sidecar injector -The sidecar injector service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{< ref kubernetes >}}). +The sidecar injector service is deployed as part of `dapr init -k`, or via the Dapr Helm charts. For more information on running Dapr on Kubernetes, visit the [Kubernetes hosting page]({{% ref kubernetes %}}). diff --git a/daprdocs/content/en/concepts/dapr-services/sidecar.md b/daprdocs/content/en/concepts/dapr-services/sidecar.md index 8e57144a3b9..18ffeda4484 100644 --- a/daprdocs/content/en/concepts/dapr-services/sidecar.md +++ b/daprdocs/content/en/concepts/dapr-services/sidecar.md @@ -6,13 +6,13 @@ weight: 100 description: "Overview of the Dapr sidecar process" --- -Dapr uses a [sidecar pattern]({{< ref "concepts/overview.md#sidecar-architecture" >}}), meaning the Dapr APIs are run and exposed on a separate process, the Dapr sidecar, running alongside your application. The Dapr sidecar process is named `daprd` and is launched in different ways depending on the hosting environment. +Dapr uses a [sidecar pattern]({{% ref "overview#sidecar-architecture" %}}), meaning the Dapr APIs are run and exposed on a separate process, the Dapr sidecar, running alongside your application. The Dapr sidecar process is named `daprd` and is launched in different ways depending on the hosting environment. The Dapr sidecar exposes: -- [Building block APIs]({{}}) used by your application business logic -- A [metadata API]({{}}) for discoverability of capabilities and to set attributes -- A [health API]({{}}) to determine health status and sidecar readiness and liveness +- [Building block APIs]({{% ref building-blocks-concept%}}) used by your application business logic +- A [metadata API]({{% ref metadata_api%}}) for discoverability of capabilities and to set attributes +- A [health API]({{% ref sidecar-health%}}) to determine health status and sidecar readiness and liveness The Dapr sidecar will reach readiness state once the application is accessible on its configured port. The application cannot access the Dapr components during application start up/initialization. @@ -23,21 +23,21 @@ The sidecar APIs are called from your application over local http or gRPC endpoi ## Self-hosted with `dapr run` -When Dapr is installed in [self-hosted mode]({{}}), the `daprd` binary is downloaded and placed under the user home directory (`$HOME/.dapr/bin` for Linux/macOS or `%USERPROFILE%\.dapr\bin\` for Windows). +When Dapr is installed in [self-hosted mode]({{% ref self-hosted%}}), the `daprd` binary is downloaded and placed under the user home directory (`$HOME/.dapr/bin` for Linux/macOS or `%USERPROFILE%\.dapr\bin\` for Windows). -In self-hosted mode, running the Dapr CLI [`run` command]({{< ref dapr-run.md >}}) launches the `daprd` executable with the provided application executable. This is the recommended way of running the Dapr sidecar when working locally in scenarios such as development and testing. +In self-hosted mode, running the Dapr CLI [`run` command]({{% ref dapr-run %}}) launches the `daprd` executable with the provided application executable. This is the recommended way of running the Dapr sidecar when working locally in scenarios such as development and testing. -You can find the various arguments that the CLI exposes to configure the sidecar in the [Dapr run command reference]({{}}). +You can find the various arguments that the CLI exposes to configure the sidecar in the [Dapr run command reference]({{% ref dapr-run%}}). ## Kubernetes with `dapr-sidecar-injector` -On [Kubernetes]({{< ref kubernetes.md >}}), the Dapr control plane includes the [dapr-sidecar-injector service]({{< ref kubernetes-overview.md >}}), which watches for new pods with the `dapr.io/enabled` annotation and injects a container with the `daprd` process within the pod. In this case, sidecar arguments can be passed through annotations as outlined in the **Kubernetes annotations** column in [this table]({{}}). +On [Kubernetes]({{% ref kubernetes %}}), the Dapr control plane includes the [dapr-sidecar-injector service]({{% ref kubernetes-overview %}}), which watches for new pods with the `dapr.io/enabled` annotation and injects a container with the `daprd` process within the pod. In this case, sidecar arguments can be passed through annotations as outlined in the **Kubernetes annotations** column in [this table]({{% ref arguments-annotations-overview%}}). ## Running the sidecar directly -In most cases you do not need to run `daprd` explicitly, as the sidecar is either launched by the [CLI]({{}}) (self-hosted mode) or by the dapr-sidecar-injector service (Kubernetes). For advanced use cases (debugging, scripted deployments, etc.) the `daprd` process can be launched directly. +In most cases you do not need to run `daprd` explicitly, as the sidecar is either launched by the [CLI]({{% ref cli-overview%}}) (self-hosted mode) or by the dapr-sidecar-injector service (Kubernetes). For advanced use cases (debugging, scripted deployments, etc.) the `daprd` process can be launched directly. -For a detailed list of all available arguments run `daprd --help` or see this [table]({{< ref arguments-annotations-overview.md >}}) which outlines how the `daprd` arguments relate to the CLI arguments and Kubernetes annotations. +For a detailed list of all available arguments run `daprd --help` or see this [table]({{% ref arguments-annotations-overview %}}) which outlines how the `daprd` arguments relate to the CLI arguments and Kubernetes annotations. ### Examples diff --git a/daprdocs/content/en/concepts/faq/faq.md b/daprdocs/content/en/concepts/faq/faq.md index ce59e92c778..c2fb33457fb 100644 --- a/daprdocs/content/en/concepts/faq/faq.md +++ b/daprdocs/content/en/concepts/faq/faq.md @@ -7,17 +7,17 @@ description: "Common questions asked about Dapr" --- ## 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. They do have some overlapping features, but also offer unique benefits. For more information please read the [Dapr & service meshes]({{}}) concept page. +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. They do have some overlapping features, but also offer unique benefits. For more information please read the [Dapr & service meshes]({{%ref service-mesh%}}) 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. +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 %}}) for updated performance numbers. ## Actors ### 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-premises environments. -Moreover, 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 >}}). +Moreover, 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 %}}). ### Differences between Dapr and an actor framework @@ -29,7 +29,7 @@ The Dapr runtime SDKs have language-specific actor frameworks. For example, the ## Does Dapr have any SDKs I can use if I want to work with a particular programming language or framework? -To make using Dapr more natural for different languages, it includes [language specific SDKs]({{}}) for Go, Java, JavaScript, .NET, Python, PHP, Rust and C++. These SDKs expose the functionality in the Dapr building blocks, such as saving state, publishing an event or creating an actor, through a typed language API rather than calling the http/gRPC API. This enables you to write a combination of stateless and stateful functions and actors all in the language of your choice. And because these SDKs share the Dapr runtime, you get cross-language actor and functions support. +To make using Dapr more natural for different languages, it includes [language specific SDKs]({{%ref sdks%}}) for Go, Java, JavaScript, .NET, Python, PHP, Rust and C++. These SDKs expose the functionality in the Dapr building blocks, such as saving state, publishing an event or creating an actor, through a typed language API rather than calling the http/gRPC API. This enables you to write a combination of stateless and stateful functions and actors all in the language of your choice. And because these SDKs share the Dapr runtime, you get cross-language actor and functions support. ## What frameworks does Dapr integrate with? Dapr can be integrated with any developer framework. For example, in the Dapr .NET SDK you can find ASP.NET Core integration, which brings stateful routing controllers that respond to pub/sub events from other services. diff --git a/daprdocs/content/en/concepts/isolation-concept.md b/daprdocs/content/en/concepts/isolation-concept.md index 38c26084cdb..e129896d215 100644 --- a/daprdocs/content/en/concepts/isolation-concept.md +++ b/daprdocs/content/en/concepts/isolation-concept.md @@ -12,15 +12,15 @@ Dapr supports namespacing in service invocation calls between applications, when To get started, create and configure your namespace. -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} In self-hosted mode, specify the namespace for a Dapr instance by setting the `NAMESPACE` environment variable. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, create and configure the namespace: @@ -31,15 +31,15 @@ kubectl config set-context --current --namespace=namespaceA Then deploy your applications into this namespace. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Learn how to use namespacing throughout Dapr: -- [Service Invocation namespaces]({{< ref service-invocation-namespaces.md >}}) -- [How to: Set up pub/sub namespace consumer groups]({{< ref howto-namespace.md >}}) +- [Service Invocation namespaces]({{% ref service-invocation-namespaces %}}) +- [How to: Set up pub/sub namespace consumer groups]({{% ref howto-namespace %}}) - Components: - - [How to: Configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}) - - [Scope components to one or more applications]({{< ref component-scopes.md >}}) -- [Namespaced actors]({{< ref namespaced-actors.md >}}) \ No newline at end of file + - [How to: Configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}) + - [Scope components to one or more applications]({{% ref component-scopes %}}) +- [Namespaced actors]({{% ref namespaced-actors %}}) \ No newline at end of file diff --git a/daprdocs/content/en/concepts/observability-concept.md b/daprdocs/content/en/concepts/observability-concept.md index f7635236c11..ae14380b5c6 100644 --- a/daprdocs/content/en/concepts/observability-concept.md +++ b/daprdocs/content/en/concepts/observability-concept.md @@ -27,17 +27,17 @@ Maintaining this instrumentation code, which is not part of the core logic of th ## Observability for your application with Dapr -When you leverage Dapr API building blocks to perform service-to-service calls, pub/sub messaging, and other APIs, Dapr offers an advantage with respect to [distributed tracing]({{< ref tracing >}}). Since this inter-service communication flows through the Dapr runtime (or "sidecar"), Dapr is in a unique position to offload the burden of application-level instrumentation. +When you leverage Dapr API building blocks to perform service-to-service calls, pub/sub messaging, and other APIs, Dapr offers an advantage with respect to [distributed tracing]({{% ref tracing %}}). Since this inter-service communication flows through the Dapr runtime (or "sidecar"), Dapr is in a unique position to offload the burden of application-level instrumentation. ### Distributed tracing -Dapr can be [configured to emit tracing data]({{< ref setup-tracing.md >}}) using the widely adopted protocols of [Open Telemetry (OTEL)](https://opentelemetry.io/) and [Zipkin](https://zipkin.io). This makes it easily integrated with multiple observability tools. +Dapr can be [configured to emit tracing data]({{% ref setup-tracing %}}) using the widely adopted protocols of [Open Telemetry (OTEL)](https://opentelemetry.io/) and [Zipkin](https://zipkin.io). This makes it easily integrated with multiple observability tools. Distributed tracing with Dapr ### Automatic tracing context generation -Dapr uses the [W3C tracing]({{< ref tracing >}}) specification for tracing context, included as part Open Telemetry (OTEL), to generate and propagate the context header for the application or propagate user-provided context headers. This means that you get tracing by default with Dapr. +Dapr uses the [W3C tracing]({{% ref tracing %}}) specification for tracing context, included as part Open Telemetry (OTEL), to generate and propagate the context header for the application or propagate user-provided context headers. This means that you get tracing by default with Dapr. ## Observability for the Dapr sidecar and control plane @@ -50,25 +50,25 @@ You can also observe Dapr itself, by: ### Logging -Dapr generates [logs]({{< ref logs.md >}}) to: +Dapr generates [logs]({{% ref logs %}}) to: - Provide visibility into sidecar operation - Help users identify issues and perform debugging -Log events contain warning, error, info, and debug messages produced by Dapr system services. You can also configure Dapr to send logs to collectors, such as [Open Telemetry Collector]({{< ref otel-collector >}}), [Fluentd]({{< ref fluentd.md >}}), [New Relic]({{< ref "operations/observability/logging/newrelic.md" >}}), [Azure Monitor]({{< ref azure-monitor.md >}}), and other observability tools, so that logs can be searched and analyzed to provide insights. +Log events contain warning, error, info, and debug messages produced by Dapr system services. You can also configure Dapr to send logs to collectors, such as [Open Telemetry Collector]({{% ref otel-collector %}}), [Fluentd]({{% ref fluentd %}}), [New Relic]({{% ref "operations/observability/logging/newrelic.md" %}}), [Azure Monitor]({{% ref azure-monitor %}}), and other observability tools, so that logs can be searched and analyzed to provide insights. ### Metrics -Metrics are a series of measured values and counts collected and stored over time. [Dapr metrics]({{< ref metrics >}}) provide monitoring capabilities to understand the behavior of the Dapr sidecar and control plane. For example, the metrics between a Dapr sidecar and the user application show call latency, traffic failures, error rates of requests, etc. +Metrics are a series of measured values and counts collected and stored over time. [Dapr metrics]({{% ref metrics %}}) provide monitoring capabilities to understand the behavior of the Dapr sidecar and control plane. For example, the metrics between a Dapr sidecar and the user application show call latency, traffic failures, error rates of requests, etc. -Dapr [control plane metrics](https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics.md) show sidecar injection failures and the health of control plane services, including CPU usage, number of actor placements made, etc. +Dapr [control plane metrics](https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics) show sidecar injection failures and the health of control plane services, including CPU usage, number of actor placements made, etc. ### Health checks -The Dapr sidecar exposes an HTTP endpoint for [health checks]({{< ref sidecar-health.md >}}). With this API, user code or hosting environments can probe the Dapr sidecar to determine its status and identify issues with sidecar readiness. +The Dapr sidecar exposes an HTTP endpoint for [health checks]({{% ref sidecar-health %}}). With this API, user code or hosting environments can probe the Dapr sidecar to determine its status and identify issues with sidecar readiness. -Conversely, Dapr can be configured to probe for the [health of your application]({{< ref app-health.md >}}), and react to changes in the app's health, including stopping pub/sub subscriptions and short-circuiting service invocation calls. +Conversely, Dapr can be configured to probe for the [health of your application]({{% ref app-health %}}), and react to changes in the app's health, including stopping pub/sub subscriptions and short-circuiting service invocation calls. ## Next steps -- [Learn more about observability in developing with Dapr]({{< ref tracing >}}) -- [Learn more about observability in operating with Dapr]({{< ref tracing >}}) \ No newline at end of file +- [Learn more about observability in developing with Dapr]({{% ref tracing %}}) +- [Learn more about observability in operating with Dapr]({{% ref tracing %}}) \ No newline at end of file diff --git a/daprdocs/content/en/concepts/overview.md b/daprdocs/content/en/concepts/overview.md index 7de1b13b92c..0d4eb6a711f 100644 --- a/daprdocs/content/en/concepts/overview.md +++ b/daprdocs/content/en/concepts/overview.md @@ -19,7 +19,7 @@ Dapr is a portable, event-driven runtime that makes it easy for any developer to With the current wave of cloud adoption, web + database application architectures (such as classic 3-tier designs) are trending more toward microservice application architectures, which are inherently distributed. You shouldn't have to become a distributed systems expert just to create microservices applications. -This is where Dapr comes in. Dapr codifies the *best practices* for building microservice applications into open, independent APIs called [building blocks]({{< ref "#microservice-building-blocks-for-cloud-and-edge" >}}). Dapr's building blocks: +This is where Dapr comes in. Dapr codifies the *best practices* for building microservice applications into open, independent APIs called [building blocks]({{% ref "#microservice-building-blocks-for-cloud-and-edge" %}}). Dapr's building blocks: - Enable you to build portable applications using the language and framework of your choice. - Are completely independent - Have no limit to how many you use in your application @@ -44,18 +44,18 @@ Each of these building block APIs is independent, meaning that you can use any n | Building Block | Description | |----------------|-------------| -| [**Service-to-service invocation**]({{< ref "service-invocation-overview.md" >}}) | Resilient service-to-service invocation enables method calls, including retries, on remote services, wherever they are located in the supported hosting environment. -| [**Publish and subscribe**]({{< ref "pubsub-overview.md" >}}) | Publishing events and subscribing to topics between services enables event-driven architectures to simplify horizontal scalability and make them resilient to failure. Dapr provides at-least-once message delivery guarantee, message TTL, consumer groups and other advance features. -| [**Workflows**]({{< ref "workflow-overview.md" >}}) | The workflow API can be combined with other Dapr building blocks to define long running, persistent processes or data flows that span multiple microservices using Dapr workflows. -| [**State management**]({{< ref "state-management-overview.md" >}}) | With state management for storing and querying key/value pairs, long-running, highly available, stateful services can be easily written alongside stateless services in your application. The state store is pluggable and examples include AWS DynamoDB, Azure Cosmos DB, Azure SQL Server, GCP Firebase, PostgreSQL or Redis, among others. -| [**Resource bindings**]({{< ref "bindings-overview.md" >}}) | Resource bindings with triggers builds further on event-driven architectures for scale and resiliency by receiving and sending events to and from any external source such as databases, queues, file systems, etc. -| [**Actors**]({{< ref "actors-overview.md" >}}) | A pattern for stateful and stateless objects that makes concurrency simple, with method and state encapsulation. Dapr provides many capabilities in its actor runtime, including concurrency, state, and life-cycle management for actor activation/deactivation, and timers and reminders to wake up actors. -| [**Secrets**]({{< ref "secrets-overview.md" >}}) | The secrets management API integrates with public cloud and local secret stores to retrieve the secrets for use in application code. -| [**Configuration**]({{< ref "configuration-api-overview.md" >}}) | The configuration API enables you to retrieve and subscribe to application configuration items from configuration stores. -| [**Distributed lock**]({{< ref "distributed-lock-api-overview.md" >}}) | The distributed lock API enables your application to acquire a lock for any resource that gives it exclusive access until either the lock is released by the application, or a lease timeout occurs. -| [**Cryptography**]({{< ref "cryptography-overview.md" >}}) | The cryptography API provides an abstraction layer on top of security infrastructure such as key vaults. It contains APIs that allow you to perform cryptographic operations, such as encrypting and decrypting messages, without exposing keys to your applications. -| [**Jobs**]({{< ref "jobs-overview.md" >}}) | The jobs API enables you to schedule jobs at specific times or intervals. -| [**Conversation**]({{< ref "conversation-overview.md" >}}) | The conversation API enables you to abstract the complexities of interacting with large language models (LLMs) and includes features such as prompt caching and personally identifiable information (PII) obfuscation. Using [conversation components]({{< ref supported-conversation >}}), you can supply prompts to converse with different LLMs. +| [**Service-to-service invocation**]({{% ref "service-invocation-overview" %}}) | Resilient service-to-service invocation enables method calls, including retries, on remote services, wherever they are located in the supported hosting environment. +| [**Publish and subscribe**]({{% ref "pubsub-overview" %}}) | Publishing events and subscribing to topics between services enables event-driven architectures to simplify horizontal scalability and make them resilient to failure. Dapr provides at-least-once message delivery guarantee, message TTL, consumer groups and other advance features. +| [**Workflows**]({{% ref "workflow-overview" %}}) | The workflow API can be combined with other Dapr building blocks to define long running, persistent processes or data flows that span multiple microservices using Dapr workflows. +| [**State management**]({{% ref "state-management-overview" %}}) | With state management for storing and querying key/value pairs, long-running, highly available, stateful services can be easily written alongside stateless services in your application. The state store is pluggable and examples include AWS DynamoDB, Azure Cosmos DB, Azure SQL Server, GCP Firebase, PostgreSQL or Redis, among others. +| [**Resource bindings**]({{% ref "bindings-overview" %}}) | Resource bindings with triggers builds further on event-driven architectures for scale and resiliency by receiving and sending events to and from any external source such as databases, queues, file systems, etc. +| [**Actors**]({{% ref "actors-overview" %}}) | A pattern for stateful and stateless objects that makes concurrency simple, with method and state encapsulation. Dapr provides many capabilities in its actor runtime, including concurrency, state, and life-cycle management for actor activation/deactivation, and timers and reminders to wake up actors. +| [**Secrets**]({{% ref "secrets-overview" %}}) | The secrets management API integrates with public cloud and local secret stores to retrieve the secrets for use in application code. +| [**Configuration**]({{% ref "configuration-api-overview" %}}) | The configuration API enables you to retrieve and subscribe to application configuration items from configuration stores. +| [**Distributed lock**]({{% ref "distributed-lock-api-overview" %}}) | The distributed lock API enables your application to acquire a lock for any resource that gives it exclusive access until either the lock is released by the application, or a lease timeout occurs. +| [**Cryptography**]({{% ref "cryptography-overview" %}}) | The cryptography API provides an abstraction layer on top of security infrastructure such as key vaults. It contains APIs that allow you to perform cryptographic operations, such as encrypting and decrypting messages, without exposing keys to your applications. +| [**Jobs**]({{% ref "jobs-overview" %}}) | The jobs API enables you to schedule jobs at specific times or intervals. +| [**Conversation**]({{% ref "conversation-overview" %}}) | The conversation API enables you to abstract the complexities of interacting with large language models (LLMs) and includes features such as prompt caching and personally identifiable information (PII) obfuscation. Using [conversation components]({{% ref supported-conversation %}}), you can supply prompts to converse with different LLMs. ### Cross-cutting APIs @@ -63,9 +63,9 @@ Alongside its building blocks, Dapr provides cross-cutting APIs that apply acros | Building Block | Description | |----------------|-------------| -| [**Resiliency**]({{< ref "resiliency-concept.md" >}}) | Dapr provides the capability to define and apply fault tolerance resiliency policies via a resiliency spec. Supported specs define policies for resiliency patterns such as timeouts, retries/back-offs, and circuit breakers. -| [**Observability**]({{< ref "observability-concept.md" >}}) | Dapr emits metrics, logs, and traces to debug and monitor both Dapr and user applications. Dapr supports distributed tracing to easily diagnose and serve inter-service calls in production using the W3C Trace Context standard and Open Telemetry to send to different monitoring tools. -| [**Security**]({{< ref "security-concept.md" >}}) | Dapr supports in-transit encryption of communication between Dapr instances using the Dapr control plane, Sentry service. You can bring in your own certificates, or let Dapr automatically create and persist self-signed root and issuer certificates. +| [**Resiliency**]({{% ref "resiliency-concept" %}}) | Dapr provides the capability to define and apply fault tolerance resiliency policies via a resiliency spec. Supported specs define policies for resiliency patterns such as timeouts, retries/back-offs, and circuit breakers. +| [**Observability**]({{% ref "observability-concept" %}}) | Dapr emits metrics, logs, and traces to debug and monitor both Dapr and user applications. Dapr supports distributed tracing to easily diagnose and serve inter-service calls in production using the W3C Trace Context standard and Open Telemetry to send to different monitoring tools. +| [**Security**]({{% ref "security-concept" %}}) | Dapr supports in-transit encryption of communication between Dapr instances using the Dapr control plane, Sentry service. You can bring in your own certificates, or let Dapr automatically create and persist self-signed root and issuer certificates. ## Sidecar architecture @@ -81,9 +81,9 @@ Dapr can be hosted in multiple environments, including: ### Self-hosted local development -In [self-hosted mode]({{< ref self-hosted-overview.md >}}), Dapr runs as a separate sidecar process, which your service code can call via HTTP or gRPC. Each running service has a Dapr runtime process (or sidecar) configured to use state stores, pub/sub, binding components, and the other building blocks. +In [self-hosted mode]({{% ref self-hosted-overview %}}), Dapr runs as a separate sidecar process, which your service code can call via HTTP or gRPC. Each running service has a Dapr runtime process (or sidecar) configured to use state stores, pub/sub, binding components, and the other building blocks. -You can use the [Dapr CLI](https://github.com/dapr/cli#launch-dapr-and-your-app) to run a Dapr-enabled application on your local machine. In the following diagram, Dapr's local development environment gets configured with the CLI `init` command. Try this out with the [getting started samples]({{< ref getting-started >}}). +You can use the [Dapr CLI](https://github.com/dapr/cli#launch-dapr-and-your-app) to run a Dapr-enabled application on your local machine. In the following diagram, Dapr's local development environment gets configured with the CLI `init` command. Try this out with the [getting started samples]({{% ref getting-started %}}). Architecture diagram of Dapr in self-hosted mode @@ -91,7 +91,7 @@ You can use the [Dapr CLI](https://github.com/dapr/cli#launch-dapr-and-your-app) Kubernetes can be used for either: - Local development (for example, with [minikube](https://minikube.sigs.k8s.io/docs/) and [k3S](https://k3s.io/)), or -- In [production]({{< ref kubernetes >}}). +- In [production]({{% ref kubernetes %}}). In container hosting environments such as Kubernetes, Dapr runs as a sidecar container with the application container in the same pod. @@ -100,16 +100,16 @@ Dapr's `dapr-sidecar-injector` and `dapr-operator` control plane services provid - Provide notifications of Dapr component updates provisioned in the cluster -The `dapr-sentry` service is a certificate authority that enables mutual TLS between Dapr sidecar instances for secure data encryption, as well as providing identity via [Spiffe](https://spiffe.io/). For more information on the `Sentry` service, read the [security overview]({{< ref "security-concept.md#dapr-to-dapr-communication" >}}) +The `dapr-sentry` service is a certificate authority that enables mutual TLS between Dapr sidecar instances for secure data encryption, as well as providing identity via [Spiffe](https://spiffe.io/). For more information on the `Sentry` service, read the [security overview]({{% ref "security-concept#dapr-to-dapr-communication" %}}) -Deploying and running a Dapr-enabled application into your Kubernetes cluster is as simple as adding a few annotations to the deployment schemes. Visit the [Dapr on Kubernetes docs]({{< ref kubernetes >}}). +Deploying and running a Dapr-enabled application into your Kubernetes cluster is as simple as adding a few annotations to the deployment schemes. Visit the [Dapr on Kubernetes docs]({{% ref kubernetes %}}). Architecture diagram of Dapr in Kubernetes mode ### Clusters of physical or virtual machines -The Dapr control plane services can be deployed in high availability (HA) mode to clusters of physical or virtual machines in production. In the diagram below, the Actor `Placement` and security `Sentry` services are started on three different VMs to provide HA control plane. In order to provide name resolution using DNS for the applications running in the cluster, Dapr uses multicast DNS by default, but can also optionally support [Hashicorp Consul service]({{< ref setup-nr-consul >}}). +The Dapr control plane services can be deployed in high availability (HA) mode to clusters of physical or virtual machines in production. In the diagram below, the Actor `Placement` and security `Sentry` services are started on three different VMs to provide HA control plane. In order to provide name resolution using DNS for the applications running in the cluster, Dapr uses multicast DNS by default, but can also optionally support [Hashicorp Consul service]({{% ref setup-nr-consul %}}). Architecture diagram of Dapr control plane and Consul deployed to VMs in high availability mode @@ -119,7 +119,7 @@ Dapr offers a variety of SDKs and frameworks to make it easy to begin developing ### Dapr SDKs -To make using Dapr more natural for different languages, it also includes [language specific SDKs]({{< ref sdks >}}) for: +To make using Dapr more natural for different languages, it also includes [language specific SDKs]({{% ref sdks %}}) for: - Go - Java - JavaScript @@ -137,23 +137,23 @@ Dapr can be used from any developer framework. Here are some that have been inte | Language | Frameworks | Description | |----------|------------|-------------| -| [.NET]({{< ref dotnet >}}) | [ASP.NET Core](https://github.com/dapr/dotnet-sdk/tree/master/examples/AspNetCore) | Brings stateful routing controllers that respond to pub/sub events from other services. Can also take advantage of [ASP.NET Core gRPC Services](https://docs.microsoft.com/aspnet/core/grpc/). -| [Java]({{< ref java >}}) | [Spring Boot](https://spring.io/) | Build Spring boot applications with Dapr APIs -| [Python]({{< ref python >}}) | [Flask]({{< ref python-flask.md >}}) | Build Flask applications with Dapr APIs +| [.NET]({{% ref dotnet %}}) | [ASP.NET Core](https://github.com/dapr/dotnet-sdk/tree/master/examples/AspNetCore) | Brings stateful routing controllers that respond to pub/sub events from other services. Can also take advantage of [ASP.NET Core gRPC Services](https://docs.microsoft.com/aspnet/core/grpc/). +| [Java]({{% ref java %}}) | [Spring Boot](https://spring.io/) | Build Spring boot applications with Dapr APIs +| [Python]({{% ref python %}}) | [Flask]({{% ref python-flask %}}) | Build Flask applications with Dapr APIs | [JavaScript](https://github.com/dapr/js-sdk) | [Express](https://expressjs.com/) | Build Express applications with Dapr APIs -| [PHP]({{< ref php >}}) | | You can serve with Apache, Nginx, or Caddyserver. +| [PHP]({{% ref php %}}) | | You can serve with Apache, Nginx, or Caddyserver. #### Integrations and extensions -Visit the [integrations]({{< ref integrations >}}) page to learn about some of the first-class support Dapr has for various frameworks and external products, including: +Visit the [integrations]({{% ref integrations %}}) page to learn about some of the first-class support Dapr has for various frameworks and external products, including: - Public cloud services, like Azure and AWS - Visual Studio Code - GitHub ## Designed for operations -Dapr is designed for [operations]({{< ref operations >}}) and security. The Dapr sidecars, runtime, components, and configuration can all be managed and deployed easily and securely to match your organization's needs. +Dapr is designed for [operations]({{% ref operations %}}) and security. The Dapr sidecars, runtime, components, and configuration can all be managed and deployed easily and securely to match your organization's needs. The [dashboard](https://github.com/dapr/dashboard), installed via the Dapr CLI, provides a web-based UI enabling you to see information, view logs, and more for running Dapr applications. -Dapr supports [monitoring tools]({{< ref observability >}}) for deeper visibility into the Dapr system services and sidecars, while the [observability capabilities]({{< ref "observability-concept.md" >}}) of Dapr provide insights into your application, such as tracing and metrics. +Dapr supports [monitoring tools]({{% ref observability %}}) for deeper visibility into the Dapr system services and sidecars, while the [observability capabilities]({{% ref "observability-concept" %}}) of Dapr provide insights into your application, such as tracing and metrics. diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index 32656434d30..f5eaef3709c 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -17,7 +17,7 @@ Dapr provides a capability for defining and applying fault tolerance resiliency - Retries/back-offs - Circuit breakers -These policies can be applied to any Dapr API calls when calling components with a [resiliency spec]({{< ref resiliency-overview >}}). +These policies can be applied to any Dapr API calls when calling components with a [resiliency spec]({{% ref resiliency-overview %}}). ## App Health Checks Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health @@ -26,21 +26,21 @@ Applications can become unresponsive for a variety of reasons. For example, they Dapr provides a capability for monitoring app health through probes that check the health of your application and react to status changes. When an unhealthy app is detected, Dapr stops accepting new work on behalf of the application. -Read more on how to apply [app health checks]({{< ref app-health >}}) to your application. +Read more on how to apply [app health checks]({{% ref app-health %}}) to your application. ## Sidecar Health Checks Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health -Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: +Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{% ref health_api %}}). With this endpoint, the *daprd* process, or sidecar, can be: - Probed for its health - Determined for readiness and liveness -Read more on about how to apply [dapr health checks]({{< ref sidecar-health >}}) to your application. +Read more on about how to apply [dapr health checks]({{% ref sidecar-health %}}) to your application. ## Next steps -- [Learn more about resiliency]({{< ref resiliency-overview.md >}}) +- [Learn more about resiliency]({{% ref resiliency-overview %}}) - Try out one of the Resiliency quickstarts: - - [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) - - [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) \ No newline at end of file + - [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart %}}) + - [Resiliency: State Management]({{% ref resiliency-state-quickstart %}}) \ No newline at end of file diff --git a/daprdocs/content/en/concepts/security-concept.md b/daprdocs/content/en/concepts/security-concept.md index 64667e34d4b..aa7bfe5af1b 100644 --- a/daprdocs/content/en/concepts/security-concept.md +++ b/daprdocs/content/en/concepts/security-concept.md @@ -23,13 +23,13 @@ Dapr provides end-to-end security with the service invocation API, with the abil ## Service invocation scoping access policy -Dapr applications can be scoped to namespaces for deployment and security. You can call between services deployed to different namespaces. Read the [Service invocation across namespaces]({{< ref "service-invocation-namespaces.md" >}}) article for more details. +Dapr applications can be scoped to namespaces for deployment and security. You can call between services deployed to different namespaces. Read the [Service invocation across namespaces]({{% ref "service-invocation-namespaces" %}}) article for more details. -Dapr applications can restrict which operations can be called, including which applications are allowed (or denied) to call it. Read [How-To: Apply access control list configuration for service invocation]({{< ref invoke-allowlist.md >}}) for more details. +Dapr applications can restrict which operations can be called, including which applications are allowed (or denied) to call it. Read [How-To: Apply access control list configuration for service invocation]({{% ref invoke-allowlist %}}) for more details. ## Pub/sub topic scoping access policy -For pub/sub components, you can limit which topic types and applications are allowed to publish and subscribe to specific topics. Read [Scope Pub/Sub topic access]({{< ref "pubsub-scopes.md" >}}) for more details. +For pub/sub components, you can limit which topic types and applications are allowed to publish and subscribe to specific topics. Read [Scope Pub/Sub topic access]({{% ref "pubsub-scopes" %}}) for more details. ## Encryption of data using mTLS @@ -58,7 +58,7 @@ When a new Dapr sidecar initializes, it checks if mTLS is enabled. If so, an ECD mTLS can be turned on/off by editing the default configuration deployed with Dapr via the `spec.mtls.enabled` field. -[You can do this for both Kubernetes and self-hosted modes]({{< ref mtls.md >}}). +[You can do this for both Kubernetes and self-hosted modes]({{% ref mtls %}}). #### mTLS in self hosted mode @@ -81,7 +81,7 @@ The diagram below shows how the Sentry system service issues certificates for ap ### Preventing IP addresses on Dapr -To prevent Dapr sidecars from being called on any IP address (especially in production environments such as Kubernetes), Dapr restricts its listening IP addresses to `localhost`. Use the [dapr-listen-addresses]({{}}) setting if you need to enable access from external addresses. +To prevent Dapr sidecars from being called on any IP address (especially in production environments such as Kubernetes), Dapr restricts its listening IP addresses to `localhost`. Use the [dapr-listen-addresses]({{%ref arguments-annotations-overview%}}) setting if you need to enable access from external addresses. ## Secure Dapr to application communication @@ -92,8 +92,8 @@ The Dapr sidecar runs close to the application through `localhost`, and is recom For more details on configuring API token security, read: -- [Using an API token to authentication requests from an application to Dapr]({{< ref api-token.md >}}). -- [Using an API token to authentication requests from Dapr to the application]({{< ref app-api-token.md >}}) +- [Using an API token to authentication requests from an application to Dapr]({{% ref api-token %}}). +- [Using an API token to authentication requests from Dapr to the application]({{% ref app-api-token %}}) ## Secure Dapr to control plane communication @@ -124,11 +124,11 @@ Dapr is designed for operators to manage mTLS certificates and enforce OAuth pol ## mTLS Certificate deployment and rotation -While operators and developers can bring their own certificates into Dapr, Dapr automatically creates and persists self-signed root and issuer certificates. Read [Setup & configure mTLS certificates]({{< ref mtls.md >}}) for more details. +While operators and developers can bring their own certificates into Dapr, Dapr automatically creates and persists self-signed root and issuer certificates. Read [Setup & configure mTLS certificates]({{% ref mtls %}}) for more details. ## Middleware endpoint authorization with OAuth -With Dapr OAuth 2.0 middleware, you can enable OAuth authorization on Dapr endpoints for your APIs. Read [Configure endpoint authorization with OAuth]({{< ref oauth.md >}}) for details. Dapr has other middleware components that you can use for OpenID Connect and OPA Policies. For more details, [read about supported middleware]({{< ref supported-middleware.md >}}). +With Dapr OAuth 2.0 middleware, you can enable OAuth authorization on Dapr endpoints for your APIs. Read [Configure endpoint authorization with OAuth]({{% ref oauth %}}) for details. Dapr has other middleware components that you can use for OpenID Connect and OPA Policies. For more details, [read about supported middleware]({{% ref supported-middleware %}}). ## Network security @@ -144,19 +144,19 @@ In certain scenarios, such as with zero trust networks or when exposing the Dapr -Read [How-To: Selectively enable Dapr APIs on the Dapr sidecar]({{< ref api-allowlist.md >}}) for more details. +Read [How-To: Selectively enable Dapr APIs on the Dapr sidecar]({{% ref api-allowlist %}}) for more details. ## Secret scoping access policy -To limit the Dapr application's access to secrets, you can define secret scopes. Add a secret scope policy to the application configuration with restrictive permissions. Read [How To: Use secret scoping]({{< ref secret-scope.md >}}) for more details. +To limit the Dapr application's access to secrets, you can define secret scopes. Add a secret scope policy to the application configuration with restrictive permissions. Read [How To: Use secret scoping]({{% ref secret-scope %}}) for more details. ## Component application scoping access policy and secret usage -Dapr components can be namespaced. That means a Dapr sidecar instance can only access the components that have been deployed to the same namespace. Read [How-To: Scope components to one or more applications using namespaces]({{< ref component-scopes.md >}}) for more details. +Dapr components can be namespaced. That means a Dapr sidecar instance can only access the components that have been deployed to the same namespace. Read [How-To: Scope components to one or more applications using namespaces]({{% ref component-scopes %}}) for more details. -Dapr provides application-level scoping for components by allowing you to specify which applications can consume specific components and deny others. Read [restricting application access to components with scopes]({{< ref "component-scopes.md#application-access-to-components-with-scopes" >}}) for more details. +Dapr provides application-level scoping for components by allowing you to specify which applications can consume specific components and deny others. Read [restricting application access to components with scopes]({{% ref "component-scopes#application-access-to-components-with-scopes" %}}) for more details. -Dapr components can use Dapr's built-in secret management capability to manage secrets. Read the [secret store overview]({{< ref secrets-overview.md >}}) and [How-To: Reference secrets in components]({{< ref component-secrets.md >}}) for more details. +Dapr components can use Dapr's built-in secret management capability to manage secrets. Read the [secret store overview]({{% ref secrets-overview %}}) and [How-To: Reference secrets in components]({{% ref component-secrets %}}) for more details. ## Bindings security @@ -173,7 +173,7 @@ By default Dapr doesn't transform the state data from applications. This means: Dapr components can use a configured authentication method to authenticate with the underlying state store. Many state store implementations use official client libraries that generally use secured communication channels with the servers. -However, application state often needs to get encrypted at rest to provide stronger security in enterprise workloads or regulated environments. Dapr provides automatic client-side state encryption based on AES256. Read [How-To: Encrypt application state]({{< ref howto-encrypt-state.md >}}) for more details. +However, application state often needs to get encrypted at rest to provide stronger security in enterprise workloads or regulated environments. Dapr provides automatic client-side state encryption based on AES256. Read [How-To: Encrypt application state]({{% ref howto-encrypt-state %}}) for more details. ## Dapr Runtime state @@ -281,8 +281,8 @@ The full report can be found [here](/docs/Dapr-july-2020-security-audit-report.p ## Reporting a security issue -Visit [this page]({{< ref support-security-issues.md >}}) to report a security issue to the Dapr maintainers. +Visit [this page]({{% ref support-security-issues %}}) to report a security issue to the Dapr maintainers. ## Related links -[Operational Security]({{< ref "security.md" >}}) +[Operational Security]({{% ref "security" %}}) diff --git a/daprdocs/content/en/concepts/terminology.md b/daprdocs/content/en/concepts/terminology.md index c75af587b0c..1c74bf22366 100644 --- a/daprdocs/content/en/concepts/terminology.md +++ b/daprdocs/content/en/concepts/terminology.md @@ -11,14 +11,14 @@ This page details all of the common terms you may come across in the Dapr docs. | Term | Definition | More information | |:-----|------------|------------------| | App/Application | A running service/binary, usually one that you as the user create and run. -| Building block | An API that Dapr provides to users to help in the creation of microservices and applications. | [Dapr building blocks]({{< ref building-blocks-concept.md >}}) -| Component | Modular types of functionality that are used either individually or with a collection of other components, by a Dapr building block. | [Dapr components]({{< ref components-concept.md >}}) -| Configuration | A YAML file declaring all of the settings for Dapr sidecars or the Dapr control plane. This is where you can configure control plane mTLS settings, or the tracing and middleware settings for an application instance. | [Dapr configuration]({{< ref configuration-concept.md >}}) -| Dapr | Distributed Application Runtime. | [Dapr overview]({{< ref overview.md >}}) -| Dapr control plane | A collection of services that are part of a Dapr installation on a hosting platform such as a Kubernetes cluster. This allows Dapr-enabled applications to run on the platform and handles Dapr capabilities such as actor placement, Dapr sidecar injection, or certificate issuance/rollover. | [Self-hosted overview]({{< ref self-hosted-overview >}})
[Kubernetes overview]({{< ref kubernetes-overview >}}) -| HTTPEndpoint | HTTPEndpoint is a Dapr resource use to identify non-Dapr endpoints to invoke via the service invocation API. | [Service invocation API]({{< ref service_invocation_api.md >}}) -| Namespacing | Namespacing in Dapr provides isolation, and thus provides multi-tenancy. | Learn more about namespacing [components]({{< ref component-scopes.md >}}), [service invocation]({{< ref service-invocation-namespaces.md >}}), [pub/sub]({{< ref pubsub-namespaces.md >}}), and [actors]({{< ref namespaced-actors.md >}}) -| Self-hosted | Windows/macOS/Linux machine(s) where you can run your applications with Dapr. Dapr provides the capability to run on machines in "self-hosted" mode. | [Self-hosted mode]({{< ref self-hosted-overview.md >}}) +| Building block | An API that Dapr provides to users to help in the creation of microservices and applications. | [Dapr building blocks]({{% ref building-blocks-concept %}}) +| Component | Modular types of functionality that are used either individually or with a collection of other components, by a Dapr building block. | [Dapr components]({{% ref components-concept %}}) +| Configuration | A YAML file declaring all of the settings for Dapr sidecars or the Dapr control plane. This is where you can configure control plane mTLS settings, or the tracing and middleware settings for an application instance. | [Dapr configuration]({{% ref configuration-concept %}}) +| Dapr | Distributed Application Runtime. | [Dapr overview]({{% ref overview %}}) +| Dapr control plane | A collection of services that are part of a Dapr installation on a hosting platform such as a Kubernetes cluster. This allows Dapr-enabled applications to run on the platform and handles Dapr capabilities such as actor placement, Dapr sidecar injection, or certificate issuance/rollover. | [Self-hosted overview]({{% ref self-hosted-overview %}})
[Kubernetes overview]({{% ref kubernetes-overview %}}) +| HTTPEndpoint | HTTPEndpoint is a Dapr resource use to identify non-Dapr endpoints to invoke via the service invocation API. | [Service invocation API]({{% ref service_invocation_api %}}) +| Namespacing | Namespacing in Dapr provides isolation, and thus provides multi-tenancy. | Learn more about namespacing [components]({{% ref component-scopes %}}), [service invocation]({{% ref service-invocation-namespaces %}}), [pub/sub]({{% ref pubsub-namespaces %}}), and [actors]({{% ref namespaced-actors %}}) +| Self-hosted | Windows/macOS/Linux machine(s) where you can run your applications with Dapr. Dapr provides the capability to run on machines in "self-hosted" mode. | [Self-hosted mode]({{% ref self-hosted-overview %}}) | Service | A running application or binary. This can refer to your application or to a Dapr application. | Sidecar | A program that runs alongside your application as a separate process or container. | [Sidecar pattern](https://docs.microsoft.com/azure/architecture/patterns/sidecar) diff --git a/daprdocs/content/en/contributing/contributing-overview.md b/daprdocs/content/en/contributing/contributing-overview.md index b786699945d..b6efb02ad3f 100644 --- a/daprdocs/content/en/contributing/contributing-overview.md +++ b/daprdocs/content/en/contributing/contributing-overview.md @@ -16,7 +16,7 @@ See the [Dapr community repository](https://github.com/dapr/community) for more Below is a list of repositories under the Dapr organization where you can contribute: -1. **Docs**: This [repository](https://github.com/dapr/docs) contains the documentation for Dapr. You can contribute by updating existing documentation, fixing errors, or adding new content to improve user experience and clarity. Please see the specific guidelines for [docs contributions]({{< ref contributing-docs >}}). +1. **Docs**: This [repository](https://github.com/dapr/docs) contains the documentation for Dapr. You can contribute by updating existing documentation, fixing errors, or adding new content to improve user experience and clarity. Please see the specific guidelines for [docs contributions]({{% ref contributing-docs %}}). 2. **Quickstarts**: The Quickstarts [repository](https://github.com/dapr/quickstarts) provides simple, step-by-step guides to help users get started with Dapr quickly. [Contributions in this repository](https://github.com/dapr/quickstarts/blob/master/CONTRIBUTING.md) involve creating new quickstarts, improving existing ones, or ensuring they stay up-to-date with the latest features. @@ -24,7 +24,7 @@ See the [Dapr community repository](https://github.com/dapr/community) for more 4. **Components-contrib**: This [repository](https://github.com/dapr/components-contrib) hosts a collection of community-contributed components for Dapr. You can contribute by adding new components, improving existing ones, or reviewing and testing contributions from the community. -5. **SDKs**: Dapr SDKs provide libraries for various programming languages to interact with Dapr. You can contribute by improving SDK functionalities, fixing bugs, or adding support for new features. Please see the [contribution guidelines]({{< ref sdk-contrib >}}) for specific SDKs. +5. **SDKs**: Dapr SDKs provide libraries for various programming languages to interact with Dapr. You can contribute by improving SDK functionalities, fixing bugs, or adding support for new features. Please see the [contribution guidelines]({{% ref sdk-contrib %}}) for specific SDKs. 6. **CLI**: Dapr cli sets up Dapr on a local dev machine or a Kubernetes cluster for launching and managing Dapr instances. Contributions to the CLI repository include adding new features, fixing bugs, improving usability, and ensuring compatibility with the latest Dapr releases. Please see the [Development Guide](https://github.com/dapr/cli/blob/master/docs/development/development.md) for help in getting started with developing the Dapr cli. @@ -52,7 +52,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]({{< ref "logs-troubleshooting.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" %}}). 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. @@ -64,12 +64,12 @@ All contributions come through pull requests. To submit a proposed change, follo 1. Make sure there's an issue (bug or proposal) raised, which sets the expectations for the contribution you are about to make. 1. Fork the relevant repo and create a new branch - - Some Dapr repos support [Codespaces]({{< ref codespaces.md >}}) to provide an instant environment for you to build and test your changes. + - Some Dapr repos support [Codespaces]({{% ref codespaces %}}) to provide an instant environment for you to build and test your changes. - See the [Developing Dapr docs](https://github.com/dapr/dapr/blob/master/docs/development/developing-dapr.md) for more information about setting up a Dapr development environment. 1. Create your change - Code changes require tests 1. Update relevant documentation for the change -1. Commit with [DCO sign-off]({{< ref "contributing-overview.md#developer-certificate-of-origin-signing-your-work" >}}) and open a PR +1. Commit with [DCO sign-off]({{% ref "contributing-overview#developer-certificate-of-origin-signing-your-work" %}}) and open a PR 1. Wait for the CI process to finish and make sure all checks are green 1. A maintainer of the project will be assigned, and you can expect a review within a few days diff --git a/daprdocs/content/en/contributing/docs-contrib/contributing-docs.md b/daprdocs/content/en/contributing/docs-contrib/contributing-docs.md index a76b023440b..459c0c1f824 100644 --- a/daprdocs/content/en/contributing/docs-contrib/contributing-docs.md +++ b/daprdocs/content/en/contributing/docs-contrib/contributing-docs.md @@ -14,7 +14,7 @@ In this guide, you'll learn how to contribute to the [Dapr docs repository](http Before contributing to the Dapr docs: -- Review the [guidance around general Dapr project contributions]({{< ref contributing-overview>}}). +- Review the [guidance around general Dapr project contributions]({{% ref contributing-overview%}}). - Install and set up your local environment with [Hugo](https://gohugo.io/) with the [Docsy](https://docsy.dev) theme. Follow the instructions in the repository [README.md](https://github.com/dapr/docs/blob/master/README.md#environment-setup). - Fork and clone the [docs repository](https://github.com/dapr/docs). @@ -66,9 +66,9 @@ Select the topic type below to view a suggested template to help you get started | Topic type | What is it? | | ---------- | ----------- | -| [Concept]({{< ref "concept-template.md" >}}) | Answers the question, "What problems does this help me solve?" Avoid repeating the API or component spec; provide more details. | -| [Quickstart]({{< ref "quickstart-template.md" >}}) | Provides a "Five minutes to _wow_" experience. Walk the reader quickly through a feature or API and how it works in a controlled example. | -| [How-to]({{< ref "howto-template.md" >}}) | Provides a detailed, practical step-by-step through a Dapr feature or technology. Encourage the reader to try with their own scenario, rather than the controlled scenario provided in a quickstart. | +| [Concept]({{% ref "concept-template" %}}) | Answers the question, "What problems does this help me solve?" Avoid repeating the API or component spec; provide more details. | +| [Quickstart]({{% ref "quickstart-template" %}}) | Provides a "Five minutes to _wow_" experience. Walk the reader quickly through a feature or API and how it works in a controlled example. | +| [How-to]({{% ref "howto-template" %}}) | Provides a detailed, practical step-by-step through a Dapr feature or technology. Encourage the reader to try with their own scenario, rather than the controlled scenario provided in a quickstart. | ## Requirements for docs.dapr.io @@ -128,13 +128,13 @@ Hugo `ref` and `relref` [shortcodes](https://gohugo.io/content-management/cross- For example, this shortcode, written inline with the rest of the markdown page, will link to the _index.md of the section/folder name: ```md -{{}} +{{%/* ref "folder" */%}} ``` While this shortcode will link to a specific page: ```md -{{}} +{{%/* ref "page" */%}} ``` All pages and folders need to have _globally unique names_ in order for the ref shortcode to work properly. If there are duplicate names, the build will break and an error will be thrown. @@ -153,7 +153,7 @@ As a general rule, the section short name is the text of the section title, all As an example, for this specific section, the complete reference to the page and section would be: ```md -{{}} +{{%/* ref "contributing-docs#referencing-sections-in-other-pages" */%}} ``` ## Shortcodes @@ -189,17 +189,17 @@ Tabs are made possible through [Hugo shortcodes](https://gohugo.io/content-manag The overall format is: ``` -{{}} +{{%/* tabpane [Tab1] [Tab2]%}} -{{% codetab %}} +{{% tab %}} [Content for Tab1] -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Content for Tab2] -{{% /codetab %}} +{{% /tab %}} -{{< /tabs */>}} +{{% /tabpane */%}} ``` All content you author will be rendered to markdown, so you can include images, code blocks, YouTube videos, and more. @@ -207,65 +207,65 @@ All content you author will be rendered to markdown, so you can include images, #### Example ```` -{{}} +{{%/* tabpane Windows Linux MacOS%}} -{{% codetab %}} +{{% tab %}} ```powershell powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash brew install dapr/tap/dapr-cli ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs */>}} +{{% /tabpane */%}} ```` This example will render to this: -{{< tabs Windows Linux MacOS>}} +{{% tabpane Windows Linux MacOS%}} -{{% codetab %}} +{{% tab %}} ```powershell powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash brew install dapr/tap/dapr-cli ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Embedded code snippets Use the `code-snippet` shortcode to reference code snippets from the `static/code` directory. ``` -{{}} +{{%/* code-snippet file="myfile.py" lang="python" */%}} ``` {{% alert title="Warning" color="warning" %}} @@ -282,7 +282,7 @@ Use the `marker` parameter to limit the embedded snipped to a portion of the sam The shortcode below and code sample: ``` -{{}} +{{%/* code-snippet file="./contributing-1.py" lang="python" marker="#SAMPLE" */%}} ``` ```python @@ -316,14 +316,14 @@ with DaprClient() as d: Will result in the following output: -{{< code-snippet file="contributing-1.py" lang="python" marker="#SAMPLE" >}} +{{% code-snippet file="contributing-1.py" lang="python" marker="#SAMPLE" %}} Use the `replace-key-[token]` and `replace-value-[token]` parameters to limit the embedded snipped to a portion of the sample file. This is useful when you want abbreviate a portion of the code sample. Multiple replacements are supported with multiple values of `token`. The shortcode below and code sample: ``` -{{}} +{{%/* code-snippet file="./contributing-2.py" lang="python" replace-key-imports="#IMPORTS" replace-value-imports="# Import statements" */%}} ``` ```python @@ -357,14 +357,14 @@ with DaprClient() as d: Will result in the following output: -{{< code-snippet file="./contributing-2.py" lang="python" replace-key-imports="#IMPORTS" replace-value-imports="# Import statements" >}} +{{% code-snippet file="./contributing-2.py" lang="python" replace-key-imports="#IMPORTS" replace-value-imports="# Import statements" %}} ### YouTube videos Hugo can automatically embed YouTube videos using a shortcode: ``` -{{}} +{{%/* youtube [VIDEO ID] */%}} ``` #### Example @@ -374,7 +374,7 @@ Given the video https://youtu.be/dQw4w9WgXcQ The shortcode would be: ``` -{{}} +{{%/* youtube dQw4w9WgXcQ */%}} ``` ### Buttons @@ -386,7 +386,7 @@ An optional "newtab" parameter will indicate if the page should open in a new ta #### Link to an external page ``` -{{}} +{{%/* button text="My Button" link="https://example.com" */%}} ``` {{< button text="My Button" link="https://example.com" >}} @@ -396,30 +396,30 @@ An optional "newtab" parameter will indicate if the page should open in a new ta You can also reference pages in your button as well: ``` -{{}} +{{%/* button text="My Button" page="contributing" newtab="true" */%}} ``` -{{< button text="My Button" page="contributing" newtab="true" >}} +{{< button text="My Button" page="contributing.md" newtab="true" >}} #### 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" */%}} ``` -{{< 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" >}} +{{% 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 @@ -463,4 +463,4 @@ Steps to add a language: ## Next steps -Get started by copying and working from one of [the Dapr doc templates]({{< ref docs-templates >}}). +Get started by copying and working from one of [the Dapr doc templates]({{% ref docs-templates %}}). diff --git a/daprdocs/content/en/contributing/docs-contrib/docs-templates/concept-template.md b/daprdocs/content/en/contributing/docs-contrib/docs-templates/concept-template.md index a7bfaa46751..6f8a91fb440 100644 --- a/daprdocs/content/en/contributing/docs-contrib/docs-templates/concept-template.md +++ b/daprdocs/content/en/contributing/docs-contrib/docs-templates/concept-template.md @@ -22,7 +22,7 @@ When naming your conceptual article, make sure it is consistent with the spec in This template is only a suggestion. Feel free to change based on your document's purpose. {{% /alert %}} -Learn more about [contributing to the Dapr docs]({{< ref contributing-docs.md >}}), like [front-matter]({{< ref "contributing-docs.md#front-matter" >}}) and [shortcodes]({{< ref "contributing-docs.md#shortcodes" >}}). +Learn more about [contributing to the Dapr docs]({{% ref contributing-docs %}}), like [front-matter]({{% ref "contributing-docs#front-matter" %}}) and [shortcodes]({{% ref "contributing-docs#shortcodes" %}}). ### Template diff --git a/daprdocs/content/en/contributing/docs-contrib/docs-templates/howto-template.md b/daprdocs/content/en/contributing/docs-contrib/docs-templates/howto-template.md index e618382672a..04bd0a18e96 100644 --- a/daprdocs/content/en/contributing/docs-contrib/docs-templates/howto-template.md +++ b/daprdocs/content/en/contributing/docs-contrib/docs-templates/howto-template.md @@ -22,7 +22,7 @@ When naming your how-to document, include the sub-directory name in the file nam This template is only a suggestion. Feel free to change based on your document's purpose. {{% /alert %}} -Learn more about [contributing to the Dapr docs]({{< ref contributing-docs.md >}}), like [front-matter]({{< ref "contributing-docs.md#front-matter" >}}) and [shortcodes]({{< ref "contributing-docs.md#shortcodes" >}}). +Learn more about [contributing to the Dapr docs]({{% ref contributing-docs %}}), like [front-matter]({{% ref "contributing-docs#front-matter" %}}) and [shortcodes]({{% ref "contributing-docs#shortcodes" %}}). ### Template diff --git a/daprdocs/content/en/contributing/docs-contrib/docs-templates/quickstart-template.md b/daprdocs/content/en/contributing/docs-contrib/docs-templates/quickstart-template.md index 761f77a7260..10fb2c3b65c 100644 --- a/daprdocs/content/en/contributing/docs-contrib/docs-templates/quickstart-template.md +++ b/daprdocs/content/en/contributing/docs-contrib/docs-templates/quickstart-template.md @@ -16,7 +16,7 @@ The quickstart instructions should be succinct, direct, and clear. The sole purp This template is only a suggestion. Feel free to change based on your document's purpose. {{% /alert %}} -Learn more about [contributing to the Dapr docs]({{< ref contributing-docs.md >}}), like [front-matter]({{< ref "contributing-docs.md#front-matter" >}}) and [shortcodes]({{< ref "contributing-docs.md#shortcodes" >}}). +Learn more about [contributing to the Dapr docs]({{% ref contributing-docs %}}), like [front-matter]({{% ref "contributing-docs#front-matter" %}}) and [shortcodes]({{% ref "contributing-docs#shortcodes" %}}). ### Template diff --git a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md index bc8a0233cc9..6d2b25385c5 100644 --- a/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md +++ b/daprdocs/content/en/contributing/docs-contrib/maintainer-guide.md @@ -8,7 +8,7 @@ description: "Get started as a Dapr docs maintainer and approver." In this guide, you’ll learn how to perform routine Dapr docs maintainer and approver responsibilities. In order to successfully accomplish these tasks, you need either approver or maintainer status in the [`dapr/docs`](https://github.com/dapr/docs) repo. -To learn how to contribute to Dapr docs, review the [Contributor guide]({{< ref contributing-docs.md >}}). +To learn how to contribute to Dapr docs, review the [Contributor guide]({{% ref contributing-docs %}}). ## Branch guidance @@ -16,7 +16,7 @@ The Dapr docs handles branching differently than most code repositories. Instead For the full list, visit the [Docs repo](https://github.com/dapr/docs#branch-guidance). -Read the [contributor's guide]({{< ref "contributing-docs.md#branch-guidance" >}}) for more information about release branches. +Read the [contributor's guide]({{% ref "contributing-docs#branch-guidance" %}}) for more information about release branches. ## Upmerge from current release branch to the pre-release branch @@ -298,7 +298,7 @@ Next, create a new website for the future Dapr release. To do this, you'll need #### Prerequisites - Docs maintainer status in the `dapr/docs` repo. - Access to the active Dapr Azure Subscription with Contributor or Owner access to create resources. -- [Azure Developer CLI](https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux&pivots=os-windows) installed on your machine. +- [Azure Developer CLI](https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd?tabpane=winget-windows%2Cbrew-mac%2Cscript-linux&pivots=os-windows) installed on your machine. - Your own fork of the [`dapr/docs` repo](https://github.com/dapr/docs) cloned to your machine. #### Deploy Azure Static Web App @@ -408,4 +408,4 @@ To bring updates to the SDK docs live to the Dapr docs site, you need to perform ## Next steps -For guidance on contributing to Dapr docs, read the [Contributor Guide]({{< ref contributing-docs.md >}}). \ No newline at end of file +For guidance on contributing to Dapr docs, read the [Contributor Guide]({{% ref contributing-docs %}}). \ No newline at end of file diff --git a/daprdocs/content/en/contributing/presentations.md b/daprdocs/content/en/contributing/presentations.md index 9ae63f1a6d9..60b2f1c4f06 100644 --- a/daprdocs/content/en/contributing/presentations.md +++ b/daprdocs/content/en/contributing/presentations.md @@ -25,7 +25,7 @@ brew install --cask font-space-grotesk ## Giving a Dapr presentation - Begin by downloading the [Dapr Presentation Decks](/presentations/dapr-slidedecks.zip). These contain slides, diagrams, and graphical assets needed to give a Dapr presentation. -- Next, review the docs to make sure you understand the [concepts]({{< ref concepts >}}). +- Next, review the docs to make sure you understand the [concepts]({{% ref concepts %}}). - Use the Dapr [quickstarts](https://github.com/dapr/quickstarts) repo to show demos of how to use Dapr. - Once you've done a Dapr presentation, claim the *Dapr Presenter* badge by adding your presentation to [this table](https://github.com/dapr/community/tree/master/presentations) in the Dapr Community repository. diff --git a/daprdocs/content/en/developing-applications/building-blocks/_index.md b/daprdocs/content/en/developing-applications/building-blocks/_index.md index c1b10bbd475..7c7956bef1d 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/_index.md @@ -6,7 +6,7 @@ weight: 10 description: "Dapr capabilities that solve common development challenges for distributed applications" --- -Get a high-level [overview of Dapr building blocks]({{< ref building-blocks-concept >}}) in the **Concepts** section. +Get a high-level [overview of Dapr building blocks]({{% ref building-blocks-concept %}}) in the **Concepts** section. Diagram showing the different Dapr API building blocks diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/_index.md b/daprdocs/content/en/developing-applications/building-blocks/actors/_index.md index b831ab6ad2a..5d79f53b580 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/_index.md @@ -8,7 +8,7 @@ description: Encapsulate code and data in reusable actor objects as a common mic {{% alert title="More about Dapr Actors" color="primary" %}} Learn more about how to use Dapr Actors: - - Try the [Actors quickstart]({{< ref actors-quickstart.md >}}). - - Explore actors via any of the [Dapr SDKs]({{< ref sdks >}}). - - Review the [Actors API reference documentation]({{< ref actors_api.md >}}). + - Try the [Actors quickstart]({{% ref actors-quickstart %}}). + - Explore actors via any of the [Dapr SDKs]({{% ref sdks %}}). + - Review the [Actors API reference documentation]({{% ref actors_api %}}). {{% /alert %}} diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/actor-reentrancy.md b/daprdocs/content/en/developing-applications/building-blocks/actors/actor-reentrancy.md index 6153860e7da..0f6d6d4ce76 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/actor-reentrancy.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/actor-reentrancy.md @@ -29,9 +29,9 @@ The `maxStackDepth` parameter sets a value that controls how many reentrant call The reentrant actor must provide the appropriate configuration. This is done by the actor's endpoint for `GET /dapr/config`, similar to other actor configuration elements. -{{< tabs ".NET" JavaScript Python Java Go >}} +{{% tabpane ".NET" JavaScript Python Java Go %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -53,9 +53,9 @@ public class Startup } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```js @@ -72,9 +72,9 @@ const clientOptions = { }; ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python @@ -100,19 +100,19 @@ def do_something_reentrant(): # invoke another actor here, reentrancy will be handled automatically return ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Here is a snippet of an actor written in Golang providing the reentrancy configuration via the HTTP API. Reentrancy has not yet been included into the Go SDK. @@ -168,9 +168,9 @@ func reentrantCallHandler(w http.ResponseWriter, r *http.Request) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Demo @@ -182,9 +182,9 @@ Watch this [video](https://www.youtube.com/watch?v=QADHQ5v-gww&list=PLcip_LgkYwz ## Next steps -{{< button text="Actors in the Dapr SDKs" page="developing-applications/sdks/#sdk-languages" >}} +{{< button text="Actors in the Dapr SDKs" page="developing-applications/sdks/_index.md#sdk-languages" >}} ## Related links -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) \ No newline at end of file +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-features-concepts.md b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-features-concepts.md index da52612980b..4434e70e627 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-features-concepts.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-features-concepts.md @@ -8,7 +8,7 @@ aliases: - "/developing-applications/building-blocks/actors/actors-background" --- -Now that you've learned about the [actor building block]({{< ref "actors-overview.md" >}}) at a high level, let's deep dive into the features and concepts included with actors in Dapr. +Now that you've learned about the [actor building block]({{% ref "actors-overview" %}}) at a high level, let's deep dive into the features and concepts included with actors in Dapr. ## Actor lifetime @@ -52,7 +52,7 @@ This simplifies some choices, but also carries some consideration: - Because actors are randomly placed, it should be expected that actor operations always require network communication, including serialization and deserialization of method call data, incurring latency and overhead. {{% alert title="Note" color="primary" %}} - Note: The Dapr actor Placement service is only used for actor placement and therefore is not needed if your services are not using Dapr actors. The Placement service can run in all [hosting environments]({{< ref hosting >}}), including self-hosted and Kubernetes. + Note: The Dapr actor Placement service is only used for actor placement and therefore is not needed if your services are not using Dapr actors. The Placement service can run in all [hosting environments]({{% ref hosting %}}), including self-hosted and Kubernetes. {{% /alert %}} ## Actor communication @@ -65,9 +65,9 @@ POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors///}}), [Java]({{< ref "java#actors" >}}), and [Python]({{< ref "python-actor" >}}). +Another, and perhaps more convenient, way of interacting with actors is via SDKs. Dapr currently supports actors SDKs in [.NET]({{% ref "dotnet-actors" %}}), [Java]({{% ref "java#actors" %}}), and [Python]({{% ref "python-actor" %}}). -Refer to [Dapr Actor Features]({{< ref howto-actors.md >}}) for more details. +Refer to [Dapr Actor Features]({{% ref howto-actors %}}) for more details. ### Concurrency @@ -81,7 +81,7 @@ Actors can deadlock on each other if there is a circular request between two act #### Reentrancy -To allow actors to "re-enter" and invoke methods on themselves, see [Actor Reentrancy]({{}}). +To allow actors to "re-enter" and invoke methods on themselves, see [Actor Reentrancy]({{%ref actor-reentrancy%}}). ### Turn-based access @@ -99,6 +99,6 @@ The following example illustrates the above concepts. Consider an actor type tha ## Related links -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) -- [How to: Use virtual actors in Dapr]({{< ref howto-actors.md >}}) \ No newline at end of file +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) +- [How to: Use virtual actors in Dapr]({{% ref howto-actors %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-overview.md b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-overview.md index 7bb1bcf0e85..e043eaa2c64 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-overview.md @@ -28,7 +28,7 @@ Every actor is defined as an instance of an actor type, identical to the way an ## Dapr actors vs. Dapr Workflow -Dapr actors builds on the state management and service invocation APIs to create stateful, long running objects with identity. [Dapr Workflow]({{< ref workflow-overview.md >}}) and Dapr Actors are related, with workflows building on actors to provide a higher level of abstraction to orchestrate a set of actors, implementing common workflow patterns and managing the lifecycle of actors on your behalf. +Dapr actors builds on the state management and service invocation APIs to create stateful, long running objects with identity. [Dapr Workflow]({{% ref workflow-overview %}}) and Dapr Actors are related, with workflows building on actors to provide a higher level of abstraction to orchestrate a set of actors, implementing common workflow patterns and managing the lifecycle of actors on your behalf. Dapr actors are designed to provide a way to encapsulate state and behavior within a distributed system. An actor can be activated on demand by a client application. When an actor is activated, it is assigned a unique identity, which allows it to maintain its state across multiple invocations. This makes actors useful for building stateful, scalable, and fault-tolerant distributed applications. @@ -48,9 +48,9 @@ Generally speaking, consider the actor pattern to model your problem or scenario ### When to use Dapr Workflow -You would use Dapr Workflow when you need to define and orchestrate complex workflows that involve multiple services and components. For example, using the [chat application example earlier]({{< ref "#when-to-use-dapr-actors" >}}), you might use Dapr Workflows to define the overall workflow of the application, such as how new users are registered, how messages are sent and received, and how the application handles errors and exceptions. +You would use Dapr Workflow when you need to define and orchestrate complex workflows that involve multiple services and components. For example, using the [chat application example earlier]({{% ref "#when-to-use-dapr-actors" %}}), you might use Dapr Workflows to define the overall workflow of the application, such as how new users are registered, how messages are sent and received, and how the application handles errors and exceptions. -[Learn more about Dapr Workflow and how to use workflows in your application.]({{< ref workflow-overview.md >}}) +[Learn more about Dapr Workflow and how to use workflows in your application.]({{% ref workflow-overview %}}) ## Actor types and actor IDs @@ -64,7 +64,7 @@ Each actor is uniquely identified by an actor ID. An actor ID can be _any_ strin Dapr supports namespaced actors. An actor type can be deployed into different namespaces. You can call instances of these actors in the same namespace. -[Learn more about namespaced actors and how they work.]({{< ref namespaced-actors.md >}}) +[Learn more about namespaced actors and how they work.]({{% ref namespaced-actors %}}) ### Actor lifetime @@ -75,13 +75,13 @@ Since Dapr actors are virtual, they do not need to be explicitly created or dest An actor's state outlives the object's lifetime, as state is stored in the configured state provider for Dapr runtime. -[Learn more about actor lifetimes.]({{< ref "actors-features-concepts.md#actor-lifetime" >}}) +[Learn more about actor lifetimes.]({{% ref "actors-features-concepts#actor-lifetime" %}}) ### Distribution and failover To provide scalability and reliability, actors instances are throughout the cluster and Dapr distributes actor instances throughout the cluster and automatically migrates them to healthy nodes. -[Learn more about Dapr actor placement.]({{< ref "actors-features-concepts.md#actor-placement-service" >}}) +[Learn more about Dapr actor placement.]({{% ref "actors-features-concepts#actor-placement-service" %}}) ### Actor communication @@ -93,18 +93,18 @@ You can invoke actor methods by calling them over HTTP, as shown in the general 1. With the cached partitioning information from the placement service, the sidecar determines which actor service instance will host actor ID **3**. The call is forwarded to the appropriate sidecar. 1. The sidecar instance in pod 2 calls the service instance to invoke the actor and execute the actor method. -[Learn more about calling actor methods.]({{< ref "actors-features-concepts.md#actor-communication" >}}) +[Learn more about calling actor methods.]({{% ref "actors-features-concepts#actor-communication" %}}) #### Concurrency The Dapr actor runtime provides a simple turn-based access model for accessing actor methods. Turn-based access greatly simplifies concurrent systems as there is no need for synchronization mechanisms for data access. -- [Learn more about actor reentrancy]({{< ref "actor-reentrancy.md" >}}) -- [Learn more about the turn-based access model]({{< ref "actors-features-concepts.md#turn-based-access" >}}) +- [Learn more about actor reentrancy]({{% ref "actor-reentrancy" %}}) +- [Learn more about the turn-based access model]({{% ref "actors-features-concepts#turn-based-access" %}}) ### State -Transactional state stores can be used to store actor state. Regardless of whether you intend to store any state in your actor, you must specify a value for property `actorStateStore` as `true` in the state store component's metadata section. Actors state is stored with a specific scheme in transactional state stores, allowing for consistent querying. Only a single state store component can be used as the state store for all actors. Read the [state API reference]({{< ref state_api.md >}}) and the [actors API reference]({{< ref actors_api.md >}}) to learn more about state stores for actors. +Transactional state stores can be used to store actor state. Regardless of whether you intend to store any state in your actor, you must specify a value for property `actorStateStore` as `true` in the state store component's metadata section. Actors state is stored with a specific scheme in transactional state stores, allowing for consistent querying. Only a single state store component can be used as the state store for all actors. Read the [state API reference]({{% ref state_api %}}) and the [actors API reference]({{% ref actors_api %}}) to learn more about state stores for actors. ### Actor timers and reminders @@ -118,9 +118,9 @@ This distinction allows users to trade off between light-weight but stateless ti -- [Learn more about actor timers.]({{< ref "actors-features-concepts.md#timers" >}}) -- [Learn more about actor reminders.]({{< ref "actors-features-concepts.md#reminders" >}}) -- [Learn more about timer and reminder error handling and failover.]({{< ref "actors-features-concepts.md#timers-and-reminders-error-handling" >}}) +- [Learn more about actor timers.]({{% ref "actors-features-concepts#timers" %}}) +- [Learn more about actor reminders.]({{% ref "actors-features-concepts#reminders" %}}) +- [Learn more about timer and reminder error handling and failover.]({{% ref "actors-features-concepts#timers-and-reminders-error-handling" %}}) ## Next steps @@ -128,5 +128,5 @@ This distinction allows users to trade off between light-weight but stateless ti ## Related links -- [Actors API reference]({{< ref actors_api.md >}}) -- Refer to the [Dapr SDK documentation and examples]({{< ref "developing-applications/sdks/#sdk-languages" >}}). +- [Actors API reference]({{% ref actors_api %}}) +- Refer to the [Dapr SDK documentation and examples]({{% ref "developing-applications/sdks/_index.md#sdk-languages" %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-runtime-config.md b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-runtime-config.md index 61a6e671f51..5faf96c1f14 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-runtime-config.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-runtime-config.md @@ -21,9 +21,9 @@ You can modify the default Dapr actor runtime behavior using the following confi ## Examples -{{< tabs ".NET" JavaScript Python Java Go >}} +{{% tabpane ".NET" JavaScript Python Java Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // In Startup.cs public void ConfigureServices(IServiceCollection services) @@ -59,11 +59,11 @@ public void ConfigureServices(IServiceCollection services) services.AddSingleton(); } ``` -[See the .NET SDK documentation on registering actors]({{< ref "dotnet-actors-usage.md#registring-actors" >}}). +[See the .NET SDK documentation on registering actors]({{% ref "dotnet-actors-usage#registring-actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -93,11 +93,11 @@ const server = new DaprServer(serverHost, serverPort, daprHost, daprPort, client const client = new DaprClient(daprHost, daprPort, CommunicationProtocolEnum.HTTP, clientOptions); ``` -[See the documentation on writing actors with the JavaScript SDK]({{< ref "js-actors.md#registering-actors" >}}). +[See the documentation on writing actors with the JavaScript SDK]({{% ref "js-actors#registering-actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -117,11 +117,11 @@ ActorRuntime.set_actor_config( ) ``` -[See the documentation on running actors with the Python SDK]({{< ref "python-actor.md" >}}) +[See the documentation on running actors with the Python SDK]({{% ref "python-actor" %}}) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -137,11 +137,11 @@ ActorRuntime.getInstance().getConfig().setActorReentrancyConfig(false, null); ActorRuntime.getInstance().getConfig().setRemindersStoragePartitions(7); ``` -[See the documentation on writing actors with the Java SDK]({{< ref "java.md#actors" >}}). +[See the documentation on writing actors with the Java SDK]({{% ref "java#actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -191,12 +191,12 @@ func configHandler(w http.ResponseWriter, r *http.Request) { [See an example for using actors with the Go SDK](https://github.com/dapr/go-sdk/tree/main/examples/actor). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- Refer to the [Dapr SDK documentation and examples]({{< ref "developing-applications/sdks/#sdk-languages" >}}). -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) +- Refer to the [Dapr SDK documentation and examples]({{% ref "developing-applications/sdks/_index.md#sdk-languages" %}}). +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-timers-reminders.md b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-timers-reminders.md index cc78f521d71..bf828b42836 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/actors-timers-reminders.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/actors-timers-reminders.md @@ -103,12 +103,12 @@ You can remove the actor timer by calling DELETE http://localhost:3500/v1.0/actors///timers/ ``` -Refer [api spec]({{< ref "actors_api.md#invoke-timer" >}}) for more details. +Refer [api spec]({{% ref "actors_api#invoke-timer" %}}) for more details. ## Actor reminders {{% alert title="Note" color="primary" %}} -In Dapr v1.15, actor reminders are stored by default in the [Scheduler service]({{< ref "scheduler.md#actor-reminders" >}}). When upgrading to Dapr v1.15 all existing reminders are automatically migrated to the Scheduler service with no loss of reminders as a one time operation for each actor type. +In Dapr v1.15, actor reminders are stored by default in the [Scheduler service]({{% ref "scheduler#actor-reminders" %}}). When upgrading to Dapr v1.15 all existing reminders are automatically migrated to the Scheduler service with no loss of reminders as a one time operation for each actor type. {{% /alert %}} Reminders are a mechanism to trigger *persistent* callbacks on an actor at specified times. Their functionality is similar to timers. But unlike timers, reminders are triggered under all circumstances until the actor explicitly unregisters them or the actor is explicitly deleted or the number in invocations is exhausted. Specifically, reminders are triggered across actor deactivations and failovers because the Dapr actor runtime persists the information about the actors' reminders using Dapr actor state provider. @@ -119,7 +119,7 @@ You can create a persistent reminder for an actor by calling the HTTP/gRPC reque POST/PUT http://localhost:3500/v1.0/actors///reminders/ ``` -The request structure for reminders is identical to those of actors. Please refer to the [actor timers examples]({{< ref "#actor-timers" >}}). +The request structure for reminders is identical to those of actors. Please refer to the [actor timers examples]({{% ref "#actor-timers" %}}). ### Retrieve actor reminder @@ -139,9 +139,9 @@ DELETE http://localhost:3500/v1.0/actors///reminders/ If an actor reminder is triggered and the app does not return a 2** code to the runtime (for example, because of a connection issue), actor reminders will be retried up to three times with a backoff interval of one second between each attempt. There may be -additional retries attempted in accordance with any optionally applied [actor resiliency policy]({{< ref "override-default-retries.md" >}}). +additional retries attempted in accordance with any optionally applied [actor resiliency policy]({{% ref "override-default-retries" %}}). -Refer [api spec]({{< ref "actors_api.md#invoke-reminder" >}}) for more details. +Refer [api spec]({{% ref "actors_api#invoke-reminder" %}}) for more details. ## Error handling @@ -192,5 +192,5 @@ To use protobuf serialization for actor reminders on self-hosted, use the follow ## Related links -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors-partitioning.md b/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors-partitioning.md index 843e656f0fd..32dacd59955 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors-partitioning.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors-partitioning.md @@ -10,12 +10,12 @@ aliases: {{% alert title="Warning" color="warning" %}} This feature is only relevant when using state store actor reminders, no longer enabled by default. -As of v1.15, Dapr uses the far more performant [Scheduler Actor Reminders]({{< ref "scheduler.md#actor-reminders" >}}) by default. -This page is only relevant if you are using the legacy state store actor reminders, enabled via setting the [`SchedulerReminders` feature flag]({{< ref "support-preview-features.md#current-preview-features" >}}) to false. +As of v1.15, Dapr uses the far more performant [Scheduler Actor Reminders]({{% ref "scheduler#actor-reminders" %}}) by default. +This page is only relevant if you are using the legacy state store actor reminders, enabled via setting the [`SchedulerReminders` feature flag]({{% ref "support-preview-features#current-preview-features" %}}) to false. It is highly recommended you use using the Scheduler Actor Reminders feature. {{% /alert %}} -[Actor reminders]({{< ref "actors-timers-reminders.md#actor-reminders" >}}) are persisted and continue to be triggered after sidecar restarts. Applications with multiple reminders registered can experience the following issues: +[Actor reminders]({{% ref "actors-timers-reminders#actor-reminders" %}}) are persisted and continue to be triggered after sidecar restarts. Applications with multiple reminders registered can experience the following issues: - Low throughput on reminders registration and de-registration - Limited number of reminders registered based on the single record size limit on the state store @@ -37,9 +37,9 @@ If you need to change the number of partitions, Dapr's sidecar will automaticall Similar to other actor configuration elements, the actor runtime provides the appropriate configuration to partition actor reminders via the actor's endpoint for `GET /dapr/config`. Select your preferred language for an actor runtime configuration example. -{{< tabs ".NET" JavaScript Python Java Go >}} +{{% tabpane ".NET" JavaScript Python Java Go %}} -{{% codetab %}} +{{% tab %}} @@ -64,11 +64,11 @@ public void ConfigureServices(IServiceCollection services) } ``` -[See the .NET SDK documentation on registering actors]({{< ref "dotnet-actors-usage.md#registring-actors" >}}). +[See the .NET SDK documentation on registering actors]({{% ref "dotnet-actors-usage#registring-actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```js @@ -96,11 +96,11 @@ await actor.registerActorReminder( await actor.unregisterActorReminder("reminder-id"); ``` -[See the documentation on writing actors with the JavaScript SDK]({{< ref "js-actors.md#registering-actors" >}}). +[See the documentation on writing actors with the JavaScript SDK]({{% ref "js-actors#registering-actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -116,11 +116,11 @@ ActorRuntime.set_actor_config( ) ``` -[See the documentation on running actors with the Python SDK]({{< ref "python-actor.md" >}}) +[See the documentation on running actors with the Python SDK]({{% ref "python-actor" %}}) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -132,11 +132,11 @@ ActorRuntime.getInstance().getConfig().setActorScanInterval(Duration.ofSeconds(3 ActorRuntime.getInstance().getConfig().setRemindersStoragePartitions(7); ``` -[See the documentation on writing actors with the Java SDK]({{< ref "java.md#actors" >}}). +[See the documentation on writing actors with the Java SDK]({{% ref "java#actors" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -167,9 +167,9 @@ func configHandler(w http.ResponseWriter, r *http.Request) { [See an example for using actors with the Go SDK](https://github.com/dapr/go-sdk/tree/main/examples/actor). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The following is an example of a valid configuration for reminder partitioning: @@ -199,5 +199,5 @@ Watch [this video for a demo of actor reminder partitioning](https://youtu.be/Zw ## Related links -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors.md b/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors.md index e0902e12c1b..2fc3bd6b69b 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/howto-actors.md @@ -18,10 +18,10 @@ POST/GET/PUT/DELETE http://localhost:3500/v1.0/actors///meth Provide data for the actor method in the request body. The response for the request, which is data from actor method call, is in the response body. -Refer [to the Actors API spec]({{< ref "actors_api.md#invoke-actor-method" >}}) for more details. +Refer [to the Actors API spec]({{% ref "actors_api#invoke-actor-method" %}}) for more details. {{% alert title="Note" color="primary" %}} -Alternatively, you can use [Dapr SDKs to use actors]({{< ref "developing-applications/sdks/#sdk-languages" >}}). +Alternatively, you can use [Dapr SDKs to use actors]({{% ref "developing-applications/sdks/#sdk-languages" %}}). {{% /alert %}} ## Save state with actors @@ -30,7 +30,7 @@ You can interact with Dapr via HTTP/gRPC endpoints to save state reliably using To use actors, your state store must support multi-item transactions. This means your state store component must implement the `TransactionalStore` interface. -[See the list of components that support transactions/actors]({{< ref supported-state-stores.md >}}). Only a single state store component can be used as the state store for all actors. +[See the list of components that support transactions/actors]({{% ref supported-state-stores %}}). Only a single state store component can be used as the state store for all actors. ## Next steps @@ -38,6 +38,6 @@ To use actors, your state store must support multi-item transactions. This means ## Related links -- Refer to the [Dapr SDK documentation and examples]({{< ref "developing-applications/sdks/#sdk-languages" >}}). -- [Actors API reference]({{< ref actors_api.md >}}) -- [Actors overview]({{< ref actors-overview.md >}}) \ No newline at end of file +- Refer to the [Dapr SDK documentation and examples]({{% ref "developing-applications/sdks/_index.md#sdk-languages" %}}). +- [Actors API reference]({{% ref actors_api %}}) +- [Actors overview]({{% ref actors-overview %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md b/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md index 5954b61a1bf..0401b87c490 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md +++ b/daprdocs/content/en/developing-applications/building-blocks/actors/namespaced-actors.md @@ -10,21 +10,21 @@ description: "Learn about namespaced actors" Namespacing in Dapr provides isolation, and thus multi-tenancy. With actor namespacing, the same actor type can be deployed into different namespaces. You can call instances of these actors in the same namespace. {{% alert title="Note" color="primary" %}} -Each namespaced actor deployment must use its own separate state store, especially if the same actor type is used across namespaces. In other words, no namespace information is written as part of the actor record, and hence separate state stores are required for each namespace. See [Configuring actor state stores for namespacing]({{< ref "#configuring-actor-state-stores-for-namespacing" >}}) section for examples. +Each namespaced actor deployment must use its own separate state store, especially if the same actor type is used across namespaces. In other words, no namespace information is written as part of the actor record, and hence separate state stores are required for each namespace. See [Configuring actor state stores for namespacing]({{% ref "#configuring-actor-state-stores-for-namespacing" %}}) section for examples. {{% /alert %}} ## Creating and configuring namespaces You can use namespaces either in self-hosted mode or on Kubernetes. -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} -In self-hosted mode, you can specify the namespace for a Dapr instance by setting [the `NAMESPACE` environment variable]({{< ref environment.md >}}). +{{% tab %}} +In self-hosted mode, you can specify the namespace for a Dapr instance by setting [the `NAMESPACE` environment variable]({{% ref environment %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, you can create and configure namepaces when deploying actor applications. For example, start with the following `kubectl` commands: ```bash @@ -34,9 +34,9 @@ kubectl config set-context --current --namespace=namespace-actorA Then, deploy your actor applications into this namespace (in the example, `namespace-actorA`). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Configuring actor state stores for namespacing @@ -113,12 +113,12 @@ auth: secretStore: ``` -Check your [state store component specs]({{< ref supported-state-stores.md >}}) to see what it provides. +Check your [state store component specs]({{% ref supported-state-stores %}}) to see what it provides. {{% alert title="Note" color="primary" %}} Namespaced actors use the multi-tenant Placement service. With this control plane service where each application deployment has its own namespace, sidecars belonging to an application in namespace "ActorA" won't receive placement information for an application in namespace "ActorB". {{% /alert %}} ## Next steps -- [Learn more about the Dapr Placement service]({{< ref placement.md >}}) -- [Placement API reference guide]({{< ref placement_api.md >}}) \ No newline at end of file +- [Learn more about the Dapr Placement service]({{% ref placement %}}) +- [Placement API reference guide]({{% ref placement_api %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/bindings/_index.md b/daprdocs/content/en/developing-applications/building-blocks/bindings/_index.md index 7281020f2a5..abf8a54ba91 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/bindings/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/bindings/_index.md @@ -9,8 +9,8 @@ description: Interface with or be triggered from external systems {{% alert title="More about Dapr Bindings" color="primary" %}} Learn more about how to use Dapr Bindings: - - Try the [Bindings quickstart]({{< ref bindings-quickstart.md >}}). - - Explore input and output bindings via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Bindings API reference documentation]({{< ref bindings_api.md >}}). - - Browse the supported [input and output bindings component specs]({{< ref supported-bindings >}}). + - Try the [Bindings quickstart]({{% ref bindings-quickstart %}}). + - Explore input and output bindings via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Bindings API reference documentation]({{% ref bindings_api %}}). + - Browse the supported [input and output bindings component specs]({{% ref supported-bindings %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/bindings/bindings-overview.md b/daprdocs/content/en/developing-applications/building-blocks/bindings/bindings-overview.md index 5df403fb7b4..96233d69a4a 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/bindings/bindings-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/bindings/bindings-overview.md @@ -29,7 +29,7 @@ In the above diagram: Bindings are developed independently of Dapr runtime. You can [view and contribute to the bindings](https://github.com/dapr/components-contrib/tree/master/bindings). {{% alert title="Note" color="primary" %}} -If you are using the HTTP Binding, then it is preferable to use [service invocation]({{< ref service_invocation_api.md >}}) instead. Read [How-To: Invoke Non-Dapr Endpoints using HTTP]({{< ref "howto-invoke-non-dapr-endpoints.md" >}}) for more information. +If you are using the HTTP Binding, then it is preferable to use [service invocation]({{% ref service_invocation_api %}}) instead. Read [How-To: Invoke Non-Dapr Endpoints using HTTP]({{% ref "howto-invoke-non-dapr-endpoints" %}}) for more information. {{% /alert %}} ## Input bindings @@ -48,11 +48,11 @@ To receive events from an input binding: - The gRPC proto library to get incoming events. {{% alert title="Note" color="primary" %}} - On startup, Dapr sends [an OPTIONS request]({{< ref "bindings_api.md#invoking-service-code-through-input-bindings" >}}) for all defined input bindings to the application. If the application wants to subscribe to the binding, Dapr expects a status code of 2xx or 405. + On startup, Dapr sends [an OPTIONS request]({{% ref "bindings_api#invoking-service-code-through-input-bindings" %}}) for all defined input bindings to the application. If the application wants to subscribe to the binding, Dapr expects a status code of 2xx or 405. {{% /alert %}} -Read the [Create an event-driven app using input bindings guide]({{< ref howto-triggers.md >}}) to get started with input bindings. +Read the [Create an event-driven app using input bindings guide]({{% ref howto-triggers %}}) to get started with input bindings. ## Output bindings @@ -72,7 +72,7 @@ To invoke an output binding: - `"delete"` - `"exec"` -Read the [Use output bindings to interface with external resources guide]({{< ref howto-bindings.md >}}) to get started with output bindings. +Read the [Use output bindings to interface with external resources guide]({{% ref howto-bindings %}}) to get started with output bindings. ## Binding directions (optional) @@ -86,7 +86,7 @@ You can provide the `direction` metadata field to indicate the direction(s) supp It is highly recommended that all input bindings should include the `direction` property. {{% /alert %}} -[See a full example of the bindings `direction` metadata.]({{< ref "bindings_api.md#binding-direction-optional" >}}) +[See a full example of the bindings `direction` metadata.]({{% ref "bindings_api#binding-direction-optional" %}}) ## Try out bindings @@ -96,17 +96,17 @@ Want to put the Dapr bindings API to the test? Walk through the following quicks | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Bindings quickstart]({{< ref bindings-quickstart.md >}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | +| [Bindings quickstart]({{% ref bindings-quickstart %}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | | [Bindings tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/bindings) | Demonstrates how to use Dapr to create input and output bindings to other components. Uses bindings to Kafka. | ### Start using bindings directly in your app -Want to skip the quickstarts? Not a problem. You can try out the bindings building block directly in your application to invoke output bindings and trigger input bindings. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the bindings API starting with [the input bindings how-to guide]({{< ref howto-triggers.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the bindings building block directly in your application to invoke output bindings and trigger input bindings. After [Dapr is installed]({{% ref "getting-started/_index.md" %}}), you can begin using the bindings API starting with [the input bindings how-to guide]({{% ref howto-triggers %}}). ## Next Steps - Follow these guides on: - - [How-To: Trigger a service from different resources with input bindings]({{< ref howto-triggers.md >}}) - - [How-To: Use output bindings to interface with external resources]({{< ref howto-bindings.md >}}) + - [How-To: Trigger a service from different resources with input bindings]({{% ref howto-triggers %}}) + - [How-To: Use output bindings to interface with external resources]({{% ref howto-bindings %}}) - Try out the [bindings tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/bindings/README.md) to experiment with binding to a Kafka queue. -- Read the [bindings API specification]({{< ref bindings_api.md >}}) \ No newline at end of file +- Read the [bindings API specification]({{% ref bindings_api %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-bindings.md b/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-bindings.md index a67fdeb96da..c64b16df88f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-bindings.md +++ b/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-bindings.md @@ -11,15 +11,15 @@ With output bindings, you can invoke external resources. An optional payload and Diagram showing bindings of example service -This guide uses a Kafka binding as an example. You can find your preferred binding spec from [the list of bindings components]({{< ref setup-bindings >}}). In this guide: +This guide uses a Kafka binding as an example. You can find your preferred binding spec from [the list of bindings components]({{% ref setup-bindings %}}). In this guide: 1. The example invokes the `/binding` endpoint with `checkout`, the name of the binding to invoke. 1. The payload goes inside the mandatory `data` field, and can be any JSON serializable value. -1. The `operation` field tells the binding what action it needs to take. For example, [the Kafka binding supports the `create` operation]({{< ref "kafka.md#binding-support" >}}). - - You can check [which operations (specific to each component) are supported for every output binding]({{< ref supported-bindings >}}). +1. The `operation` field tells the binding what action it needs to take. For example, [the Kafka binding supports the `create` operation]({{% ref "kafka#binding-support" %}}). + - You can check [which operations (specific to each component) are supported for every output binding]({{% ref supported-bindings %}}). {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the bindings quickstart]({{< ref bindings-quickstart.md >}}) for a quick walk-through on how to use the bindings API. + If you haven't already, [try out the bindings quickstart]({{% ref bindings-quickstart %}}) for a quick walk-through on how to use the bindings API. {{% /alert %}} @@ -32,11 +32,11 @@ Create a new binding component named `checkout`. Within the `metadata` section, - The topic to which you'll publish the message - The broker -When creating the binding component, [specify the supported `direction` of the binding]({{< ref "bindings_api.md#binding-direction-optional" >}}). +When creating the binding component, [specify the supported `direction` of the binding]({{% ref "bindings_api#binding-direction-optional" %}}). -{{< tabs "Self-Hosted (CLI)" Kubernetes >}} +{{% tabpane "Self-Hosted (CLI)" Kubernetes %}} -{{% codetab %}} +{{% tab %}} Use the `--resources-path` flag with `dapr run` to point to your custom resources directory. @@ -66,9 +66,9 @@ spec: value: output ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To deploy the following `binding.yaml` file into a Kubernetes cluster, run `kubectl apply -f binding.yaml`. @@ -98,17 +98,17 @@ spec: value: output ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Send an event (output binding) The code examples below leverage Dapr SDKs to invoke the output bindings endpoint on a running Dapr instance. -{{< tabs ".NET" Java Python Go JavaScript>}} +{{% tabpane ".NET" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} Here's an example of using a console app with top-level statements in .NET 6+: @@ -136,9 +136,9 @@ while (true) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -174,9 +174,9 @@ public class OrderProcessingServiceApplication { ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -202,9 +202,9 @@ while True: ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -240,9 +240,9 @@ func main() { ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -282,9 +282,9 @@ function sleep(ms) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} You can also invoke the output bindings endpoint using HTTP: @@ -300,6 +300,6 @@ Watch this [video](https://www.youtube.com/watch?v=ysklxm81MTs&feature=youtu.be& ## References -- [Binding API]({{< ref bindings_api.md >}}) -- [Binding components]({{< ref bindings >}}) -- [Binding detailed specifications]({{< ref supported-bindings >}}) +- [Binding API]({{% ref bindings_api %}}) +- [Binding components]({{% ref bindings %}}) +- [Binding detailed specifications]({{% ref supported-bindings %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-triggers.md b/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-triggers.md index 2f47547e69b..cbd079eba03 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-triggers.md +++ b/daprdocs/content/en/developing-applications/building-blocks/bindings/howto-triggers.md @@ -16,15 +16,15 @@ Input bindings are ideal for event-driven processing, data pipelines, or general Diagram showing bindings of example service -This guide uses a Kafka binding as an example. You can find your preferred binding spec from [the list of bindings components]({{< ref setup-bindings >}}). In this guide: +This guide uses a Kafka binding as an example. You can find your preferred binding spec from [the list of bindings components]({{% ref setup-bindings %}}). In this guide: 1. The example invokes the `/binding` endpoint with `checkout`, the name of the binding to invoke. 1. The payload goes inside the mandatory `data` field, and can be any JSON serializable value. -1. The `operation` field tells the binding what action it needs to take. For example, [the Kafka binding supports the `create` operation]({{< ref "kafka.md#binding-support" >}}). - - You can check [which operations (specific to each component) are supported for every output binding]({{< ref supported-bindings >}}). +1. The `operation` field tells the binding what action it needs to take. For example, [the Kafka binding supports the `create` operation]({{% ref "kafka#binding-support" %}}). + - You can check [which operations (specific to each component) are supported for every output binding]({{% ref supported-bindings %}}). {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the bindings quickstart]({{< ref bindings-quickstart.md >}}) for a quick walk-through on how to use the bindings API. + If you haven't already, [try out the bindings quickstart]({{% ref bindings-quickstart %}}) for a quick walk-through on how to use the bindings API. {{% /alert %}} @@ -37,11 +37,11 @@ Create a new binding component named `checkout`. Within the `metadata` section, - The topic to which you'll publish the message - The broker -When creating the binding component, [specify the supported `direction` of the binding]({{< ref "bindings_api.md#binding-direction-optional" >}}). +When creating the binding component, [specify the supported `direction` of the binding]({{% ref "bindings_api#binding-direction-optional" %}}). -{{< tabs "Self-Hosted (CLI)" Kubernetes >}} +{{% tabpane "Self-Hosted (CLI)" Kubernetes %}} -{{% codetab %}} +{{% tab %}} Use the `--resources-path` flag with the `dapr run` command to point to your custom resources directory. @@ -71,9 +71,9 @@ spec: value: input ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To deploy into a Kubernetes cluster, run `kubectl apply -f binding.yaml`. @@ -103,9 +103,9 @@ spec: value: input ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Listen for incoming events (input binding) @@ -115,9 +115,9 @@ Configure your application to receive incoming events. If you're using HTTP, you Below are code examples that leverage Dapr SDKs to demonstrate an input binding. -{{< tabs ".NET" Java Python Go JavaScript>}} +{{% tabpane ".NET" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} The following example demonstrates how to configure an input binding using ASP.NET Core controllers. @@ -150,9 +150,9 @@ app.MapPost("checkout", ([FromBody] int orderId) => }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -175,9 +175,9 @@ public class CheckoutServiceController { ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -196,9 +196,9 @@ app.run(6002) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -230,9 +230,9 @@ func main() { ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -265,9 +265,9 @@ async function start() { ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### ACK an event @@ -296,7 +296,7 @@ Event delivery guarantees are controlled by the binding implementation. Dependin ## References -- [Bindings building block]({{< ref bindings >}}) -- [Bindings API]({{< ref bindings_api.md >}}) -- [Components concept]({{< ref components-concept.md >}}) -- [Supported bindings]({{< ref supported-bindings >}}) +- [Bindings building block]({{% ref bindings %}}) +- [Bindings API]({{% ref bindings_api %}}) +- [Components concept]({{% ref components-concept %}}) +- [Supported bindings]({{% ref supported-bindings %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/configuration/_index.md b/daprdocs/content/en/developing-applications/building-blocks/configuration/_index.md index 3974707d05c..b1452ade25d 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/configuration/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/configuration/_index.md @@ -8,8 +8,8 @@ description: Manage and be notified of application configuration changes {{% alert title="More about Dapr Configuration" color="primary" %}} Learn more about how to use Dapr Configuration: - - Try the [Configuration quickstart]({{< ref configuration-quickstart.md >}}). - - Explore configuration via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Configuration API reference documentation]({{< ref configuration_api.md >}}). - - Browse the supported [configuration component specs]({{< ref supported-configuration-stores >}}). + - Try the [Configuration quickstart]({{% ref configuration-quickstart %}}). + - Explore configuration via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Configuration API reference documentation]({{% ref configuration_api %}}). + - Browse the supported [configuration component specs]({{% ref supported-configuration-stores %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/configuration/configuration-api-overview.md b/daprdocs/content/en/developing-applications/building-blocks/configuration/configuration-api-overview.md index 3bda0d141a9..092ff69316b 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/configuration/configuration-api-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/configuration/configuration-api-overview.md @@ -23,7 +23,7 @@ Configuration data is read-only from the application API perspective, with updat {{% alert title="Note" color="primary" %}} - The Configuration API should not be confused with the [Dapr sidecar and control plane configuration]({{< ref "configuration-overview" >}}), which is used to set policies and settings on Dapr sidecar instances or the installed Dapr control plane. + The Configuration API should not be confused with the [Dapr sidecar and control plane configuration]({{% ref "configuration-overview" %}}), which is used to set policies and settings on Dapr sidecar instances or the installed Dapr control plane. {{% /alert %}} ## Try out configuration @@ -34,11 +34,11 @@ Want to put the Dapr configuration API to the test? Walk through the following q | Quickstart | Description | | ---------- | ----------- | -| [Configuration quickstart]({{< ref configuration-quickstart.md >}}) | Get configuration items or subscribe to configuration changes using the configuration API. | +| [Configuration quickstart]({{% ref configuration-quickstart %}}) | Get configuration items or subscribe to configuration changes using the configuration API. | ### Start using the configuration API directly in your app -Want to skip the quickstarts? Not a problem. You can try out the configuration building block directly in your application to read and manage configuration data. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the configuration API starting with [the configuration how-to guide]({{< ref howto-manage-configuration.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the configuration building block directly in your application to read and manage configuration data. After [Dapr is installed]({{% ref "getting-started/_index.md" %}}), you can begin using the configuration API starting with [the configuration how-to guide]({{% ref howto-manage-configuration %}}). ## Watch the demo @@ -48,5 +48,5 @@ Watch [this demo of using the Dapr Configuration building block](https://youtu.b ## Next steps Follow these guides on: -- [How-To: Read application configuration from a configuration store]({{< ref howto-manage-configuration.md >}}) +- [How-To: Read application configuration from a configuration store]({{% ref howto-manage-configuration %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/configuration/howto-manage-configuration.md b/daprdocs/content/en/developing-applications/building-blocks/configuration/howto-manage-configuration.md index 5b663c3ea46..938988a8a77 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/configuration/howto-manage-configuration.md +++ b/daprdocs/content/en/developing-applications/building-blocks/configuration/howto-manage-configuration.md @@ -11,7 +11,7 @@ This example uses the Redis configuration store component to demonstrate how to Diagram showing get configuration of example service {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the configuration quickstart]({{< ref configuration-quickstart.md >}}) for a quick walk-through on how to use the configuration API. + If you haven't already, [try out the configuration quickstart]({{% ref configuration-quickstart %}}) for a quick walk-through on how to use the configuration API. {{% /alert %}} @@ -42,7 +42,7 @@ MSET orderId1 "101||1" orderId2 "102||1" ## Configure a Dapr configuration store -Save the following component file to the [default components folder]({{< ref "install-dapr-selfhost.md#step-5-verify-components-directory-has-been-initialized" >}}) on your machine. You can use this as the Dapr component YAML: +Save the following component file to the [default components folder]({{% ref "install-dapr-selfhost#step-5-verify-components-directory-has-been-initialized" %}}) on your machine. You can use this as the Dapr component YAML: - For Kubernetes using `kubectl`. - When running with the Dapr CLI. @@ -71,9 +71,9 @@ spec: The following example shows how to get a saved configuration item using the Dapr Configuration API. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (BASH)" "HTTP API (Powershell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (BASH)" "HTTP API (Powershell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -93,9 +93,9 @@ var configuration = await client.GetConfiguration(CONFIG_STORE_NAME, [ "orderId1 Console.WriteLine($"Got key=\n{configuration[0].Key} -> {configuration[0].Value}\n{configuration[1].Key} -> {configuration[1].Value}"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -126,9 +126,9 @@ public static void main(String[] args) throws Exception { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -143,9 +143,9 @@ with DaprClient() as d: print(f"Got key={configuration.items[0].key} value={configuration.items[0].value} version={configuration.items[0].version}") ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -173,9 +173,9 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```js import { CommunicationProtocolEnum, DaprClient } from "@dapr/dapr"; @@ -205,9 +205,9 @@ async function main() { main().catch((e) => console.error(e)); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Launch a dapr sidecar: @@ -221,9 +221,9 @@ In a separate terminal, get the configuration item saved earlier: curl http://localhost:3601/v1.0/configuration/configstore?key=orderId1 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Launch a Dapr sidecar: @@ -237,18 +237,18 @@ In a separate terminal, get the configuration item saved earlier: Invoke-RestMethod -Uri 'http://localhost:3601/v1.0/configuration/configstore?key=orderId1' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Subscribe to configuration item updates Below are code examples that leverage SDKs to subscribe to keys `[orderId1, orderId2]` using `configstore` store component. -{{< tabs ".NET" "ASP.NET Core" Java Python Go JavaScript>}} +{{% tabpane ".NET" "ASP.NET Core" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -290,9 +290,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -328,9 +328,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java import io.dapr.client.DaprClientBuilder; @@ -375,9 +375,9 @@ Navigate to the directory containing the above code, then run the following comm ```bash dapr run --app-id orderprocessing -- -- mvn spring-boot:run -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -408,9 +408,9 @@ Navigate to the directory containing the above code, then run the following com dapr run --app-id orderprocessing -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -447,9 +447,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing -- go run main.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```js import { CommunicationProtocolEnum, DaprClient } from "@dapr/dapr"; @@ -493,9 +493,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-protocol grpc --dapr-grpc-port 3500 -- node index.js ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Unsubscribe from configuration item updates @@ -504,9 +504,9 @@ After you've subscribed to watch configuration items, you will receive updates f Following are the code examples showing how you can unsubscribe to configuration updates using unsubscribe API. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (BASH)" "HTTP API (Powershell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (BASH)" "HTTP API (Powershell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -525,9 +525,9 @@ var client = app.Services.GetRequiredService(); await client.UnsubscribeConfiguration(DAPR_CONFIGURATION_STORE, SubscriptionId); Console.WriteLine("App unsubscribed from config changes"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java import io.dapr.client.DaprClientBuilder; import io.dapr.client.DaprClient; @@ -557,9 +557,9 @@ public static void main(String[] args) throws Exception { } } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python import asyncio import time @@ -571,9 +571,9 @@ with DaprClient() as d: isSuccess = d.unsubscribe_configuration(store_name='configstore', id=subscriptionID) print(f"Unsubscribed successfully? {isSuccess}", flush=True) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -603,9 +603,9 @@ func main() { } } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```js import { CommunicationProtocolEnum, DaprClient } from "@dapr/dapr"; @@ -642,22 +642,22 @@ async function main() { main().catch((e) => console.error(e)); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl 'http://localhost:/v1.0/configuration/configstore//unsubscribe' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Uri 'http://localhost:/v1.0/configuration/configstore//unsubscribe' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -* Read [configuration API overview]({{< ref configuration-api-overview.md >}}) +* Read [configuration API overview]({{% ref configuration-api-overview %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md index 138f60f27ef..251957ff23d 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/conversation-overview.md @@ -7,14 +7,14 @@ description: "Overview of the conversation API building block" --- {{% alert title="Alpha" color="primary" %}} -The conversation API is currently in [alpha]({{< ref "certification-lifecycle.md#certification-levels" >}}). +The conversation API is currently in [alpha]({{% ref "certification-lifecycle#certification-levels" %}}). {{% /alert %}} Dapr's conversation API reduces the complexity of securely and reliably interacting with Large Language Models (LLM) at scale. Whether you're a developer who doesn't have the necessary native SDKs or a polyglot shop who just wants to focus on the prompt aspects of LLM interactions, the conversation API provides one consistent API entry point to talk to underlying LLM providers. Diagram showing the flow of a user's app communicating with Dapr's LLM components. -In additon to enabling critical performance and security functionality (like [prompt caching]({{< ref "#prompt-caching" >}}) and [PII scrubbing]({{< ref "#personally-identifiable-information-pii-obfuscation" >}})), you can also pair the conversation API with Dapr functionalities, like: +In additon to enabling critical performance and security functionality (like [prompt caching]({{% ref "#prompt-caching" %}}) and [PII scrubbing]({{% ref "#personally-identifiable-information-pii-obfuscation" %}})), you can also pair the conversation API with Dapr functionalities, like: - Resiliency circuit breakers and retries to circumvent limit and token errors, or - Middleware to authenticate requests coming to and from the LLM @@ -22,7 +22,7 @@ Dapr provides observability by issuing metrics for your LLM interactions. ## Features -The following features are out-of-the-box for [all the supported conversation components]({{< ref supported-conversation >}}). +The following features are out-of-the-box for [all the supported conversation components]({{% ref supported-conversation %}}). ### Prompt caching @@ -59,13 +59,13 @@ Want to put the Dapr conversation API to the test? Walk through the following qu | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Conversation quickstart]({{< ref conversation-quickstart.md >}}) | Learn how to interact with Large Language Models (LLMs) using the conversation API. | +| [Conversation quickstart]({{% ref conversation-quickstart %}}) | Learn how to interact with Large Language Models (LLMs) using the conversation API. | ### Start using the conversation API directly in your app -Want to skip the quickstarts? Not a problem. You can try out the conversation building block directly in your application. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the conversation API starting with [the how-to guide]({{< ref howto-conversation-layer.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the conversation building block directly in your application. After [Dapr is installed]({{% ref "getting-started/_index" %}}), you can begin using the conversation API starting with [the how-to guide]({{% ref howto-conversation-layer %}}). ## Next steps -- [How-To: Converse with an LLM using the conversation API]({{< ref howto-conversation-layer.md >}}) -- [Conversation API components]({{< ref supported-conversation >}}) +- [How-To: Converse with an LLM using the conversation API]({{% ref howto-conversation-layer %}}) +- [Conversation API components]({{% ref supported-conversation %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md index 7e7fd0fb478..650f2ce3ef2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md +++ b/daprdocs/content/en/developing-applications/building-blocks/conversation/howto-conversation-layer.md @@ -7,10 +7,10 @@ description: "Learn how to abstract the complexities of interacting with large l --- {{% alert title="Alpha" color="primary" %}} -The conversation API is currently in [alpha]({{< ref "certification-lifecycle.md#certification-levels" >}}). +The conversation API is currently in [alpha]({{% ref "certification-lifecycle#certification-levels" %}}). {{% /alert %}} -Let's get started using the [conversation API]({{< ref conversation-overview.md >}}). In this guide, you'll learn how to: +Let's get started using the [conversation API]({{% ref conversation-overview %}}). In this guide, you'll learn how to: - Set up one of the available Dapr components (echo) that work with the conversation API. - Add the conversation client to your application. @@ -20,7 +20,7 @@ Let's get started using the [conversation API]({{< ref conversation-overview.md Create a new configuration file called `conversation.yaml` and save to a components or config sub-folder in your application directory. -Select your [preferred conversation component spec]({{< ref supported-conversation >}}) for your `conversation.yaml` file. +Select your [preferred conversation component spec]({{% ref supported-conversation %}}) for your `conversation.yaml` file. For this scenario, we use a simple echo component. @@ -36,7 +36,7 @@ spec: ### Use the OpenAI component -To interface with a real LLM, use one of the other [supported conversation components]({{< ref "supported-conversation" >}}), including OpenAI, Hugging Face, Anthropic, DeepSeek, and more. +To interface with a real LLM, use one of the other [supported conversation components]({{% ref "supported-conversation" %}}), including OpenAI, Hugging Face, Anthropic, DeepSeek, and more. For example, to swap out the `echo` mock component with an `OpenAI` component, replace the `conversation.yaml` file with the following. You'll need to copy your API key into the component file. @@ -56,13 +56,13 @@ spec: ## Connect the conversation client -The following examples use an HTTP client to send a POST request to Dapr's sidecar HTTP endpoint. You can also use [the Dapr SDK client instead]({{< ref "#related-links" >}}). +The following examples use an HTTP client to send a POST request to Dapr's sidecar HTTP endpoint. You can also use [the Dapr SDK client instead]({{% ref "#related-links" %}}). -{{< tabs ".NET" "Go" "Rust" >}} +{{% tabpane ".NET" "Go" "Rust" %}} -{{% codetab %}} +{{% tab %}} ```csharp using Dapr.AI.Conversation; @@ -90,10 +90,10 @@ foreach (var resp in response.Outputs) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -132,10 +132,10 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```rust use dapr::client::{ConversationInputBuilder, ConversationRequestBuilder}; @@ -170,27 +170,27 @@ async fn main() -> Result<(), Box> { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run the conversation connection Start the connection using the `dapr run` command. For example, for this scenario, we're running `dapr run` on an application with the app ID `conversation` and pointing to our conversation YAML file in the `./config` directory. -{{< tabs ".NET" "Go" "Rust" >}} +{{% tabpane ".NET" "Go" "Rust" %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resources-path ./config -- go run ./main.go @@ -202,10 +202,10 @@ dapr run --app-id conversation --dapr-grpc-port 50001 --log-level debug --resour - '== APP == conversation output: Please write a witty haiku about the Dapr distributed programming framework at dapr.io' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id=conversation --resources-path ./config --dapr-grpc-port 3500 -- cargo run --example conversation @@ -218,9 +218,9 @@ dapr run --app-id=conversation --resources-path ./config --dapr-grpc-port 3500 - - 'conversation output: hello world' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Advanced features @@ -230,40 +230,40 @@ The conversation API supports the following features: 1. **PII scrubbing:** Allows for the obfuscation of data going in and out of the LLM. -To learn how to enable these features, see the [conversation API reference guide]({{< ref conversation_api.md >}}). +To learn how to enable these features, see the [conversation API reference guide]({{% ref conversation_api %}}). ## Related links Try out the conversation API using the full examples provided in the supported SDK repos. -{{< tabs ".NET" "Go" "Rust" >}} +{{% tabpane ".NET" "Go" "Rust" %}} -{{% codetab %}} +{{% tab %}} [Dapr conversation example with the .NET SDK](https://github.com/dapr/dotnet-sdk/tree/master/examples/AI/ConversationalAI) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Dapr conversation example with the Go SDK](https://github.com/dapr/go-sdk/tree/main/examples/conversation) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Dapr conversation example with the Rust SDK](https://github.com/dapr/rust-sdk/tree/main/examples/src/conversation) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -- [Conversation API reference guide]({{< ref conversation_api.md >}}) -- [Available conversation components]({{< ref supported-conversation >}}) \ No newline at end of file +- [Conversation API reference guide]({{% ref conversation_api %}}) +- [Available conversation components]({{% ref supported-conversation %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/cryptography/_index.md b/daprdocs/content/en/developing-applications/building-blocks/cryptography/_index.md index c5bd4cac1fb..54edfdaf5de 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/cryptography/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/cryptography/_index.md @@ -8,7 +8,7 @@ description: "Perform cryptographic operations without exposing keys to your app {{% alert title="More about Dapr Cryptography" color="primary" %}} Learn more about how to use Dapr Cryptography: - - Try the [Cryptography quickstart]({{< ref cryptography-quickstart.md >}}). - - Explore cryptography via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Browse the supported [cryptography component specs]({{< ref supported-cryptography >}}). + - Try the [Cryptography quickstart]({{% ref cryptography-quickstart %}}). + - Explore cryptography via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Browse the supported [cryptography component specs]({{% ref supported-cryptography %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/cryptography/cryptography-overview.md b/daprdocs/content/en/developing-applications/building-blocks/cryptography/cryptography-overview.md index e8af63f1aaf..e8a10d207b4 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/cryptography/cryptography-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/cryptography/cryptography-overview.md @@ -67,11 +67,11 @@ Want to put the Dapr cryptography API to the test? Walk through the following qu | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Cryptography quickstart]({{< ref cryptography-quickstart.md >}}) | Encrypt and decrypt messages and large files using RSA and AES keys with the cryptography API. | +| [Cryptography quickstart]({{% ref cryptography-quickstart %}}) | Encrypt and decrypt messages and large files using RSA and AES keys with the cryptography API. | ### Start using cryptography directly in your app -Want to skip the quickstarts? Not a problem. You can try out the cryptography building block directly in your application to encrypt and decrypt your application. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the cryptography API starting with [the cryptography how-to guide]({{< ref howto-cryptography.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the cryptography building block directly in your application to encrypt and decrypt your application. After [Dapr is installed]({{% ref "getting-started/_index.md" %}}), you can begin using the cryptography API starting with [the cryptography how-to guide]({{% ref howto-cryptography %}}). ## Demo @@ -84,6 +84,6 @@ Watch this [demo video of the Cryptography API from the Dapr Community Call #83] {{< button text="Use the cryptography API >>" page="howto-cryptography.md" >}} ## Related links -- [Cryptography overview]({{< ref cryptography-overview.md >}}) -- [Cryptography component specs]({{< ref supported-cryptography >}}) -- [Cryptography API reference doc]({{< ref cryptography_api >}}) \ No newline at end of file +- [Cryptography overview]({{% ref cryptography-overview %}}) +- [Cryptography component specs]({{% ref supported-cryptography %}}) +- [Cryptography API reference doc]({{% ref cryptography_api %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/cryptography/howto-cryptography.md b/daprdocs/content/en/developing-applications/building-blocks/cryptography/howto-cryptography.md index 37923e06cc6..aeaff987bb2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/cryptography/howto-cryptography.md +++ b/daprdocs/content/en/developing-applications/building-blocks/cryptography/howto-cryptography.md @@ -6,7 +6,7 @@ weight: 2000 description: "Learn how to encrypt and decrypt files" --- -Now that you've read about [Cryptography as a Dapr building block]({{< ref cryptography-overview.md >}}), let's walk through using the cryptography APIs with the SDKs. +Now that you've read about [Cryptography as a Dapr building block]({{% ref cryptography-overview %}}), let's walk through using the cryptography APIs with the SDKs. {{% alert title="Note" color="primary" %}} Dapr cryptography is currently in alpha. @@ -15,9 +15,9 @@ Dapr cryptography is currently in alpha. ## Encrypt -{{< tabs "Python" "JavaScript" ".NET" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Go" %}} -{{% codetab %}} +{{% tab %}} @@ -47,9 +47,9 @@ def encrypt_decrypt_string(dapr: DaprClient): print(f'Encrypted the message, got {len(encrypt_bytes)} bytes') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -87,9 +87,9 @@ await pipeline( ); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Using the Dapr SDK in your project, with the gRPC APIs, you can encrypt data in a string or a byte array: @@ -107,9 +107,9 @@ var plainTextBytes = Encoding.UTF8.GetBytes(plainText); var encryptedBytesResult = await client.EncryptAsync(componentName, plaintextBytes, keyName, new EncryptionOptions(KeyWrapAlgorithm.Rsa)); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -186,16 +186,16 @@ if err != nil { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Decrypt -{{< tabs "Python" "JavaScript" ".NET" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Go" %}} -{{% codetab %}} +{{% tab %}} @@ -226,9 +226,9 @@ def encrypt_decrypt_string(dapr: DaprClient): assert message == decrypt_bytes.decode() ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -252,9 +252,9 @@ await pipeline( ); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To decrypt a string, use the 'DecryptAsync' gRPC API in your project. @@ -275,9 +275,9 @@ public async Task DecryptBytesAsync(byte[] encryptedBytes) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -292,9 +292,9 @@ out, err := sdkClient.Decrypt(context.Background(), rf, dapr.EncryptOptions{ }) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -[Cryptography component specs]({{< ref supported-cryptography >}}) \ No newline at end of file +[Cryptography component specs]({{% ref supported-cryptography %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/_index.md b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/_index.md index 9b99245089b..41766db9b6e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/_index.md @@ -8,7 +8,7 @@ description: Distributed locks provide mutually exclusive access to shared resou {{% alert title="More about Dapr Distributed Lock" color="primary" %}} Learn more about how to use Dapr Distributed Lock: - - Explore distributed locks via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Distributed Lock API reference documentation]({{< ref distributed_lock_api.md >}}). - - Browse the supported [distributed locks component specs]({{< ref supported-locks >}}). + - Explore distributed locks via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Distributed Lock API reference documentation]({{% ref distributed_lock_api %}}). + - Browse the supported [distributed locks component specs]({{% ref supported-locks %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview.md b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview.md index b2049ce6681..15d55d6a944 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/distributed-lock-api-overview.md @@ -18,7 +18,7 @@ Each lock has a name. The application determines the resources that the named lo For example, in the competing consumer pattern, multiple instances of an application access a queue. You can decide that you want to lock the queue while the application is running its business logic. -In the diagram below, two instances of the same application, `App1`, use the [Redis lock component]({{< ref redis-lock >}}) to take a lock on a shared resource. +In the diagram below, two instances of the same application, `App1`, use the [Redis lock component]({{% ref redis-lock %}}) to take a lock on a shared resource. - The first app instance acquires the named lock and gets exclusive access. - The second app instance is unable to acquire the lock and therefore is not allowed to access the resource until the lock is released, either: @@ -47,5 +47,5 @@ Watch [this video for an overview of the distributed lock API](https://youtu.be/ ## Next steps Follow these guides on: -- [How-To: Use distributed locks in your application]({{< ref howto-use-distributed-lock.md >}}) +- [How-To: Use distributed locks in your application]({{% ref howto-use-distributed-lock %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md index 5165e5af05d..e7bba6b98de 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md +++ b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md @@ -22,7 +22,7 @@ The diagram below shows two instances of different applications, acquiring diffe ### Configure a lock component -Save the following component file to the [default components folder]({{< ref "install-dapr-selfhost.md#step-5-verify-components-directory-has-been-initialized" >}}) on your machine. +Save the following component file to the [default components folder]({{% ref "install-dapr-selfhost#step-5-verify-components-directory-has-been-initialized" %}}) on your machine. ```yaml apiVersion: dapr.io/v1alpha1 @@ -41,9 +41,9 @@ spec: ### Acquire lock -{{< tabs HTTP ".NET" Go >}} +{{% tabpane HTTP ".NET" Go %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3500/v1.0-alpha1/lock/lockstore @@ -51,9 +51,9 @@ curl -X POST http://localhost:3500/v1.0-alpha1/lock/lockstore -d '{"resourceId":"my_file_name", "lockOwner":"random_id_abc123", "expiryInSeconds": 60}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -86,9 +86,9 @@ namespace LockService } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -116,15 +116,15 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Unlock existing lock -{{< tabs HTTP ".NET" Go >}} +{{% tabpane HTTP ".NET" Go %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3500/v1.0-alpha1/unlock/lockstore @@ -132,9 +132,9 @@ curl -X POST http://localhost:3500/v1.0-alpha1/unlock/lockstore -d '{"resourceId":"my_file_name", "lockOwner":"random_id_abc123"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -156,9 +156,9 @@ namespace LockService } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -185,10 +185,10 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -Read [the distributed lock API overview]({{< ref distributed-lock-api-overview.md >}}) to learn more. \ No newline at end of file +Read [the distributed lock API overview]({{% ref distributed-lock-api-overview %}}) to learn more. \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md b/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md index 3624cfb5af9..0cf7f532179 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md +++ b/daprdocs/content/en/developing-applications/building-blocks/jobs/howto-schedule-and-handle-triggered-jobs.md @@ -6,7 +6,7 @@ weight: 5000 description: "Learn how to use the jobs API to schedule and handle triggered jobs" --- -Now that you've learned what the [jobs building block]({{< ref jobs-overview.md >}}) provides, let's look at an example of how to use the API. The code example below describes an application that schedules jobs for a database backup application and handles them at trigger time, also known as the time the job was sent back to the application because it reached it's dueTime. +Now that you've learned what the [jobs building block]({{% ref jobs-overview %}}) provides, let's look at an example of how to use the API. The code example below describes an application that schedules jobs for a database backup application and handles them at trigger time, also known as the time the job was sent back to the application because it reached it's dueTime. @@ -116,9 +116,9 @@ await daprJobsClient.ScheduleJobAsync("prod-db-backup", DaprJobSchedule.FromDura serializedJobData, repeats: 10); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -221,17 +221,17 @@ func prodDBBackupHandler(ctx context.Context, job *common.JobEvent) error { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run the Dapr sidecar Once you've set up the Jobs API in your application, in a terminal window run the Dapr sidecar with the following command. -{{< tabs "Go" >}} +{{% tabpane "Go" %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id=distributed-scheduler \ @@ -243,12 +243,12 @@ dapr run --app-id=distributed-scheduler \ go run ./main.go ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -- [Learn more about the Scheduler control plane service]({{< ref "concepts/dapr-services/scheduler.md" >}}) -- [Jobs API reference]({{< ref jobs_api.md >}}) +- [Learn more about the Scheduler control plane service]({{% ref "concepts/dapr-services/scheduler" %}}) +- [Jobs API reference]({{% ref jobs_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-features-concepts.md b/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-features-concepts.md index 0d528f2c03b..e8655a5ceb7 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-features-concepts.md +++ b/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-features-concepts.md @@ -6,7 +6,7 @@ weight: 2000 description: "Learn more about the Dapr Jobs features and concepts" --- -Now that you've learned about the [jobs building block]({{< ref jobs-overview.md >}}) at a high level, let's deep dive +Now that you've learned about the [jobs building block]({{% ref jobs-overview %}}) at a high level, let's deep dive into the features and concepts included with Dapr Jobs and the various SDKs. Dapr Jobs: - Provides a robust and scalable API for scheduling operations to be triggered in the future. - Exposes several capabilities which are common across all supported languages. diff --git a/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-overview.md b/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-overview.md index 688b30b0420..661eb779cc7 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/jobs/jobs-overview.md @@ -11,10 +11,10 @@ Many applications require job scheduling, or the need to take an action in the f Not only does the jobs API help you with scheduling jobs, but internally, Dapr uses the Scheduler service to schedule actor reminders. Jobs in Dapr consist of: -- [The jobs API building block]({{< ref jobs_api.md >}}) -- [The Scheduler control plane service]({{< ref "concepts/dapr-services/scheduler.md" >}}) +- [The jobs API building block]({{% ref jobs_api %}}) +- [The Scheduler control plane service]({{% ref "concepts/dapr-services/scheduler" %}}) -[See example scenarios.]({{< ref "#scenarios" >}}) +[See example scenarios.]({{% ref "#scenarios" %}}) Diagram showing the Scheduler control plane service and the jobs API @@ -27,8 +27,8 @@ The jobs API is a job scheduler, not the executor which runs the job. The design All job details and user-associated data for scheduled jobs are stored in an embedded Etcd database in the Scheduler service. You can use jobs to: -- **Delay your [pub/sub messaging]({{< ref pubsub-overview.md >}}).** You can publish a message in a future specific time (for example: a week from today, or a specific UTC date/time). -- **Schedule [service invocation]({{< ref service-invocation-overview.md >}}) method calls between applications.** +- **Delay your [pub/sub messaging]({{% ref pubsub-overview %}}).** You can publish a message in a future specific time (for example: a week from today, or a specific UTC date/time). +- **Schedule [service invocation]({{% ref service-invocation-overview %}}) method calls between applications.** ## Scenarios @@ -63,10 +63,10 @@ The Scheduler service enables the scheduling of jobs to scale across multiple re ## Try out the jobs API -You can try out the jobs API in your application. After [Dapr is installed]({{< ref install-dapr-cli.md >}}), you can begin using the jobs API, starting with [the How-to: Schedule jobs guide]({{< ref howto-schedule-and-handle-triggered-jobs.md >}}). +You can try out the jobs API in your application. After [Dapr is installed]({{% ref install-dapr-cli %}}), you can begin using the jobs API, starting with [the How-to: Schedule jobs guide]({{% ref howto-schedule-and-handle-triggered-jobs %}}). ## Next steps -- [Learn how to use the jobs API]({{< ref howto-schedule-and-handle-triggered-jobs.md >}}) -- [Learn more about the Scheduler control plane service]({{< ref "concepts/dapr-services/scheduler.md" >}}) -- [Jobs API reference]({{< ref jobs_api.md >}}) +- [Learn how to use the jobs API]({{% ref howto-schedule-and-handle-triggered-jobs %}}) +- [Learn more about the Scheduler control plane service]({{% ref "concepts/dapr-services/scheduler" %}}) +- [Jobs API reference]({{% ref jobs_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/_index.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/_index.md index e3af831aa8b..ef1cfabf821 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/_index.md @@ -8,8 +8,8 @@ description: Secure, scalable messaging between services {{% alert title="More about Dapr Pub/sub" color="primary" %}} Learn more about how to use Dapr Pub/sub: - - Try the [Pub/sub quickstart]({{< ref pubsub-quickstart.md >}}). - - Explore pub/sub via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Pub/sub API reference documentation]({{< ref pubsub_api.md >}}). - - Browse the supported [pub/sub component specs]({{< ref supported-pubsub >}}). + - Try the [Pub/sub quickstart]({{% ref pubsub-quickstart %}}). + - Explore pub/sub via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Pub/sub API reference documentation]({{% ref pubsub_api %}}). + - Browse the supported [pub/sub component specs]({{% ref supported-pubsub %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-namespace.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-namespace.md index 4e86fdbf21d..5fb4e9b3352 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-namespace.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-namespace.md @@ -6,7 +6,7 @@ weight: 5000 description: "Learn how to use the metadata-based namespace consumer group in your component" --- -You've set up [Dapr's pub/sub API building block]({{< ref pubsub-overview >}}), and your applications are publishing and subscribing to topics smoothly, using a centralized message broker. What if you'd like to perform simple A/B testing, blue/green deployments, or even canary deployments for your applications? Even with using Dapr, this can prove difficult. +You've set up [Dapr's pub/sub API building block]({{% ref pubsub-overview %}}), and your applications are publishing and subscribing to topics smoothly, using a centralized message broker. What if you'd like to perform simple A/B testing, blue/green deployments, or even canary deployments for your applications? Even with using Dapr, this can prove difficult. Dapr solves multi-tenancy at-scale with its pub/sub namespace consumer groups construct. @@ -71,4 +71,4 @@ Watch [this video for an overview on pub/sub multi-tenancy](https://youtu.be/eK4 ## Next steps -- Learn more about configuring Pub/Sub components with multiple namespaces [pub/sub namespaces]({{< ref pubsub-namespaces >}}). \ No newline at end of file +- Learn more about configuring Pub/Sub components with multiple namespaces [pub/sub namespaces]({{% ref pubsub-namespaces %}}). \ No newline at end of file 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 1778b7716aa..d16466d6d7b 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 @@ -14,12 +14,12 @@ Now that you've learned what the Dapr pub/sub building block provides, learn how Diagram showing state management of example service -Dapr automatically wraps the user payload in a CloudEvents v1.0 compliant envelope, using `Content-Type` header value for `datacontenttype` attribute. [Learn more about messages with CloudEvents.]({{< ref pubsub-cloudevents.md >}}) +Dapr automatically wraps the user payload in a CloudEvents v1.0 compliant envelope, using `Content-Type` header value for `datacontenttype` attribute. [Learn more about messages with CloudEvents.]({{% ref pubsub-cloudevents %}}) The following example demonstrates how your applications publish and subscribe to a topic called `orders`. {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the pub/sub quickstart]({{< ref pubsub-quickstart.md >}}) for a quick walk-through on how to use pub/sub. + If you haven't already, [try out the pub/sub quickstart]({{% ref pubsub-quickstart %}}) for a quick walk-through on how to use pub/sub. {{% /alert %}} @@ -27,9 +27,9 @@ The following example demonstrates how your applications publish and subscribe t The first step is to set up the pub/sub component: -{{< tabs "Self-Hosted (CLI)" Kubernetes >}} +{{% tabpane "Self-Hosted (CLI)" Kubernetes %}} -{{% codetab %}} +{{% tab %}} When you run `dapr init`, Dapr creates a default Redis `pubsub.yaml` and runs a Redis container on your local machine, located: - On Windows, under `%UserProfile%\.dapr\components\pubsub.yaml` @@ -63,55 +63,55 @@ scopes: - checkout ``` -You can override this file with another [pubsub component]({{< ref setup-pubsub >}}) by creating a components directory (in this example, `myComponents`) containing the file and using the flag `--resources-path` with the `dapr run` CLI command. +You can override this file with another [pubsub component]({{% ref setup-pubsub %}}) by creating a components directory (in this example, `myComponents`) containing the file and using the flag `--resources-path` with the `dapr run` CLI command. -{{< tabs ".NET" Java Python Go JavaScript >}} +{{% tabpane ".NET" Java Python Go JavaScript %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- python3 app.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- go run app.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} -To deploy this into a Kubernetes cluster, fill in the `metadata` connection details of the [pub/sub component]({{< ref setup-pubsub >}}) in the YAML below, save as `pubsub.yaml`, and run `kubectl apply -f pubsub.yaml`. +{{% tab %}} +To deploy this into a Kubernetes cluster, fill in the `metadata` connection details of the [pub/sub component]({{% ref setup-pubsub %}}) in the YAML below, save as `pubsub.yaml`, and run `kubectl apply -f pubsub.yaml`. ```yaml apiVersion: dapr.io/v1alpha1 @@ -147,9 +147,9 @@ scopes: - checkout ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Subscribe to topics @@ -159,7 +159,7 @@ Dapr provides three methods by which you can subscribe to topics: - **Streaming**, where subscriptions are defined in user code. - **Programmatically**, where subscriptions are defined in user code. -Learn more in the [declarative, streaming, and programmatic subscriptions doc]({{< ref subscription-methods.md >}}). This example demonstrates a **declarative** subscription. +Learn more in the [declarative, streaming, and programmatic subscriptions doc]({{% ref subscription-methods %}}). This example demonstrates a **declarative** subscription. Create a file named `subscription.yaml` and paste the following: @@ -188,15 +188,15 @@ Place `subscription.yaml` in the same directory as your `pubsub.yaml` component. {{% alert title="Note" color="primary" %}} This feature is currently in preview. Dapr can be made to "hot reload" declarative subscriptions, whereby updates are picked up automatically without needing a restart. -This is enabled by via the [`HotReload` feature gate]({{< ref "support-preview-features.md" >}}). +This is enabled by via the [`HotReload` feature gate]({{% ref "support-preview-features" %}}). To prevent reprocessing or loss of unprocessed messages, in-flight messages between Dapr and your application are unaffected during hot reload events. {{% /alert %}} Below are code examples that leverage Dapr SDKs to subscribe to the topic you defined in `subscription.yaml`. -{{< tabs ".NET" Java Python Go JavaScript>}} +{{% tabpane ".NET" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} ```csharp using System.Collections.Generic; @@ -227,9 +227,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id checkout --app-port 6002 --dapr-http-port 3602 --dapr-grpc-port 60002 --app-protocol https dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -267,9 +267,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id checkout --app-port 6002 --dapr-http-port 3602 --dapr-grpc-port 60002 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -296,9 +296,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id checkout --app-port 6002 --dapr-http-port 3602 --app-protocol grpc -- python3 CheckoutService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -341,9 +341,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id checkout --app-port 6002 --dapr-http-port 3602 --dapr-grpc-port 60002 go run CheckoutService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -383,9 +383,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id checkout --app-port 6002 --dapr-http-port 3602 --dapr-grpc-port 60002 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Publish a message @@ -397,39 +397,39 @@ dapr run --app-id orderprocessing --dapr-http-port 3601 Then publish a message to the `orders` topic: -{{< tabs "Dapr CLI" "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane "Dapr CLI" "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```bash dapr publish --publish-app-id orderprocessing --pubsub order-pub-sub --topic orders --data '{"orderId": "100"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3601/v1.0/publish/order-pub-sub/orders -H "Content-Type: application/json" -d '{"orderId": "100"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"orderId": "100"}' -Uri 'http://localhost:3601/v1.0/publish/order-pub-sub/orders' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Below are code examples that leverage Dapr SDKs to publish a topic. -{{< tabs ".NET" Java Python Go JavaScript>}} +{{% tabpane ".NET" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -469,9 +469,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 --app-protocol https dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -519,9 +519,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -556,9 +556,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --app-protocol grpc python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -604,9 +604,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run OrderProcessingService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -651,9 +651,9 @@ Navigate to the directory containing the above code, then run the following comm dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Message acknowledgement and retries @@ -668,6 +668,6 @@ Watch [this demo video](https://youtu.be/1dqe1k-FXJQ?si=s3gvWxRxeOsmXuE1) to lea ## Next steps - Try the [pub/sub tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub). -- Learn about [messaging with CloudEvents]({{< ref pubsub-cloudevents.md >}}) and when you might want to [send messages without CloudEvents]({{< ref pubsub-raw.md >}}). -- Review the list of [pub/sub components]({{< ref setup-pubsub >}}). -- Read the [API reference]({{< ref pubsub_api.md >}}). +- Learn about [messaging with CloudEvents]({{% ref pubsub-cloudevents %}}) and when you might want to [send messages without CloudEvents]({{% ref pubsub-raw %}}). +- Review the list of [pub/sub components]({{% ref setup-pubsub %}}). +- Read the [API reference]({{% ref pubsub_api %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-route-messages.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-route-messages.md index 487a7badcb4..0248c33795f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-route-messages.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-route-messages.md @@ -10,7 +10,7 @@ Pub/sub routing is an implementation of [content-based routing](https://www.ente While routing can be implemented with code, keeping routing rules external from the application can improve portability. -This feature is available to both the [declarative and programmatic subscription approaches]({{< ref subscription-methods.md >}}), however does not apply to streaming subscriptions. +This feature is available to both the [declarative and programmatic subscription approaches]({{% ref subscription-methods %}}), however does not apply to streaming subscriptions. ## Declarative subscription @@ -40,9 +40,9 @@ scopes: In the programmatic approach, the `routes` structure is returned instead of `route`. The JSON structure matches the declarative YAML: -{{< tabs Python JavaScript ".NET" Go PHP>}} +{{% tabpane Python JavaScript ".NET" Go PHP%}} -{{% codetab %}} +{{% tab %}} ```python import flask from flask import request, jsonify @@ -82,9 +82,9 @@ def ds_subscriber(): app.run() ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript const express = require('express') const bodyParser = require('body-parser') @@ -122,9 +122,9 @@ app.post('/products', (req, res) => { app.listen(port, () => console.log(`consumer app listening on port ${port}!`)) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp [Topic("pubsub", "inventory", "event.type ==\"widget\"", 1)] [HttpPost("widgets")] @@ -150,9 +150,9 @@ app.listen(port, () => console.log(`consumer app listening on port ${port}!`)) return stock; } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```golang package main @@ -216,9 +216,9 @@ func main() { log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", appPort), router)) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```php post('/products', function( ); $app->start(); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Common Expression Language (CEL) @@ -255,7 +255,7 @@ In these examples, depending on the `event.type`, the application will be called - `/gadgets` - `/products` -The expressions are written as [Common Expression Language (CEL)](https://github.com/google/cel-spec) where `event` represents the cloud event. Any of the attributes from the [CloudEvents core specification](https://github.com/cloudevents/spec/blob/v1.0.1/spec.md#required-attributes) can be referenced in the expression. +The expressions are written as [Common Expression Language (CEL)](https://github.com/google/cel-spec) where `event` represents the cloud event. Any of the attributes from the [CloudEvents core specification](https://github.com/cloudevents/spec/blob/v1.0.1/spec#required-attributes) can be referenced in the expression. ### Example expressions @@ -271,7 +271,7 @@ Match deposits greater than $10,000: event.type == "deposit" && int(event.data.amount) > 10000 ``` {{% alert title="Note" color="primary" %}} -By default the numeric values ​​are written as double-precision floating-point. There are no automatic arithmetic conversions for numeric values. In this case, if `event.data.amount` is not cast as integer, the match is not performed. For more information, see the [CEL documentation](https://github.com/google/cel-spec/blob/master/doc/langdef.md). +By default the numeric values ​​are written as double-precision floating-point. There are no automatic arithmetic conversions for numeric values. In this case, if `event.data.amount` is not cast as integer, the match is not performed. For more information, see the [CEL documentation](https://github.com/google/cel-spec/blob/master/doc/langdef). {{% /alert %}} Match multiple versions of a message: @@ -456,7 +456,7 @@ Watch [this video](https://www.youtube.com/watch?v=QqJgRmbH82I&t=1063s) on how t ## Next steps - Try the [pub/sub routing sample](https://github.com/dapr/samples/tree/master/pub-sub-routing). -- Learn about [topic scoping]({{< ref pubsub-scopes.md >}}) and [message time-to-live]({{< ref pubsub-message-ttl.md >}}). -- [Configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}). -- Review the list of [pub/sub components]({{< ref setup-pubsub >}}). -- Read the [API reference]({{< ref pubsub_api.md >}}). +- Learn about [topic scoping]({{% ref pubsub-scopes %}}) and [message time-to-live]({{% ref pubsub-message-ttl %}}). +- [Configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}). +- Review the list of [pub/sub components]({{% ref setup-pubsub %}}). +- Read the [API reference]({{% ref pubsub_api %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-subscribe-statefulset.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-subscribe-statefulset.md index 9e7b914e8c8..77db82331bc 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-subscribe-statefulset.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-subscribe-statefulset.md @@ -89,6 +89,6 @@ spec: ## Next steps - Try the [pub/sub tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub). -- Learn about [messaging with CloudEvents]({{< ref pubsub-cloudevents.md >}}) and when you might want to [send messages without CloudEvents]({{< ref pubsub-raw.md >}}). -- Review the list of [pub/sub components]({{< ref setup-pubsub >}}). -- Read the [API reference]({{< ref pubsub_api.md >}}). +- Learn about [messaging with CloudEvents]({{% ref pubsub-cloudevents %}}) and when you might want to [send messages without CloudEvents]({{% ref pubsub-raw %}}). +- Review the list of [pub/sub components]({{% ref setup-pubsub %}}). +- Read the [API reference]({{% ref pubsub_api %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-bulk.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-bulk.md index 5131d9080d4..cf900f339e2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-bulk.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-bulk.md @@ -22,9 +22,9 @@ The bulk publish operation also does not guarantee any ordering of messages. ### Example -{{< tabs Java JavaScript ".NET" Python Go "HTTP API (Bash)" "HTTP API (PowerShell)" >}} +{{% tabpane Java JavaScript ".NET" Python Go "HTTP API (Bash)" "HTTP API (PowerShell)" %}} -{{% codetab %}} +{{% tab %}} ```java import io.dapr.client.DaprClientBuilder; @@ -54,9 +54,9 @@ class BulkPublisher { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```typescript @@ -105,9 +105,9 @@ start().catch((e) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -143,9 +143,9 @@ else } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python import requests @@ -173,9 +173,9 @@ response = requests.post(base_url.format(pubsub_name, topic_name), json=payload) print(response.status_code) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -220,9 +220,9 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3500/v1.0-alpha1/publish/bulk/my-pubsub-name/topic-a \ @@ -243,9 +243,9 @@ curl -X POST http://localhost:3500/v1.0-alpha1/publish/bulk/my-pubsub-name/topic ]' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -Uri 'http://localhost:3500/v1.0-alpha1/publish/bulk/my-pubsub-name/topic-a' ` @@ -265,14 +265,14 @@ Invoke-RestMethod -Method Post -ContentType 'application/json' -Uri 'http://loca ]' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Subscribing messages in bulk The bulk subscribe API allows you to subscribe multiple messages from a topic in a single request. -As we know from [How to: Publish & Subscribe to topics]({{< ref howto-publish-subscribe.md >}}), there are three ways to subscribe to topic(s): +As we know from [How to: Publish & Subscribe to topics]({{% ref howto-publish-subscribe %}}), there are three ways to subscribe to topic(s): - **Declaratively** - subscriptions are defined in an external file. - **Programmatically** - subscriptions are defined in code. @@ -302,10 +302,10 @@ scopes: In the example above, `bulkSubscribe` is _optional_. If you use `bulkSubscribe`, then: - `enabled` is mandatory and enables or disables bulk subscriptions on this topic - You can optionally configure the max number of messages (`maxMessagesCount`) delivered in a bulk message. -Default value of `maxMessagesCount` for components not supporting bulk subscribe is 100 i.e. for default bulk events between App and Dapr. Please refer [How components handle publishing and subscribing to bulk messages]({{< ref pubsub-bulk >}}). +Default value of `maxMessagesCount` for components not supporting bulk subscribe is 100 i.e. for default bulk events between App and Dapr. Please refer [How components handle publishing and subscribing to bulk messages]({{% ref pubsub-bulk %}}). If a component supports bulk subscribe, then default value for this parameter can be found in that component doc. - You can optionally provide the max duration to wait (`maxAwaitDurationMs`) before a bulk message is sent to the app. -Default value of `maxAwaitDurationMs` for components not supporting bulk subscribe is 1000 i.e. for default bulk events between App and Dapr. Please refer [How components handle publishing and subscribing to bulk messages]({{< ref pubsub-bulk >}}). +Default value of `maxAwaitDurationMs` for components not supporting bulk subscribe is 1000 i.e. for default bulk events between App and Dapr. Please refer [How components handle publishing and subscribing to bulk messages]({{% ref pubsub-bulk %}}). If a component supports bulk subscribe, then default value for this parameter can be found in that component doc. The application receives an `EntryId` associated with each entry (individual message) in the bulk message. This `EntryId` must be used by the app to communicate the status of that particular entry. If the app fails to notify on an `EntryId` status, it's considered a `RETRY`. @@ -336,14 +336,14 @@ Status | Description `RETRY` | Message to be retried by Dapr `DROP` | Warning is logged and message is dropped -Refer to [Expected HTTP Response for Bulk Subscribe]({{< ref pubsub_api.md >}}) for further insights on response. +Refer to [Expected HTTP Response for Bulk Subscribe]({{% ref pubsub_api %}}) for further insights on response. ### Example The following code examples demonstrate how to use Bulk Subscribe. -{{< tabs "Java" "JavaScript" ".NET" "Python" >}} -{{% codetab %}} +{{% tabpane "Java" "JavaScript" ".NET" "Python" %}} +{{% tab %}} ```java import io.dapr.Topic; @@ -383,9 +383,9 @@ class BulkSubscriber { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```typescript @@ -418,9 +418,9 @@ async function start() { ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using Microsoft.AspNetCore.Mvc; @@ -468,9 +468,9 @@ public class BulkMessageController : ControllerBase } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Currently, you can only bulk subscribe in Python using an HTTP client. ```python @@ -510,9 +510,9 @@ if __name__ == '__main__': ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## How components handle publishing and subscribing to bulk messages @@ -550,5 +550,5 @@ Watch the following demos and presentations about bulk pub/sub. ## Related links -- List of [supported pub/sub components]({{< ref supported-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) +- List of [supported pub/sub components]({{% ref supported-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-cloudevents.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-cloudevents.md index 72d8e8a256f..c1cf4d9fb00 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-cloudevents.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-cloudevents.md @@ -6,7 +6,7 @@ weight: 2100 description: "Learn why Dapr uses CloudEvents, how they work in Dapr pub/sub, and how to create CloudEvents." --- -To enable message routing and provide additional context with each message, Dapr uses the [CloudEvents 1.0 specification](https://github.com/cloudevents/spec/tree/v1.0) as its message format. Any message sent by an application to a topic using Dapr is automatically wrapped in a CloudEvents envelope, using the [`Content-Type` header value]({{< ref "pubsub-overview.md#content-types" >}}) for `datacontenttype` attribute. +To enable message routing and provide additional context with each message, Dapr uses the [CloudEvents 1.0 specification](https://github.com/cloudevents/spec/tree/v1.0) as its message format. Any message sent by an application to a topic using Dapr is automatically wrapped in a CloudEvents envelope, using the [`Content-Type` header value]({{% ref "pubsub-overview#content-types" %}}) for `datacontenttype` attribute. Dapr uses CloudEvents to provide additional context to the event payload, enabling features like: @@ -93,11 +93,11 @@ The ability to replace CloudEvents properties using these metadata properties ap ### Example -For example, to replace the `source` and `id` values from [the CloudEvent example above]({{< ref "#cloudevents-example" >}}) in code: +For example, to replace the `source` and `id` values from [the CloudEvent example above]({{% ref "#cloudevents-example" %}}) in code: -{{< tabs "Python" ".NET" >}} +{{% tabpane "Python" ".NET" %}} -{{% codetab %}} +{{% tab %}} ```python with DaprClient() as client: @@ -130,10 +130,10 @@ with DaprClient() as client: ) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp var order = new Order(i); @@ -152,9 +152,9 @@ Console.WriteLine("Published data: " + order); await Task.Delay(TimeSpan.FromSeconds(1)); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The JSON payload then reflects the new `source` and `id` values: @@ -180,14 +180,14 @@ The JSON payload then reflects the new `source` and `id` values: ``` {{% alert title="Important" color="warning" %}} -While you can replace `traceid`/`traceparent` and `tracestate`, doing this may interfere with tracing events and report inconsistent results in tracing tools. It's recommended to use Open Telemetry for distributed traces. [Learn more about distributed tracing.]({{< ref tracing-overview.md >}}) +While you can replace `traceid`/`traceparent` and `tracestate`, doing this may interfere with tracing events and report inconsistent results in tracing tools. It's recommended to use Open Telemetry for distributed traces. [Learn more about distributed tracing.]({{% ref tracing-overview %}}) {{% /alert %}} ## Publish your own CloudEvent -If you want to use your own CloudEvent, make sure to specify the [`datacontenttype`]({{< ref "pubsub-overview.md#setting-message-content-types" >}}) as `application/cloudevents+json`. +If you want to use your own CloudEvent, make sure to specify the [`datacontenttype`]({{% ref "pubsub-overview#setting-message-content-types" %}}) as `application/cloudevents+json`. If the CloudEvent that was authored by the app does not contain the [minimum required fields](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#required-attributes) in the CloudEvent specification, the message is rejected. Dapr adds the following fields to the CloudEvent if they are missing: @@ -205,9 +205,9 @@ You can add additional fields to a custom CloudEvent that are not part of the of ### Example -{{< tabs "Dapr CLI" "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane "Dapr CLI" "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} Publish a CloudEvent to the `orders` topic: @@ -215,9 +215,9 @@ Publish a CloudEvent to the `orders` topic: dapr publish --publish-app-id orderprocessing --pubsub order-pub-sub --topic orders --data '{\"orderId\": \"100\"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Publish a CloudEvent to the `orders` topic: @@ -225,9 +225,9 @@ Publish a CloudEvent to the `orders` topic: curl -X POST http://localhost:3601/v1.0/publish/order-pub-sub/orders -H "Content-Type: application/cloudevents+json" -d '{"specversion" : "1.0", "type" : "com.dapr.cloudevent.sent", "source" : "testcloudeventspubsub", "subject" : "Cloud Events Test", "id" : "someCloudEventId", "time" : "2021-08-02T09:00:00Z", "datacontenttype" : "application/cloudevents+json", "data" : {"orderId": "100"}}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Publish a CloudEvent to the `orders` topic: @@ -235,9 +235,9 @@ Publish a CloudEvent to the `orders` topic: Invoke-RestMethod -Method Post -ContentType 'application/cloudevents+json' -Body '{"specversion" : "1.0", "type" : "com.dapr.cloudevent.sent", "source" : "testcloudeventspubsub", "subject" : "Cloud Events Test", "id" : "someCloudEventId", "time" : "2021-08-02T09:00:00Z", "datacontenttype" : "application/cloudevents+json", "data" : {"orderId": "100"}}' -Uri 'http://localhost:3601/v1.0/publish/order-pub-sub/orders' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Event deduplication @@ -245,8 +245,8 @@ When using cloud events created by Dapr, the envelope contains an `id` field whi ## Next steps -- Learn why you might [not want to use CloudEvents]({{< ref pubsub-raw.md >}}) -- Try out the [pub/sub Quickstart]({{< ref pubsub-quickstart.md >}}) -- List of [pub/sub components]({{< ref setup-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) +- Learn why you might [not want to use CloudEvents]({{% ref pubsub-raw %}}) +- Try out the [pub/sub Quickstart]({{% ref pubsub-quickstart %}}) +- List of [pub/sub components]({{% ref setup-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-deadletter.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-deadletter.md index 7f00d0c410a..394a7eb97f7 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-deadletter.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-deadletter.md @@ -14,7 +14,7 @@ Dead letter topics are typically used in along with a retry resiliency policy an When a dead letter topic is set, any message that failed to be delivered to an app for a configured topic is put on the dead letter topic to be forwarded to a subscription that handles these messages. This could be the same app or a completely different one. -Dapr enables dead letter topics for all of it's pub/sub components, even if the underlying system does not support this feature natively. For example the [AWS SNS Component]({{< ref "setup-aws-snssqs" >}}) has a dead letter queue and [RabbitMQ]({{< ref "setup-rabbitmq" >}}) has the dead letter topics. You will need to ensure that you configure components like this appropriately. +Dapr enables dead letter topics for all of it's pub/sub components, even if the underlying system does not support this feature natively. For example the [AWS SNS Component]({{% ref "setup-aws-snssqs" %}}) has a dead letter queue and [RabbitMQ]({{% ref "setup-rabbitmq" %}}) has the dead letter topics. You will need to ensure that you configure components like this appropriately. The diagram below is an example of how dead letter topics work. First a message is sent from a publisher on an `orders` topic. Dapr receives the message on behalf of a subscriber application, however the orders topic message fails to be delivered to the `/checkout` endpoint on the application, even after retries. As a result of the failure to deliver, the message is forwarded to the `poisonMessages` topic which delivers this to the `/failedMessages` endpoint to be processed, in this case on the same application. The `failedMessages` processing code could drop the message or resend a new message. @@ -70,7 +70,7 @@ app.get('/dapr/subscribe', (_req, res) => { ## Retries and dead letter topics By default, when a dead letter topic is set, any failing message immediately goes to the dead letter topic. As a result it is recommend to always have a retry policy set when using dead letter topics in a subscription. -To enable the retry of a message before sending it to the dead letter topic, apply a [retry resiliency policy]({{< ref "retries-overview.md" >}}) to the pub/sub component. +To enable the retry of a message before sending it to the dead letter topic, apply a [retry resiliency policy]({{% ref "retries-overview" %}}) to the pub/sub component. This example shows how to set a constant retry policy named `pubsubRetry`, with 10 maximum delivery attempts applied every 5 seconds for the `pubsub` pub/sub component. @@ -122,5 +122,5 @@ Watch [this video for an overview of the dead letter topics](https://youtu.be/wL ## Next steps -- For more information on resiliency policies, read [Resiliency overview]({{< ref resiliency-overview.md >}}). -- For more information on topic subscriptions, read [Declarative, streaming, and programmatic subscription methods]({{< ref "pubsub-overview.md#message-subscription" >}}). +- For more information on resiliency policies, read [Resiliency overview]({{% ref resiliency-overview %}}). +- For more information on topic subscriptions, read [Declarative, streaming, and programmatic subscription methods]({{% ref "pubsub-overview#message-subscription" %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-message-ttl.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-message-ttl.md index 915661050c7..22a2c25e777 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-message-ttl.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-message-ttl.md @@ -10,7 +10,7 @@ description: "Use time-to-live in pub/sub messages." Dapr enables per-message time-to-live (TTL). This means that applications can set time-to-live per message, and subscribers do not receive those messages after expiration. -All Dapr [pub/sub components]({{< ref supported-pubsub >}}) are compatible with message TTL, as Dapr handles the TTL logic within the runtime. Simply set the `ttlInSeconds` metadata when publishing a message. +All Dapr [pub/sub components]({{% ref supported-pubsub %}}) are compatible with message TTL, as Dapr handles the TTL logic within the runtime. Simply set the `ttlInSeconds` metadata when publishing a message. In some components, such as Kafka, time-to-live can be configured in the topic via `retention.ms` as per [documentation](https://kafka.apache.org/documentation/#topicconfigs_retention.ms). With message TTL in Dapr, applications using Kafka can now set time-to-live per message in addition to per topic. @@ -39,15 +39,15 @@ When non-Dapr subscribers use components such as Azure Service Bus, which native Message TTL can be set in the metadata as part of the publishing request: -{{< tabs curl "Python SDK" "PHP SDK">}} +{{% tabpane curl "Python SDK" "PHP SDK"%}} -{{% codetab %}} +{{% tab %}} ```bash curl -X "POST" http://localhost:3500/v1.0/publish/pubsub/TOPIC_A?metadata.ttlInSeconds=120 -H "Content-Type: application/json" -d '{"order-number": "345"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python from dapr.clients import DaprClient @@ -65,9 +65,9 @@ with DaprClient() as d: # Print the request print(req_data, flush=True) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```php run(function(\DI\FactoryInterface $factory) { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} -See [this guide]({{< ref pubsub_api.md >}}) for a reference on the pub/sub API. +See [this guide]({{% ref pubsub_api %}}) for a reference on the pub/sub API. ## Next steps -- Learn about [topic scoping]({{< ref pubsub-scopes.md >}}) -- Learn [how to configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}) -- List of [pub/sub components]({{< ref supported-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) +- Learn about [topic scoping]({{% ref pubsub-scopes %}}) +- Learn [how to configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}) +- List of [pub/sub components]({{% ref supported-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md index 9916d259102..1bf33504df6 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-overview.md @@ -44,7 +44,7 @@ In the diagram below, the Dapr API posts an "order" topic from the publishing "c -[View the complete list of pub/sub components that Dapr supports]({{< ref supported-pubsub >}}). +[View the complete list of pub/sub components that Dapr supports]({{% ref supported-pubsub %}}). ## Features @@ -52,15 +52,15 @@ The pub/sub API building block brings several features to your application. ### Sending messages using Cloud Events -To enable message routing and provide additional context with each message between services, Dapr uses the [CloudEvents 1.0 specification](https://github.com/cloudevents/spec/tree/v1.0) as its message format. Any message sent by an application to a topic using Dapr is automatically wrapped in a Cloud Events envelope, using [`Content-Type` header value]({{< ref "pubsub-overview.md#content-types" >}}) for `datacontenttype` attribute. +To enable message routing and provide additional context with each message between services, Dapr uses the [CloudEvents 1.0 specification](https://github.com/cloudevents/spec/tree/v1.0) as its message format. Any message sent by an application to a topic using Dapr is automatically wrapped in a Cloud Events envelope, using [`Content-Type` header value]({{% ref "pubsub-overview#content-types" %}}) for `datacontenttype` attribute. -For more information, read about [messaging with CloudEvents]({{< ref pubsub-cloudevents.md >}}), or [sending raw messages without CloudEvents]({{< ref pubsub-raw.md >}}). +For more information, read about [messaging with CloudEvents]({{% ref pubsub-cloudevents %}}), or [sending raw messages without CloudEvents]({{% ref pubsub-raw %}}). ### Communication with applications not using Dapr and CloudEvents If one of your applications uses Dapr while another doesn't, you can disable the CloudEvent wrapping for a publisher or subscriber. This allows partial adoption of Dapr pub/sub in applications that cannot adopt Dapr all at once. -For more information, read [how to use pub/sub without CloudEvents]({{< ref pubsub-raw.md >}}). +For more information, read [how to use pub/sub without CloudEvents]({{% ref pubsub-raw %}}). ### Setting message content types @@ -83,34 +83,34 @@ Dapr applications can subscribe to published topics via three subscription types | **Streaming** | The subscription is defined in the **user code**. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. They do not require a subscription endpoint in your application (that is required by both programmatic and declarative subscriptions), making them easy to configure in code. Streaming subscriptions also do not require an app to be configured with the sidecar to receive messages. With streaming subscriptions, since messages are sent to a message handler code, there is no concept of routes or bulk subscriptions. | | **Programmatic** | Subscription is defined in the **user code**. The programmatic approach implements the static subscription and requires an endpoint in your code. | -For more information, read [about the subscriptions in Subscription Types]({{< ref subscription-methods.md >}}). +For more information, read [about the subscriptions in Subscription Types]({{% ref subscription-methods %}}). ### Reloading topic subscriptions To reload topic subscriptions that are defined programmatically or declaratively, the Dapr sidecar needs to be restarted. -The Dapr sidecar can be made to dynamically reload changed declarative topic subscriptions without restarting by enabling the [`HotReload` feature gate]({{< ref "support-preview-features.md" >}}). +The Dapr sidecar can be made to dynamically reload changed declarative topic subscriptions without restarting by enabling the [`HotReload` feature gate]({{% ref "support-preview-features" %}}). Hot reloading of topic subscriptions is currently a preview feature. In-flight messages are unaffected when reloading a subscription. ### Message routing -Dapr provides [content-based routing](https://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html) pattern. [Pub/sub routing]({{< ref howto-route-messages.md >}}) is an implementation of this pattern that allows developers to use expressions to route [CloudEvents](https://cloudevents.io) based on their contents to different URIs/paths and event handlers in your application. If no route matches, an optional default route is used. This is useful as your applications expands to support multiple event versions or special cases. +Dapr provides [content-based routing](https://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html) pattern. [Pub/sub routing]({{% ref howto-route-messages %}}) is an implementation of this pattern that allows developers to use expressions to route [CloudEvents](https://cloudevents.io) based on their contents to different URIs/paths and event handlers in your application. If no route matches, an optional default route is used. This is useful as your applications expands to support multiple event versions or special cases. This feature is available to both the declarative and programmatic subscription approaches. -For more information on message routing, read [Dapr pub/sub API reference]({{< ref "pubsub_api.md#provide-routes-for-dapr-to-deliver-topic-events" >}}) +For more information on message routing, read [Dapr pub/sub API reference]({{% ref "pubsub_api#provide-routes-for-dapr-to-deliver-topic-events" %}}) ### Handling failed messages with dead letter topics -Sometimes, messages can't be processed because of a variety of possible issues, such as erroneous conditions within the producer or consumer application or an unexpected state change that causes an issue with your application code. Dapr allows developers to set dead letter topics to deal with messages that cannot be delivered to an application. This feature is available on all pub/sub components and prevents consumer applications from endlessly retrying a failed message. For more information, read about [dead letter topics]({{< ref "pubsub-deadletter.md">}}) +Sometimes, messages can't be processed because of a variety of possible issues, such as erroneous conditions within the producer or consumer application or an unexpected state change that causes an issue with your application code. Dapr allows developers to set dead letter topics to deal with messages that cannot be delivered to an application. This feature is available on all pub/sub components and prevents consumer applications from endlessly retrying a failed message. For more information, read about [dead letter topics]({{% ref "pubsub-deadletter"%}}) ### Enabling the outbox pattern -Dapr enables developers to use the outbox pattern for achieving a single transaction across a transactional state store and any message broker. For more information, read [How to enable transactional outbox messaging]({{< ref howto-outbox.md >}}) +Dapr enables developers to use the outbox pattern for achieving a single transaction across a transactional state store and any message broker. For more information, read [How to enable transactional outbox messaging]({{% ref howto-outbox %}}) ### Namespace consumer groups -Dapr solves multi-tenancy at-scale with [namespaces for consumer groups]({{< ref howto-namespace >}}). Simply include the `"{namespace}"` value in your component metadata for consumer groups to allow multiple namespaces with applications of the same `app-id` to publish and subscribe to the same message broker. +Dapr solves multi-tenancy at-scale with [namespaces for consumer groups]({{% ref howto-namespace %}}). Simply include the `"{namespace}"` value in your component metadata for consumer groups to allow multiple namespaces with applications of the same `app-id` to publish and subscribe to the same message broker. ### At-least-once guarantee @@ -133,26 +133,26 @@ Similarly, if two different applications (with different `app-id`) subscribe to Not all Dapr pub/sub components support the competing consumer pattern. Currently, the following (non-exhaustive) pub/sub components support this: -- [Apache Kafka]({{< ref setup-apache-kafka >}}) -- [Azure Service Bus Queues]({{< ref setup-azure-servicebus-queues >}}) -- [RabbitMQ]({{< ref setup-rabbitmq >}}) -- [Redis Streams]({{< ref setup-redis-pubsub >}}) +- [Apache Kafka]({{% ref setup-apache-kafka %}}) +- [Azure Service Bus Queues]({{% ref setup-azure-servicebus-queues %}}) +- [RabbitMQ]({{% ref setup-rabbitmq %}}) +- [Redis Streams]({{% ref setup-redis-pubsub %}}) ### Scoping topics for added security -By default, all topic messages associated with an instance of a pub/sub component are available to every application configured with that component. You can limit which application can publish or subscribe to topics with Dapr topic scoping. For more information, read: [pub/sub topic scoping]({{< ref pubsub-scopes.md >}}). +By default, all topic messages associated with an instance of a pub/sub component are available to every application configured with that component. You can limit which application can publish or subscribe to topics with Dapr topic scoping. For more information, read: [pub/sub topic scoping]({{% ref pubsub-scopes %}}). ### Message Time-to-Live (TTL) -Dapr can set a timeout message on a per-message basis, meaning that if the message is not read from the pub/sub component, then the message is discarded. This timeout message prevents a build up of unread messages. If a message has been in the queue longer than the configured TTL, it is marked as dead. For more information, read [pub/sub message TTL]({{< ref pubsub-message-ttl.md >}}). +Dapr can set a timeout message on a per-message basis, meaning that if the message is not read from the pub/sub component, then the message is discarded. This timeout message prevents a build up of unread messages. If a message has been in the queue longer than the configured TTL, it is marked as dead. For more information, read [pub/sub message TTL]({{% ref pubsub-message-ttl %}}). ### Publish and subscribe to bulk messages -Dapr supports sending and receiving multiple messages in a single request. When writing applications that need to send or receive a large number of messages, using bulk operations allows achieving high throughput by reducing the overall number of requests. For more information, read [pub/sub bulk messages]({{< ref pubsub-bulk.md >}}). +Dapr supports sending and receiving multiple messages in a single request. When writing applications that need to send or receive a large number of messages, using bulk operations allows achieving high throughput by reducing the overall number of requests. For more information, read [pub/sub bulk messages]({{% ref pubsub-bulk %}}). ### Scaling subscribers with StatefulSets -When running on Kubernetes, subscribers can have a sticky `consumerID` per instance when using StatefulSets in combination with the `{podName}` marker. See [how to horizontally scale subscribers with StatefulSets]({{< ref "howto-subscribe-statefulset.md" >}}). +When running on Kubernetes, subscribers can have a sticky `consumerID` per instance when using StatefulSets in combination with the `{podName}` marker. See [how to horizontally scale subscribers with StatefulSets]({{% ref "howto-subscribe-statefulset" %}}). ## Try out pub/sub @@ -162,17 +162,17 @@ Want to put the Dapr pub/sub API to the test? Walk through the following quickst | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Pub/sub quickstart]({{< ref pubsub-quickstart.md >}}) | Send and receive messages using the publish and subscribe API. | +| [Pub/sub quickstart]({{% ref pubsub-quickstart %}}) | Send and receive messages using the publish and subscribe API. | | [Pub/sub tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub) | Demonstrates how to use Dapr to enable pub-sub applications. Uses Redis as a pub-sub component. | ### Start using pub/sub directly in your app -Want to skip the quickstarts? Not a problem. You can try out the pub/sub building block directly in your application to publish messages and subscribe to a topic. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the pub/sub API starting with [the pub/sub how-to guide]({{< ref howto-publish-subscribe.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the pub/sub building block directly in your application to publish messages and subscribe to a topic. After [Dapr is installed]({{% ref "getting-started/_index" %}}), you can begin using the pub/sub API starting with [the pub/sub how-to guide]({{% ref howto-publish-subscribe %}}). ## Next steps -- Learn about [messaging with CloudEvents]({{< ref pubsub-cloudevents.md >}}) and when you might want to [send messages without CloudEvents]({{< ref pubsub-raw.md >}}). -- Follow [How-To: Configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}). -- Review the list of [pub/sub components]({{< ref setup-pubsub >}}). -- Read the [API reference]({{< ref pubsub_api.md >}}). +- Learn about [messaging with CloudEvents]({{% ref pubsub-cloudevents %}}) and when you might want to [send messages without CloudEvents]({{% ref pubsub-raw %}}). +- Follow [How-To: Configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}). +- Review the list of [pub/sub components]({{% ref setup-pubsub %}}). +- Read the [API reference]({{% ref pubsub_api %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md index 948e2cd2680..f5a5215559d 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-raw.md @@ -6,7 +6,7 @@ weight: 2200 description: "Learn when you might not use CloudEvents and how to disable them." --- -When adding Dapr to your application, some services may still need to communicate via pub/sub messages not encapsulated in CloudEvents, due to either compatibility reasons or some apps not using Dapr. These are referred to as "raw" pub/sub messages. Dapr enables apps to [publish and subscribe to raw events]({{< ref "pubsub-cloudevents.md#publishing-raw-messages" >}}) not wrapped in a CloudEvent for compatibility and to send data that is not JSON serializable. +When adding Dapr to your application, some services may still need to communicate via pub/sub messages not encapsulated in CloudEvents, due to either compatibility reasons or some apps not using Dapr. These are referred to as "raw" pub/sub messages. Dapr enables apps to [publish and subscribe to raw events]({{% ref "pubsub-cloudevents#publishing-raw-messages" %}}) not wrapped in a CloudEvent for compatibility and to send data that is not JSON serializable. ## Publishing raw messages @@ -20,15 +20,15 @@ Not using CloudEvents disables support for tracing, event deduplication per mess To disable CloudEvent wrapping, set the `rawPayload` metadata to `true` as part of the publishing request. This allows subscribers to receive these messages without having to parse the CloudEvent schema. -{{< tabs curl ".NET" "Python" "PHP">}} +{{% tabpane curl ".NET" "Python" "PHP"%}} -{{% codetab %}} +{{% tab %}} ```bash curl -X "POST" http://localhost:3500/v1.0/publish/pubsub/TOPIC_A?metadata.rawPayload=true -H "Content-Type: application/json" -d '{"order-number": "345"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp using Dapr.Client; @@ -63,9 +63,9 @@ app.MapPost("/publish", async (DaprClient daprClient) => app.Run(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python from dapr.clients import DaprClient @@ -83,9 +83,9 @@ with DaprClient() as d: # Print the request print(req_data, flush=True) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```php run(function(\DI\FactoryInterface $factory) { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Subscribing to raw messages @@ -115,9 +115,9 @@ When subscribing programmatically, add the additional metadata entry for `rawPay When using raw payloads the message is always base64 encoded with content type `application/octet-stream`. -{{< tabs ".NET" "Python" "PHP" >}} +{{% tabpane ".NET" "Python" "PHP" %}} -{{% codetab %}} +{{% tab %}} ```csharp using System.Text.Json; @@ -158,9 +158,9 @@ app.MapPost("/messages", async (HttpContext context) => app.Run(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python import flask @@ -190,8 +190,8 @@ def ds_subscriber(): app.run() ``` -{{% /codetab %}} -{{% codetab %}} +{{% /tab %}} +{{% tab %}} ```php post('/dsstatus', function( $app->start(); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Declaratively subscribe to raw events @@ -241,7 +241,7 @@ scopes: ## Next steps -- Learn more about [publishing and subscribing messages]({{< ref pubsub-overview.md >}}) -- List of [pub/sub components]({{< ref supported-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) +- Learn more about [publishing and subscribing messages]({{% ref pubsub-overview %}}) +- List of [pub/sub components]({{% ref supported-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api %}}) - Read the .NET sample on how to [consume Kafka messages without CloudEvents](https://github.com/dapr/samples/pubsub-raw-payload) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-scopes.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-scopes.md index 8c718a37090..b0e276e097b 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-scopes.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/pubsub-scopes.md @@ -8,7 +8,7 @@ description: "Use scopes to limit pub/sub topics to specific applications" ## Introduction -[Namespaces or component scopes]({{< ref component-scopes.md >}}) can be used to limit component access to particular applications. These application scopes added to a component limit only the applications with specific IDs to be able to use the component. +[Namespaces or component scopes]({{% ref component-scopes %}}) can be used to limit component access to particular applications. These application scopes added to a component limit only the applications with specific IDs to be able to use the component. In addition to this general component scope, the following can be limited for pub/sub components: - Which topics can be used (published or subscribed) @@ -208,7 +208,7 @@ The table below shows which application is allowed to subscribe to the topics: ## Next steps -- Learn [how to configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}) -- Learn about [message time-to-live]({{< ref pubsub-message-ttl.md >}}) -- List of [pub/sub components]({{< ref supported-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) \ No newline at end of file +- Learn [how to configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}) +- Learn about [message time-to-live]({{% ref pubsub-message-ttl %}}) +- List of [pub/sub components]({{% ref supported-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md index b5496419a71..ce95b2bbdff 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md @@ -12,9 +12,9 @@ Dapr applications can subscribe to published topics via three subscription types | Subscription type | Description | | ------------------- | ----------- | -| [**Declarative**]({{< ref "subscription-methods.md#declarative-subscriptions" >}}) | Subscription is defined in an **external file**. The declarative approach removes the Dapr dependency from your code and allows for existing applications to subscribe to topics, without having to change code. | -| [**Streaming**]({{< ref "subscription-methods.md#streaming-subscriptions" >}}) | Subscription is defined in the **application code**. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. They do not require a subscription endpoint in your application (that is required by both programmatic and declarative subscriptions), making them easy to configure in code. Streaming subscriptions also do not require an app to be configured with the sidecar to receive messages. | -| [**Programmatic**]({{< ref "subscription-methods.md#programmatic-subscriptions" >}}) | Subscription is defined in the **application code**. The programmatic approach implements the static subscription and requires an endpoint in your code. | +| [**Declarative**]({{% ref "subscription-methods#declarative-subscriptions" %}}) | Subscription is defined in an **external file**. The declarative approach removes the Dapr dependency from your code and allows for existing applications to subscribe to topics, without having to change code. | +| [**Streaming**]({{% ref "subscription-methods#streaming-subscriptions" %}}) | Subscription is defined in the **application code**. Streaming subscriptions are dynamic, meaning they allow for adding or removing subscriptions at runtime. They do not require a subscription endpoint in your application (that is required by both programmatic and declarative subscriptions), making them easy to configure in code. Streaming subscriptions also do not require an app to be configured with the sidecar to receive messages. | +| [**Programmatic**]({{% ref "subscription-methods#programmatic-subscriptions" %}}) | Subscription is defined in the **application code**. The programmatic approach implements the static subscription and requires an endpoint in your code. | The examples below demonstrate pub/sub messaging between a `checkout` app and an `orderprocessing` app via the `orders` topic. The examples demonstrate the same Dapr pub/sub component used first declaratively, then programmatically. @@ -23,7 +23,7 @@ The examples below demonstrate pub/sub messaging between a `checkout` app and an {{% alert title="Note" color="primary" %}} This feature is currently in preview. Dapr can be made to "hot reload" declarative subscriptions, whereby updates are picked up automatically without needing a restart. -This is enabled by via the [`HotReload` feature gate]({{< ref "support-preview-features.md" >}}). +This is enabled by via the [`HotReload` feature gate]({{% ref "support-preview-features" %}}). To prevent reprocessing or loss of unprocessed messages, in-flight messages between Dapr and your application are unaffected during hot reload events. {{% /alert %}} @@ -50,49 +50,49 @@ Here the subscription called `order`: When running Dapr, set the YAML component file path to point Dapr to the component. -{{< tabs ".NET" Java Python JavaScript Go Kubernetes>}} +{{% tabpane ".NET" Java Python JavaScript Go Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- python3 app.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id myapp --resources-path ./myComponents -- go run app.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In Kubernetes, apply the component to the cluster: @@ -100,15 +100,15 @@ In Kubernetes, apply the component to the cluster: kubectl apply -f subscription.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} In your application code, subscribe to the topic specified in the Dapr pub/sub component. -{{< tabs ".NET" Java Python JavaScript Go >}} +{{% tabpane ".NET" Java Python JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp //Subscribe to a topic @@ -119,9 +119,9 @@ public void getCheckout([FromBody] int orderId) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java import io.dapr.client.domain.CloudEvent; @@ -137,9 +137,9 @@ public Mono getCheckout(@RequestBody(required = false) CloudEvent } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python from cloudevents.sdk.event import v1 @@ -151,9 +151,9 @@ def checkout(event: v1.Event) -> None: logging.info('Subscriber received: ' + str(data)) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript const express = require('express') @@ -168,9 +168,9 @@ app.post('/orders', (req, res) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //Subscribe to a topic @@ -186,9 +186,9 @@ func eventHandler(ctx context.Context, e *common.TopicEvent) (retry bool, err er } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The `/orders` endpoint matches the `route` defined in the subscriptions and this is where Dapr sends all topic messages to. @@ -203,9 +203,9 @@ As messages are sent to the given message handler code, there is no concept of r The example below shows the different ways to stream subscribe to a topic. -{{< tabs ".NET" Python Go >}} +{{% tabpane ".NET" Python Go %}} -{{% codetab %}} +{{% tab %}} You can use the `SubscribeAsync` method on the `DaprPublishSubscribeClient` to configure the message handler to use to pull messages from the stream. @@ -248,12 +248,12 @@ Task HandleMessageAsync(TopicMessage message, CancellationT } ``` -[Learn more about streaming subscriptions using the .NET SDK client.]({{< ref "dotnet-messaging-pubsub-howto.md" >}}) +[Learn more about streaming subscriptions using the .NET SDK client.]({{% ref "dotnet-messaging-pubsub-howto" %}}) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use the `subscribe` method, which returns a `Subscription` object and allows you to pull messages from the stream by calling the `next_message` method. This runs in and may block the main thread while waiting for messages. @@ -354,11 +354,11 @@ if __name__ == '__main__': main() ``` -[Learn more about streaming subscriptions using the Python SDK client.]({{< ref "python-client.md#streaming-message-subscription" >}}) +[Learn more about streaming subscriptions using the Python SDK client.]({{% ref "python-client#streaming-message-subscription" %}}) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -453,9 +453,9 @@ func eventHandler(e *common.TopicEvent) common.SubscriptionResponseStatus { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Demo @@ -471,9 +471,9 @@ The dynamic programmatic approach returns the `routes` JSON structure within the In the example below, you define the values found in the [declarative YAML subscription](#declarative-subscriptions) above within the application code. -{{< tabs ".NET" Java Python JavaScript Go>}} +{{% tabpane ".NET" Java Python JavaScript Go%}} -{{% codetab %}} +{{% tab %}} ```csharp [Topic("pubsub", "orders")] @@ -504,9 +504,9 @@ app.UseEndpoints(endpoints => }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); @@ -525,9 +525,9 @@ public Mono handleMessage(@RequestBody(required = false) CloudEvent { app.listen(port, () => console.log(`consumer app listening on port ${port}!`)) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -656,17 +656,17 @@ func main() { log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", appPort), router)) } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next Steps -* Try out the [pub/sub Quickstart]({{< ref pubsub-quickstart.md >}}) -* Follow: [How-To: Configure pub/sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}) -* Learn more about [declarative and programmatic subscription methods]({{< ref subscription-methods >}}). -* Learn about [topic scoping]({{< ref pubsub-scopes.md >}}) -* Learn about [message TTL]({{< ref pubsub-message-ttl.md >}}) -* Learn more about [pub/sub with and without CloudEvent]({{< ref pubsub-cloudevents.md >}}) -* List of [pub/sub components]({{< ref supported-pubsub.md >}}) -* Read the [pub/sub API reference]({{< ref pubsub_api.md >}}) +* Try out the [pub/sub Quickstart]({{% ref pubsub-quickstart %}}) +* Follow: [How-To: Configure pub/sub components with multiple namespaces]({{% ref pubsub-namespaces %}}) +* Learn more about [declarative and programmatic subscription methods]({{% ref subscription-methods %}}). +* Learn about [topic scoping]({{% ref pubsub-scopes %}}) +* Learn about [message TTL]({{% ref pubsub-message-ttl %}}) +* Learn more about [pub/sub with and without CloudEvent]({{% ref pubsub-cloudevents %}}) +* List of [pub/sub components]({{% ref supported-pubsub %}}) +* Read the [pub/sub API reference]({{% ref pubsub_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/secrets/_index.md b/daprdocs/content/en/developing-applications/building-blocks/secrets/_index.md index 43179c9d946..e2038e9f77e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/secrets/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/secrets/_index.md @@ -8,8 +8,8 @@ description: Securely access secrets from your application {{% alert title="More about Dapr Secrets" color="primary" %}} Learn more about how to use Dapr Secrets: - - Try the [Secrets quickstart]({{< ref secrets-quickstart.md >}}). - - Explore secrets via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Secrets API reference documentation]({{< ref secrets_api.md >}}). - - Browse the supported [secrets component specs]({{< ref supported-secret-stores >}}). + - Try the [Secrets quickstart]({{% ref secrets-quickstart %}}). + - Explore secrets via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Secrets API reference documentation]({{% ref secrets_api %}}). + - Browse the supported [secrets component specs]({{% ref supported-secret-stores %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/secrets/howto-secrets.md b/daprdocs/content/en/developing-applications/building-blocks/secrets/howto-secrets.md index 104acc93097..ccbd6010978 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/secrets/howto-secrets.md +++ b/daprdocs/content/en/developing-applications/building-blocks/secrets/howto-secrets.md @@ -6,12 +6,12 @@ weight: 2000 description: "Use the secret store building block to securely retrieve a secret" --- -Now that you've learned [what the Dapr secrets building block provides]({{< ref secrets-overview >}}), learn how it can work in your service. This guide demonstrates how to call the secrets API and retrieve secrets in your application code from a configured secret store. +Now that you've learned [what the Dapr secrets building block provides]({{% ref secrets-overview %}}), learn how it can work in your service. This guide demonstrates how to call the secrets API and retrieve secrets in your application code from a configured secret store. Diagram showing secrets management of example service. {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the secrets management quickstart]({{< ref secrets-quickstart.md >}}) for a quick walk-through on how to use the secrets API. + If you haven't already, [try out the secrets management quickstart]({{% ref secrets-quickstart %}}) for a quick walk-through on how to use the secrets API. {{% /alert %}} @@ -20,7 +20,7 @@ Now that you've learned [what the Dapr secrets building block provides]({{< ref Before retrieving secrets in your application's code, you must configure a secret store component. This example configures a secret store that uses a local JSON file to store secrets. {{% alert title="Warning" color="warning" %}} -In a production-grade application, local secret stores are not recommended. [Find alternatives]({{< ref supported-secret-stores >}}) to securely manage your secrets. +In a production-grade application, local secret stores are not recommended. [Find alternatives]({{% ref supported-secret-stores %}}) to securely manage your secrets. {{% /alert %}} In your project directory, create a file named `secrets.json` with the following contents: @@ -54,8 +54,8 @@ The path to the secret store JSON is relative to where you call `dapr run`. For more information: -- See how to [configure a different kind of secret store]({{< ref setup-secret-store >}}). -- Review [supported secret stores]({{< ref supported-secret-stores >}}) to see specific details required for different secret store solutions. +- See how to [configure a different kind of secret store]({{% ref setup-secret-store %}}). +- Review [supported secret stores]({{% ref supported-secret-stores %}}) to see specific details required for different secret store solutions. ## Get a secret @@ -65,15 +65,15 @@ Get the secret by calling the Dapr sidecar using the secrets API: curl http://localhost:3601/v1.0/secrets/localsecretstore/secret ``` -See a [full API reference]({{< ref secrets_api.md >}}). +See a [full API reference]({{% ref secrets_api %}}). ## Calling the secrets API from your code Now that you've set up the local secret store, call Dapr to get the secrets from your application code. Below are code examples that leverage Dapr SDKs for retrieving a secret. -{{< tabs ".NET" Java Python Go JavaScript>}} +{{% tabpane ".NET" Java Python Go JavaScript%}} -{{% codetab %}} +{{% tab %}} ```csharp using System; @@ -97,9 +97,9 @@ var secret = await daprClient.GetSecretAsync(SECRET_STORE_NAME, "secret"); Console.WriteLine($"Result: {string.Join(", ", secret)}"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -131,9 +131,9 @@ public class OrderProcessingServiceApplication { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -161,9 +161,9 @@ with DaprClient() as client: logging.info(sorted(secret.secrets.items())) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -199,9 +199,9 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -228,13 +228,13 @@ async function main() { main(); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- Review the [Dapr secrets API features]({{< ref secrets-overview >}}). -- Learn how to [use secrets scopes]({{< ref secrets-scopes >}}) -- Read the [secrets API reference]({{< ref secrets_api >}}) and review the [supported secrets]({{< ref supported-secret-stores >}}). -- Learn how to [set up different secret store components]({{< ref setup-secret-store >}}) and how to [reference secrets in your component]({{< ref component-secrets >}}). \ No newline at end of file +- Review the [Dapr secrets API features]({{% ref secrets-overview %}}). +- Learn how to [use secrets scopes]({{% ref secrets-scopes %}}) +- Read the [secrets API reference]({{% ref secrets_api %}}) and review the [supported secrets]({{% ref supported-secret-stores %}}). +- Learn how to [set up different secret store components]({{% ref setup-secret-store %}}) and how to [reference secrets in your component]({{% ref component-secrets %}}). \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-overview.md b/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-overview.md index de132d9a4c0..da9e45df76f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-overview.md @@ -6,7 +6,7 @@ weight: 1000 description: "Overview of secrets management API building block" --- -Applications usually store sensitive information in secrets by using a dedicated secret store. For example, you authenticate databases, services, and external systems with connection strings, keys, tokens, and other application-level secrets stored in a secret store, such as [AWS Secrets Manager, Azure Key Vault, Hashicorp Vault, etc]({{< ref supported-secret-stores >}}). +Applications usually store sensitive information in secrets by using a dedicated secret store. For example, you authenticate databases, services, and external systems with connection strings, keys, tokens, and other application-level secrets stored in a secret store, such as [AWS Secrets Manager, Azure Key Vault, Hashicorp Vault, etc]({{% ref supported-secret-stores %}}). To access these secret stores, the application imports the secret store SDK, often requiring a fair amount of unrelated boilerplate code. This poses an even greater challenge in multi-cloud scenarios, where different vendor-specific secret stores may be used. @@ -36,7 +36,7 @@ For example, the diagram below shows an application requesting the secret called -Applications can also use the secrets API to access secrets from a Kubernetes secret store. By default, Dapr enables a built-in [Kubernetes secret store in Kubernetes mode]({{< ref "kubernetes-secret-store.md" >}}), deployed via: +Applications can also use the secrets API to access secrets from a Kubernetes secret store. By default, Dapr enables a built-in [Kubernetes secret store in Kubernetes mode]({{% ref "kubernetes-secret-store" %}}), deployed via: - The Helm defaults, or - `dapr init -k` @@ -56,17 +56,17 @@ In Azure, you can configure Dapr to retrieve secrets using managed identities to In the examples above, the application code did not have to change to get the same secret. Dapr uses the secret management components via the secrets management building block API. -[Try out the secrets API]({{< ref "#try-out-secrets-management" >}}) using one of our quickstarts or tutorials. +[Try out the secrets API]({{% ref "#try-out-secrets-management" %}}) using one of our quickstarts or tutorials. ### Reference secret stores in Dapr components When configuring Dapr components such as state stores, you're often required to include credentials in components files. Alternatively, you can place the credentials within a Dapr supported secret store and reference the secret within the Dapr component. This is the preferred approach and recommended best practice, especially in production environments. -For more information, read [referencing secret stores in components]({{< ref component-secrets.md >}}). +For more information, read [referencing secret stores in components]({{% ref component-secrets %}}). ### Limit access to secrets -To provide more granular control on access to secrets, Dapr provides the ability to define scopes and restricting access permissions. Learn more about [using secret scoping]({{< ref secrets-scopes >}}) +To provide more granular control on access to secrets, Dapr provides the ability to define scopes and restricting access permissions. Learn more about [using secret scoping]({{% ref secrets-scopes %}}) ## Try out secrets management @@ -76,14 +76,14 @@ Want to put the Dapr secrets management API to the test? Walk through the follow | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Secrets management quickstart]({{< ref secrets-quickstart.md >}}) | Retrieve secrets in the application code from a configured secret store using the secrets management API. | +| [Secrets management quickstart]({{% ref secrets-quickstart %}}) | Retrieve secrets in the application code from a configured secret store using the secrets management API. | | [Secret Store tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/secretstore) | Demonstrates the use of Dapr Secrets API to access secret stores. | ### Start managing secrets directly in your app -Want to skip the quickstarts? Not a problem. You can try out the secret management building block directly in your application to retrieve and manage secrets. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the secrets management API starting with [the secrets how-to guide]({{< ref howto-secrets.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the secret management building block directly in your application to retrieve and manage secrets. After [Dapr is installed]({{% ref "getting-started/_index" %}}), you can begin using the secrets management API starting with [the secrets how-to guide]({{% ref howto-secrets %}}). ## Next steps -- Learn [how to use secret scoping]({{< ref secrets-scopes.md >}}). -- Read the [secrets API reference doc]({{< ref secrets_api.md >}}). +- Learn [how to use secret scoping]({{% ref secrets-scopes %}}). +- Read the [secrets API reference doc]({{% ref secrets_api %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-scopes.md b/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-scopes.md index afd41751505..9917b05c4b9 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-scopes.md +++ b/daprdocs/content/en/developing-applications/building-blocks/secrets/secrets-scopes.md @@ -6,17 +6,17 @@ weight: 3000 description: "Use scoping to limit the secrets that can be read by your application from secret stores" --- -Once you [configure a secret store for your application]({{< ref setup-secret-store >}}), *any* secret defined within that store is accessible by default from the Dapr application. +Once you [configure a secret store for your application]({{% ref setup-secret-store %}}), *any* secret defined within that store is accessible by default from the Dapr application. -You can limit the Dapr application's access to specific secrets by defining secret scopes. Simply add a secret scope policy [to the application configuration]({{< ref configuration-concept.md >}}) with restrictive permissions. +You can limit the Dapr application's access to specific secrets by defining secret scopes. Simply add a secret scope policy [to the application configuration]({{% ref configuration-concept %}}) with restrictive permissions. -The secret scoping policy applies to any [secret store]({{< ref supported-secret-stores.md >}}), including: +The secret scoping policy applies to any [secret store]({{% ref supported-secret-stores %}}), including: - A local secret store - A Kubernetes secret store - A public cloud secret store -For details on how to set up a [secret store]({{< ref setup-secret-store.md >}}), read [How To: Retrieve a secret]({{< ref howto-secrets.md >}}). +For details on how to set up a [secret store]({{% ref setup-secret-store %}}), read [How To: Retrieve a secret]({{% ref howto-secrets %}}). Watch [this video](https://youtu.be/j99RN_nxExA?start=2272) for a demo on how to use secret scoping with your application. @@ -26,7 +26,7 @@ Watch [this video](https://youtu.be/j99RN_nxExA?start=2272) for a demo on how to ## Scenario 1 : Deny access to all secrets for a secret store -In this example, all secret access is denied to an application running on a Kubernetes cluster, which has a configured [Kubernetes secret store]({{< ref kubernetes-secret-store >}}) named `mycustomsecretstore`. Aside from the user-defined custom store, the example also configures the Kubernetes default store (named `kubernetes`) to ensure all secrets are denied access. [Learn more about the Kubernetes default secret store]({{< ref "kubernetes-secret-store.md#default-kubernetes-secret-store-component" >}}). +In this example, all secret access is denied to an application running on a Kubernetes cluster, which has a configured [Kubernetes secret store]({{% ref kubernetes-secret-store %}}) named `mycustomsecretstore`. Aside from the user-defined custom store, the example also configures the Kubernetes default store (named `kubernetes`) to ensure all secrets are denied access. [Learn more about the Kubernetes default secret store]({{% ref "kubernetes-secret-store#default-kubernetes-secret-store-component" %}}). Define the following `appconfig.yaml` configuration and apply it to the Kubernetes cluster using the command `kubectl apply -f appconfig.yaml`. @@ -44,7 +44,7 @@ spec: defaultAccess: deny ``` -For applications that need to be denied access to the Kubernetes secret store, follow [these instructions]({{< ref kubernetes-overview.md >}}), and add the following annotation to the application pod: +For applications that need to be denied access to the Kubernetes secret store, follow [these instructions]({{% ref kubernetes-overview %}}), and add the following annotation to the application pod: ```yaml dapr.io/config: appconfig @@ -69,7 +69,7 @@ spec: allowedSecrets: ["secret1", "secret2"] ``` -The default access to the `vault` secret store is `deny`, while some secrets are accessible by the application, based on the `allowedSecrets` list. [Learn how to apply configuration to the sidecar]({{< ref configuration-concept.md >}}). +The default access to the `vault` secret store is `deny`, while some secrets are accessible by the application, based on the `allowedSecrets` list. [Learn how to apply configuration to the sidecar]({{% ref configuration-concept %}}). ## Scenario 3: Deny access to certain sensitive secrets in a secret store @@ -88,7 +88,7 @@ spec: deniedSecrets: ["secret1", "secret2"] ``` -This example configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault` while allowing access to all other secrets. [Learn how to apply configuration to the sidecar]({{< ref configuration-concept.md >}}). +This example configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault` while allowing access to all other secrets. [Learn how to apply configuration to the sidecar]({{% ref configuration-concept %}}). ## Permission priority @@ -105,5 +105,5 @@ Scenarios | defaultAccess | allowedSecrets | deniedSecrets | permission ## Related links -- List of [secret stores]({{< ref supported-secret-stores.md >}}) -- Overview of [secret stores]({{< ref setup-secret-store.md >}}) +- List of [secret stores]({{% ref supported-secret-stores %}}) +- Overview of [secret stores]({{% ref setup-secret-store %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/_index.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/_index.md index f59f106c59f..1f307589287 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/_index.md @@ -8,7 +8,7 @@ description: Perform direct, secure, service-to-service method calls {{% alert title="More about Dapr Service Invocation" color="primary" %}} Learn more about how to use Dapr Service Invocation: - - Try the [Service Invocation quickstart]({{< ref serviceinvocation-quickstart.md >}}). - - Explore service invocation via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Service Invocation API reference documentation]({{< ref service_invocation_api.md >}}). + - Try the [Service Invocation quickstart]({{% ref serviceinvocation-quickstart %}}). + - Explore service invocation via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Service Invocation API reference documentation]({{% ref service_invocation_api %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md index 4416242e003..ceee838c096 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md @@ -11,7 +11,7 @@ This article demonstrates how to deploy services each with an unique application Diagram showing service invocation of example service {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the service invocation quickstart]({{< ref serviceinvocation-quickstart.md >}}) for a quick walk-through on how to use the service invocation API. + If you haven't already, [try out the service invocation quickstart]({{% ref serviceinvocation-quickstart %}}) for a quick walk-through on how to use the service invocation API. {{% /alert %}} @@ -19,9 +19,9 @@ This article demonstrates how to deploy services each with an unique application Dapr allows you to assign a global, unique ID for your app. This ID encapsulates the state for your application, regardless of the number of instances it may have. -{{< tabs Python JavaScript ".NET" Java Go Kubernetes >}} +{{% tabpane Python JavaScript ".NET" Java Go Kubernetes %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 -- python3 checkout/app.py @@ -37,9 +37,9 @@ dapr run --app-id checkout --app-protocol https --dapr-http-port 3500 -- python3 dapr run --app-id order-processor --app-port 8001 --app-protocol https --dapr-http-port 3501 -- python3 order-processor/app.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 -- npm start @@ -55,9 +55,9 @@ dapr run --app-id checkout --dapr-http-port 3500 --app-protocol https -- npm sta dapr run --app-id order-processor --app-port 5001 --dapr-http-port 3501 --app-protocol https -- npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 -- dotnet run @@ -73,9 +73,9 @@ dapr run --app-id checkout --dapr-http-port 3500 --app-protocol https -- dotnet dapr run --app-id order-processor --app-port 7001 --dapr-http-port 3501 --app-protocol https -- dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 -- java -jar target/CheckoutService-0.0.1-SNAPSHOT.jar @@ -91,9 +91,9 @@ dapr run --app-id checkout --dapr-http-port 3500 --app-protocol https -- java -j dapr run --app-id order-processor --app-port 9001 --dapr-http-port 3501 --app-protocol https -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr run --app-id checkout --dapr-http-port 3500 -- go run . @@ -109,9 +109,9 @@ dapr run --app-id checkout --dapr-http-port 3500 --app-protocol https -- go run dapr run --app-id order-processor --app-port 6006 --dapr-http-port 3501 --app-protocol https -- go run . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Set an app-id when deploying to Kubernetes @@ -141,11 +141,11 @@ spec: ... ``` -If your app uses a TLS connection, you can tell Dapr to invoke your app over TLS with the `app-protocol: "https"` annotation (full list [here]({{< ref arguments-annotations-overview.md >}})). Note that Dapr does not validate TLS certificates presented by the app. +If your app uses a TLS connection, you can tell Dapr to invoke your app over TLS with the `app-protocol: "https"` annotation (full list [here]({{% ref arguments-annotations-overview %}})). Note that Dapr does not validate TLS certificates presented by the app. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Invoke the service @@ -153,9 +153,9 @@ To invoke an application using Dapr, you can use the `invoke` API on any Dapr in Below are code examples that leverage Dapr SDKs for service invocation. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -180,9 +180,9 @@ while True: logging.info('Result: ' + str(result)) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -215,9 +215,9 @@ function sleep(ms) { main(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp //dependencies @@ -256,9 +256,9 @@ namespace EventService } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -311,9 +311,9 @@ public class CheckoutServiceApplication { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -367,9 +367,9 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Additional URL formats @@ -418,7 +418,7 @@ curl 'http://dapr-app-id:checkout@localhost:3602/checkout/100?basket=1234&key=ab ### Namespaces -When running on [namespace supported platforms]({{< ref "service_invocation_api.md#namespace-supported-platforms" >}}), you include the namespace of the target app in the app ID. For example, following the `.` format, use `checkout.production`. +When running on [namespace supported platforms]({{% ref "service_invocation_api#namespace-supported-platforms" %}}), you include the namespace of the target app in the app ID. For example, following the `.` format, use `checkout.production`. Using this example, invoking the service with a namespace would look like: @@ -426,7 +426,7 @@ Using this example, invoking the service with a namespace would look like: curl http://localhost:3602/v1.0/invoke/checkout.production/method/checkout/100 -X POST ``` -See the [Cross namespace API spec]({{< ref "service_invocation_api.md#cross-namespace-invocation" >}}) for more information on namespaces. +See the [Cross namespace API spec]({{% ref "service_invocation_api#cross-namespace-invocation" %}}) for more information on namespaces. ## View traces and logs @@ -436,9 +436,9 @@ Our example above showed you how to directly invoke a different service running - Allows you to visualize a call graph between services and log errors, and - Optionally, log the payload body. -For more information on tracing and logs, see the [observability]({{< ref observability-concept.md >}}) article. +For more information on tracing and logs, see the [observability]({{% ref observability-concept %}}) article. ## Related Links -- [Service invocation overview]({{< ref service-invocation-overview.md >}}) -- [Service invocation API specification]({{< ref service_invocation_api.md >}}) +- [Service invocation overview]({{% ref service-invocation-overview %}}) +- [Service invocation API specification]({{% ref service_invocation_api %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-non-dapr-endpoints.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-non-dapr-endpoints.md index 680b0361152..4f5e2836ddf 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-non-dapr-endpoints.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-non-dapr-endpoints.md @@ -8,7 +8,7 @@ weight: 40 This article demonstrates how to call a non-Dapr endpoint using Dapr over HTTP. -Using Dapr's service invocation API, you can communicate with endpoints that either use or do not use Dapr. Using Dapr to call endpoints that do not use Dapr not only provides a consistent API, but also the following [Dapr service invocation]({{< ref service-invocation-overview.md >}}) benefits: +Using Dapr's service invocation API, you can communicate with endpoints that either use or do not use Dapr. Using Dapr to call endpoints that do not use Dapr not only provides a consistent API, but also the following [Dapr service invocation]({{% ref service-invocation-overview %}}) benefits: - Ability to apply resiliency policies - Call observability with tracing & metrics @@ -45,7 +45,7 @@ The diagram below is an overview of how Dapr's service invocation works when inv ## Using an HTTPEndpoint resource or FQDN URL for non-Dapr endpoints There are two ways to invoke a non-Dapr endpoint when communicating either to Dapr applications or non-Dapr applications. A Dapr application can invoke a non-Dapr endpoint by providing one of the following: -- A named `HTTPEndpoint` resource, including defining an `HTTPEndpoint` resource type. See the [HTTPEndpoint reference]({{< ref httpendpoints-schema.md >}}) guide for an example. +- A named `HTTPEndpoint` resource, including defining an `HTTPEndpoint` resource type. See the [HTTPEndpoint reference]({{% ref httpendpoints-schema %}}) guide for an example. ```sh localhost:3500/v1.0/invoke//method/ @@ -68,7 +68,7 @@ There are two ways to invoke a non-Dapr endpoint when communicating either to Da ``` ### Using appId when calling Dapr enabled applications -AppIDs are always used to call Dapr applications with the `appID` and `my-method`. Read the [How-To: Invoke services using HTTP]({{< ref howto-invoke-discover-services.md >}}) guide for more information. For example: +AppIDs are always used to call Dapr applications with the `appID` and `my-method`. Read the [How-To: Invoke services using HTTP]({{% ref howto-invoke-discover-services %}}) guide for more information. For example: ```sh localhost:3500/v1.0/invoke//method/ @@ -79,7 +79,7 @@ curl http://localhost:3602/v1.0/invoke/orderprocessor/method/checkout ## TLS authentication -Using the [HTTPEndpoint resource]({{< ref httpendpoints-schema.md >}}) allows you to use any combination of a root certificate, client certificate and private key according to the authentication requirements of the remote endpoint. +Using the [HTTPEndpoint resource]({{% ref httpendpoints-schema %}}) allows you to use any combination of a root certificate, client certificate and private key according to the authentication requirements of the remote endpoint. ### Example using root certificate @@ -125,9 +125,9 @@ spec: ## Related Links -- [HTTPEndpoint reference]({{< ref httpendpoints-schema.md >}}) -- [Service invocation overview]({{< ref service-invocation-overview.md >}}) -- [Service invocation API specification]({{< ref service_invocation_api.md >}}) +- [HTTPEndpoint reference]({{% ref httpendpoints-schema %}}) +- [Service invocation overview]({{% ref service-invocation-overview %}}) +- [Service invocation API specification]({{% ref service_invocation_api %}}) ## Community call demo Watch this [video](https://youtu.be/BEXJgLsO4hA?t=364) on how to use service invocation to call non-Dapr endpoints. diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc.md index adf36ab1fc6..e961ea5ba32 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-services-grpc.md @@ -8,7 +8,7 @@ weight: 30 This article describe how to use Dapr to connect services using gRPC. -By using Dapr's gRPC proxying capability, you can use your existing proto-based gRPC services and have the traffic go through the Dapr sidecar. Doing so yields the following [Dapr service invocation]({{< ref service-invocation-overview.md >}}) benefits to developers: +By using Dapr's gRPC proxying capability, you can use your existing proto-based gRPC services and have the traffic go through the Dapr sidecar. Doing so yields the following [Dapr service invocation]({{% ref service-invocation-overview %}}) benefits to developers: 1. Mutual authentication 2. Tracing @@ -126,9 +126,9 @@ ctx = metadata.AppendToOutgoingContext(ctx, "dapr-app-id", "server") All languages supported by gRPC allow for adding metadata. Here are a few examples: -{{< tabs Java ".NET" Python JavaScript Ruby "C++">}} +{{% tabpane Java ".NET" Python JavaScript Ruby "C++"%}} -{{% codetab %}} +{{% tab %}} ```java Metadata headers = new Metadata(); Metadata.Key jwtKey = Metadata.Key.of("dapr-app-id", "server"); @@ -137,9 +137,9 @@ GreeterService.ServiceBlockingStub stub = GreeterService.newBlockingStub(channel stub = MetadataUtils.attachHeaders(stub, header); stub.SayHello(new HelloRequest() { Name = "Darth Malak" }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp var metadata = new Metadata { @@ -148,39 +148,39 @@ var metadata = new Metadata var call = client.SayHello(new HelloRequest { Name = "Darth Nihilus" }, metadata); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python metadata = (('dapr-app-id', 'server'),) response = stub.SayHello(request={ name: 'Darth Revan' }, metadata=metadata) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript const metadata = new grpc.Metadata(); metadata.add('dapr-app-id', 'server'); client.sayHello({ name: "Darth Malgus" }, metadata) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```ruby metadata = { 'dapr-app-id' : 'server' } response = service.sayHello({ 'name': 'Darth Bane' }, metadata) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```c++ grpc::ClientContext context; context.AddMetadata("dapr-app-id", "server"); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Run the client using the Dapr CLI @@ -223,11 +223,11 @@ spec: The `dapr.io/app-protocol: "grpc"` annotation tells Dapr to invoke the app using gRPC. -If your app uses a TLS connection, you can tell Dapr to invoke your app over TLS with the `app-protocol: "grpcs"` annotation (full list [here]({{< ref arguments-annotations-overview.md >}})). Note that Dapr does not validate TLS certificates presented by the app. +If your app uses a TLS connection, you can tell Dapr to invoke your app over TLS with the `app-protocol: "grpcs"` annotation (full list [here]({{% ref arguments-annotations-overview %}})). Note that Dapr does not validate TLS certificates presented by the app. ### Namespaces -When running on [namespace supported platforms]({{< ref "service_invocation_api.md#namespace-supported-platforms" >}}), you include the namespace of the target app in the app ID: `myApp.production` +When running on [namespace supported platforms]({{% ref "service_invocation_api#namespace-supported-platforms" %}}), you include the namespace of the target app in the app ID: `myApp.production` For example, invoking the gRPC server on a different namespace: @@ -235,13 +235,13 @@ For example, invoking the gRPC server on a different namespace: ctx = metadata.AppendToOutgoingContext(ctx, "dapr-app-id", "server.production") ``` -See the [Cross namespace API spec]({{< ref "service_invocation_api.md#cross-namespace-invocation" >}}) for more information on namespaces. +See the [Cross namespace API spec]({{% ref "service_invocation_api#cross-namespace-invocation" %}}) for more information on namespaces. ## Step 3: View traces and logs The example above showed you how to directly invoke a different service running locally or in Kubernetes. Dapr outputs metrics, tracing and logging information allowing you to visualize a call graph between services, log errors and optionally log the payload body. -For more information on tracing and logs see the [observability]({{< ref observability-concept.md >}}) article. +For more information on tracing and logs see the [observability]({{% ref observability-concept %}}) article. ## Proxying of streaming RPCs @@ -249,24 +249,24 @@ When using Dapr to proxy streaming RPC calls using gRPC, you must set an additio For example: -{{< tabs Go Java ".NET" Python JavaScript Ruby "C++">}} +{{% tabpane Go Java ".NET" Python JavaScript Ruby "C++"%}} -{{% codetab %}} +{{% tab %}} ```go ctx = metadata.AppendToOutgoingContext(ctx, "dapr-app-id", "server") ctx = metadata.AppendToOutgoingContext(ctx, "dapr-stream", "true") ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java Metadata headers = new Metadata(); Metadata.Key jwtKey = Metadata.Key.of("dapr-app-id", "server"); Metadata.Key jwtKey = Metadata.Key.of("dapr-stream", "true"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp var metadata = new Metadata { @@ -274,44 +274,44 @@ var metadata = new Metadata { "dapr-stream", "true" } }; ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python metadata = (('dapr-app-id', 'server'), ('dapr-stream', 'true'),) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript const metadata = new grpc.Metadata(); metadata.add('dapr-app-id', 'server'); metadata.add('dapr-stream', 'true'); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```ruby metadata = { 'dapr-app-id' : 'server' } metadata = { 'dapr-stream' : 'true' } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```c++ grpc::ClientContext context; context.AddMetadata("dapr-app-id", "server"); context.AddMetadata("dapr-stream", "true"); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Streaming gRPCs and Resiliency > Currently, resiliency policies are not supported for service invocation via gRPC. -When proxying streaming gRPCs, due to their long-lived nature, [resiliency]({{< ref "resiliency-overview.md" >}}) policies are applied on the "initial handshake" only. As a consequence: +When proxying streaming gRPCs, due to their long-lived nature, [resiliency]({{% ref "resiliency-overview" %}}) policies are applied on the "initial handshake" only. As a consequence: - If the stream is interrupted after the initial handshake, it will not be automatically re-established by Dapr. Your application will be notified that the stream has ended, and will need to recreate it. - Retry policies only impact the initial connection "handshake". If your resiliency policy includes retries, Dapr will detect failures in establishing the initial connection to the target app and will retry until it succeeds (or until the number of retries defined in the policy is exhausted). @@ -319,8 +319,8 @@ When proxying streaming gRPCs, due to their long-lived nature, [resiliency]({{< ## Related Links -* [Service invocation overview]({{< ref service-invocation-overview.md >}}) -* [Service invocation API specification]({{< ref service_invocation_api.md >}}) +* [Service invocation overview]({{% ref service-invocation-overview %}}) +* [Service invocation API specification]({{% ref service_invocation_api %}}) * [gRPC proxying community call video](https://youtu.be/B_vkXqptpXY?t=70) ## Community call demo diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md index a8c4ff0394b..2dedf01165f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md @@ -34,7 +34,7 @@ The diagram below is an overview of how Dapr's service invocation works between Diagram showing the steps of service invocation 1. Service A makes an HTTP or gRPC call targeting Service B. The call goes to the local Dapr sidecar. -2. Dapr discovers Service B's location using the [name resolution component]({{< ref supported-name-resolution >}}) which is running on the given [hosting platform]({{< ref "hosting" >}}). +2. Dapr discovers Service B's location using the [name resolution component]({{% ref supported-name-resolution %}}) which is running on the given [hosting platform]({{% ref "hosting" %}}). 3. Dapr forwards the message to Service B's Dapr sidecar - **Note**: All calls between Dapr sidecars go over gRPC for performance. Only calls between services and Dapr sidecars can be either HTTP or gRPC. 4. Service B's Dapr sidecar forwards the request to the specified endpoint (or method) on Service B. Service B then runs its business logic code. @@ -42,28 +42,28 @@ The diagram below is an overview of how Dapr's service invocation works between 6. Dapr forwards the response to Service A's Dapr sidecar. 7. Service A receives the response. -You can also call non-Dapr HTTP endpoints using the service invocation API. For example, you may only use Dapr in part of an overall application, may not have access to the code to migrate an existing application to use Dapr, or simply need to call an external HTTP service. Read ["How-To: Invoke Non-Dapr Endpoints using HTTP"]({{< ref howto-invoke-non-dapr-endpoints.md >}}) for more information. +You can also call non-Dapr HTTP endpoints using the service invocation API. For example, you may only use Dapr in part of an overall application, may not have access to the code to migrate an existing application to use Dapr, or simply need to call an external HTTP service. Read ["How-To: Invoke Non-Dapr Endpoints using HTTP"]({{% ref howto-invoke-non-dapr-endpoints %}}) for more information. ## Features Service invocation provides several features to make it easy for you to call methods between applications or to call external HTTP endpoints. ### HTTP and gRPC service invocation -- **HTTP**: If you're already using HTTP protocols in your application, using the Dapr HTTP header might be the easiest way to get started. You don't need to change your existing endpoint URLs; just add the `dapr-app-id` header and you're ready to go. For more information, see [Invoke Services using HTTP]({{< ref howto-invoke-discover-services.md >}}). -- **gRPC**: Dapr allows users to keep their own proto services and work natively with gRPC. This means that you can use service invocation to call your existing gRPC apps without having to include any Dapr SDKs or include custom gRPC services. For more information, see the [how-to tutorial for Dapr and gRPC]({{< ref howto-invoke-services-grpc.md >}}). +- **HTTP**: If you're already using HTTP protocols in your application, using the Dapr HTTP header might be the easiest way to get started. You don't need to change your existing endpoint URLs; just add the `dapr-app-id` header and you're ready to go. For more information, see [Invoke Services using HTTP]({{% ref howto-invoke-discover-services %}}). +- **gRPC**: Dapr allows users to keep their own proto services and work natively with gRPC. This means that you can use service invocation to call your existing gRPC apps without having to include any Dapr SDKs or include custom gRPC services. For more information, see the [how-to tutorial for Dapr and gRPC]({{% ref howto-invoke-services-grpc %}}). ### Service-to-service security With the Dapr Sentry service, all calls between Dapr applications can be made secure with mutual (mTLS) authentication on hosted platforms, including automatic certificate rollover. -For more information read the [service-to-service security]({{< ref "security-concept.md#sidecar-to-sidecar-communication" >}}) article. +For more information read the [service-to-service security]({{% ref "security-concept#sidecar-to-sidecar-communication" %}}) article. ### Resiliency including retries -In the event of call failures and transient errors, service invocation provides a resiliency feature that performs automatic retries with backoff time periods. To find out more, see the [Resiliency article here]({{< ref resiliency-overview.md >}}). +In the event of call failures and transient errors, service invocation provides a resiliency feature that performs automatic retries with backoff time periods. To find out more, see the [Resiliency article here]({{% ref resiliency-overview %}}). ### Tracing and metrics with observability -By default, all calls between applications are traced and metrics are gathered to provide insights and diagnostics for applications. This is especially important in production scenarios, providing call graphs and metrics on the calls between your services. For more information read about [observability]({{< ref observability-concept.md >}}). +By default, all calls between applications are traced and metrics are gathered to provide insights and diagnostics for applications. This is especially important in production scenarios, providing call graphs and metrics on the calls between your services. For more information read about [observability]({{% ref observability-concept %}}). ### Access control @@ -74,11 +74,11 @@ With access policies, applications can control: For example, you can restrict sensitive applications with personnel information from being accessed by unauthorized applications. Combined with service-to-service secure communication, you can provide for soft multi-tenancy deployments. -For more information read the [access control allow lists for service invocation]({{< ref invoke-allowlist.md >}}) article. +For more information read the [access control allow lists for service invocation]({{% ref invoke-allowlist %}}) article. ### Namespace scoping -You can scope applications to namespaces for deployment and security and call between services deployed to different namespaces. For more information, read the [Service invocation across namespaces]({{< ref "service-invocation-namespaces.md" >}}) article. +You can scope applications to namespaces for deployment and security and call between services deployed to different namespaces. For more information, read the [Service invocation across namespaces]({{% ref "service-invocation-namespaces" %}}) article. ### Round robin load balancing with mDNS @@ -92,7 +92,7 @@ The diagram below shows an example of how this works. If you have 1 instance of ### Swappable service discovery -Dapr can run on a variety of [hosting platforms]({{< ref hosting >}}). To enable swappable service discovery with service invocation, Dapr uses [name resolution components]({{< ref supported-name-resolution >}}). For example, the Kubernetes name resolution component uses the Kubernetes DNS service to resolve the location of other applications running in the cluster. +Dapr can run on a variety of [hosting platforms]({{% ref hosting %}}). To enable swappable service discovery with service invocation, Dapr uses [name resolution components]({{% ref supported-name-resolution %}}). For example, the Kubernetes name resolution component uses the Kubernetes DNS service to resolve the location of other applications running in the cluster. Self-hosted machines can use the mDNS name resolution component. As an alternative, you can use the SQLite name resolution component to run Dapr on single-node environments and for local development scenarios. Dapr sidecars that are part of the cluster store their information in a SQLite database on the local machine. @@ -115,7 +115,7 @@ The diagram below demonstrates the six steps of data flow. ## Example Architecture -Following the above call sequence, suppose you have the applications as described in the [Hello World tutorial](https://github.com/dapr/quickstarts/blob/master/tutorials/hello-world/README.md), where a python app invokes a node.js app. In such a scenario, the python app would be "Service A" , and a Node.js app would be "Service B". +Following the above call sequence, suppose you have the applications as described in the [Hello World tutorial](https://github.com/dapr/quickstarts/blob/master/tutorials/hello-world/README), where a python app invokes a node.js app. In such a scenario, the python app would be "Service A" , and a Node.js app would be "Service B". The diagram below shows sequence 1-7 again on a local machine showing the API calls: @@ -135,7 +135,7 @@ The Dapr docs contain multiple quickstarts that leverage the service invocation | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Service invocation quickstart]({{< ref serviceinvocation-quickstart.md >}}) | This quickstart gets you interacting directly with the service invocation building block. | +| [Service invocation quickstart]({{% ref serviceinvocation-quickstart %}}) | This quickstart gets you interacting directly with the service invocation building block. | | [Hello world tutorial](https://github.com/dapr/quickstarts/blob/master/tutorials/hello-world/README.md) | This tutorial shows how to use both the service invocation and state management building blocks all running locally on your machine. | | [Hello world kubernetes tutorial](https://github.com/dapr/quickstarts/blob/master/tutorials/hello-kubernetes/README.md) | This tutorial walks through using Dapr in kubernetes and covers both the service invocation and state management building blocks as well. | @@ -145,17 +145,17 @@ Want to skip the quickstarts? Not a problem. You can try out the service invocat Invoke services using: - **HTTP and gRPC service invocation** (recommended set up method) - - *HTTP* - Allows you to just add the `dapr-app-id` header and you're ready to get started. Read more on this here, [Invoke Services using HTTP.]({{< ref howto-invoke-discover-services.md >}}) - - *gRPC* - For gRPC based applications, the service invocation API is also available. Run the gRPC server, then invoke services using the Dapr CLI. Read more on this in [Configuring Dapr to use gRPC]({{< ref grpc >}}) and [Invoke services using gRPC]({{< ref howto-invoke-services-grpc.md >}}). + - *HTTP* - Allows you to just add the `dapr-app-id` header and you're ready to get started. Read more on this here, [Invoke Services using HTTP.]({{% ref howto-invoke-discover-services %}}) + - *gRPC* - For gRPC based applications, the service invocation API is also available. Run the gRPC server, then invoke services using the Dapr CLI. Read more on this in [Configuring Dapr to use gRPC]({{% ref grpc %}}) and [Invoke services using gRPC]({{% ref howto-invoke-services-grpc %}}). - **Direct call to the API** - In addition to proxying, there's also an option to directly call the service invocation API to invoke a GET endpoint. Just update your address URL to `localhost:` and you'll be able to directly call the API. You can also read more on this in the _Invoke Services using HTTP_ docs linked above under HTTP proxying. -- **SDKs** - If you're using a Dapr SDK, you can directly use service invocation through the SDK. Select the SDK you need and use the Dapr client to invoke a service. Read more on this in [Dapr SDKs]({{< ref sdks.md >}}). +- **SDKs** - If you're using a Dapr SDK, you can directly use service invocation through the SDK. Select the SDK you need and use the Dapr client to invoke a service. Read more on this in [Dapr SDKs]({{% ref sdks %}}). For quick testing, try using the Dapr CLI for service invocation: -- **Dapr CLI command** - Once the Dapr CLI is set up, use `dapr invoke --method ` command along with the method flag and the method of interest. Read more on this in [Dapr CLI]({{< ref dapr-invoke.md >}}). +- **Dapr CLI command** - Once the Dapr CLI is set up, use `dapr invoke --method ` command along with the method flag and the method of interest. Read more on this in [Dapr CLI]({{% ref dapr-invoke %}}). ## Next steps -- Read the [service invocation API specification]({{< ref service_invocation_api.md >}}). This reference guide for service invocation describes how to invoke methods on other services. -- Understand the [service invocation performance numbers]({{< ref perf-service-invocation.md >}}). -- Take a look at [observability]({{< ref observability >}}). Here you can dig into Dapr's monitoring tools like tracing, metrics and logging. -- Read up on our [security practices]({{< ref security-concept.md >}}) around mTLS encryption, token authentication, and endpoint authorization. +- Read the [service invocation API specification]({{% ref service_invocation_api %}}). This reference guide for service invocation describes how to invoke methods on other services. +- Understand the [service invocation performance numbers]({{% ref perf-service-invocation %}}). +- Take a look at [observability]({{% ref observability %}}). Here you can dig into Dapr's monitoring tools like tracing, metrics and logging. +- Read up on our [security practices]({{% ref security-concept %}}) around mTLS encryption, token authentication, and endpoint authorization. diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/_index.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/_index.md index 7966f4c3295..c350b99789e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/_index.md @@ -8,8 +8,8 @@ description: Create long running stateful services {{% alert title="More about Dapr State Management" color="primary" %}} Learn more about how to use Dapr State Management: - - Try the [State Management quickstart]({{< ref statemanagement-quickstart.md >}}). - - Explore state management via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [State Management API reference documentation]({{< ref state_api.md >}}). - - Browse the supported [state management component specs]({{< ref supported-state-stores >}}). + - Try the [State Management quickstart]({{% ref statemanagement-quickstart %}}). + - Explore state management via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [State Management API reference documentation]({{% ref state_api %}}). + - Browse the supported [state management component specs]({{% ref supported-state-stores %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-encrypt-state.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-encrypt-state.md index f30004be7e1..90b1dd2787f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-encrypt-state.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-encrypt-state.md @@ -93,6 +93,6 @@ when you rotate a key, data encrypted with the old key is not automatically re-e ## Related links -- [Security overview]({{< ref "security-concept.md" >}}) +- [Security overview]({{% ref "security-concept" %}}) - [State store query API implementation guide](https://github.com/dapr/components-contrib/blob/master/state/README.md#implementing-state-query-api) -- [State store components]({{< ref "supported-state-stores.md" >}}) +- [State store components]({{% ref "supported-state-stores" %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-get-save-state.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-get-save-state.md index 727ea207c4f..2a54a0d0891 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-get-save-state.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-get-save-state.md @@ -18,11 +18,11 @@ The code example below _loosely_ describes an application that processes orders A state store component represents a resource that Dapr uses to communicate with a database. -For the purpose of this guide we'll use a Redis state store, but any state store from the [supported list]({{< ref supported-state-stores >}}) will work. +For the purpose of this guide we'll use a Redis state store, but any state store from the [supported list]({{% ref supported-state-stores %}}) will work. -{{< tabs "Self-Hosted (CLI)" Kubernetes>}} +{{% tabpane "Self-Hosted (CLI)" Kubernetes%}} -{{% codetab %}} +{{% tab %}} When you run `dapr init` in self-hosted mode, Dapr creates a default Redis `statestore.yaml` and runs a Redis state store on your local machine, located: @@ -31,11 +31,11 @@ When you run `dapr init` in self-hosted mode, Dapr creates a default Redis `stat With the `statestore.yaml` component, you can easily swap out underlying components without application code changes. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -To deploy this into a Kubernetes cluster, fill in the `metadata` connection details of your [state store component]({{< ref supported-state-stores >}}) in the YAML below, save as `statestore.yaml`, and run `kubectl apply -f statestore.yaml`. +To deploy this into a Kubernetes cluster, fill in the `metadata` connection details of your [state store component]({{% ref supported-state-stores %}}) in the YAML below, save as `statestore.yaml`, and run `kubectl apply -f statestore.yaml`. ```yaml apiVersion: dapr.io/v1alpha1 @@ -52,11 +52,11 @@ spec: value: "" ``` -See [how to setup different state stores on Kubernetes]({{< ref "setup-state-store" >}}). +See [how to setup different state stores on Kubernetes]({{% ref "setup-state-store" %}}). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Important" color="warning" %}} Set an `app-id`, as the state keys are prefixed with this value. If you don't set an `app-id`, one is generated for you at runtime. The next time you run the command, a new `app-id` is generated and you will no longer have access to the previously saved state. @@ -66,9 +66,9 @@ Set an `app-id`, as the state keys are prefixed with this value. If you don't se The following example shows how to save and retrieve a single key/value pair using the Dapr state management API. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -102,9 +102,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -150,9 +150,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -183,9 +183,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // dependencies @@ -231,9 +231,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run OrderProcessingService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -287,9 +287,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Launch a Dapr sidecar: @@ -311,9 +311,9 @@ curl http://localhost:3601/v1.0/state/statestore/order_1 Restart your sidecar and try retrieving state again to observe that state persists separately from the app. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Launch a Dapr sidecar: @@ -335,17 +335,17 @@ Invoke-RestMethod -Uri 'http://localhost:3601/v1.0/state/statestore/order_1' Restart your sidecar and try retrieving state again to observe that state persists separately from the app. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Delete state Below are code examples that leverage Dapr SDKs for deleting the state. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp using Dapr.Client; @@ -370,9 +370,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -400,9 +400,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -423,9 +423,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go //dependencies @@ -458,9 +458,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run OrderProcessingService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -489,9 +489,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, run: @@ -501,9 +501,9 @@ curl -X DELETE 'http://localhost:3601/v1.0/state/statestore/order_1' Try getting state again. Note that no value is returned. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, run: @@ -513,17 +513,17 @@ Invoke-RestMethod -Method Delete -Uri 'http://localhost:3601/v1.0/state/statesto Try getting state again. Note that no value is returned. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Save and retrieve multiple states Below are code examples that leverage Dapr SDKs for saving and retrieving multiple states. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp using Dapr.Client; @@ -567,9 +567,9 @@ IReadOnlyList> mulitpleStateResult = await client.GetBulkS record Widget(string Size, string Color); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -600,9 +600,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies @@ -626,9 +626,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // dependencies @@ -676,9 +676,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run OrderProcessingService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -718,9 +718,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, save two key/value pairs into your statestore: @@ -734,9 +734,9 @@ Now get the states you just saved: curl -X POST -H "Content-Type: application/json" -d '{"keys":["order_1", "order_2"]}' http://localhost:3601/v1.0/state/statestore/bulk ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, save two key/value pairs into your statestore: @@ -750,21 +750,21 @@ Now get the states you just saved: Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"keys":["order_1", "order_2"]}' -Uri 'http://localhost:3601/v1.0/state/statestore/bulk' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Perform state transactions {{% alert title="Note" color="primary" %}} -State transactions require a state store that supports multi-item transactions. See the [supported state stores page]({{< ref supported-state-stores >}}) for a full list. +State transactions require a state store that supports multi-item transactions. See the [supported state stores page]({{% ref supported-state-stores %}}) for a full list. {{% /alert %}} Below are code examples that leverage Dapr SDKs for performing state transactions. -{{< tabs ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane ".NET" Java Python Go JavaScript "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```csharp using Dapr.Client; @@ -806,9 +806,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java //dependencies @@ -859,9 +859,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 mvn spring-boot:run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python #dependencies import random @@ -905,9 +905,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // dependencies @@ -978,9 +978,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run OrderProcessingService.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript //dependencies @@ -1038,9 +1038,9 @@ To launch a Dapr sidecar for the above example application, run a command simila dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 npm start ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, perform two state transactions: @@ -1054,9 +1054,9 @@ Now see the results of your state transactions: curl -X POST -H "Content-Type: application/json" -d '{"keys":["order_1", "order_2"]}' http://localhost:3601/v1.0/state/statestore/bulk ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With the same Dapr instance running from above, save two key/value pairs into your statestore: @@ -1070,12 +1070,12 @@ Now see the results of your state transactions: Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '{"keys":["order_1", "order_2"]}' -Uri 'http://localhost:3601/v1.0/state/statestore/bulk' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -- Read the full [State API reference]({{< ref state_api.md >}}) -- Try one of the [Dapr SDKs]({{< ref sdks >}}) -- Build a [stateful service]({{< ref howto-stateful-service.md >}}) +- Read the full [State API reference]({{% ref state_api %}}) +- Try one of the [Dapr SDKs]({{% ref sdks %}}) +- Build a [stateful service]({{% ref howto-stateful-service %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md index 40261a1afb0..78aa1e116e6 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md @@ -14,7 +14,7 @@ For example, you can use the outbox pattern to: 1. Write a new user record to an account database. 1. Send a notification message that the account was successfully created. -With Dapr's outbox support, you can notify subscribers when an application's state is created or updated when calling Dapr's [transactions API]({{< ref "state_api.md#state-transactions" >}}). +With Dapr's outbox support, you can notify subscribers when an application's state is created or updated when calling Dapr's [transactions API]({{% ref "state_api.md#state-transactions" %}}). The diagram below is an overview of how the outbox feature works: @@ -26,12 +26,12 @@ The diagram below is an overview of how the outbox feature works: ## Requirements -The outbox feature can be used with using any [transactional state store]({{< ref supported-state-stores >}}) supported by Dapr. All [pub/sub brokers]({{< ref supported-pubsub >}}) are supported with the outbox feature. +The outbox feature can be used with using any [transactional state store]({{% ref supported-state-stores %}}) supported by Dapr. All [pub/sub brokers]({{% ref supported-pubsub %}}) are supported with the outbox feature. -[Learn more about the transactional methods you can use.]({{< ref "howto-get-save-state.md#perform-state-transactions" >}}) +[Learn more about the transactional methods you can use.]({{% ref "howto-get-save-state.md#perform-state-transactions" %}}) {{% alert title="Note" color="primary" %}} -Message brokers that work with the competing consumer pattern (for example, [Apache Kafka]({{< ref setup-apache-kafka>}})) are encouraged to reduce the chances of duplicate events. +Message brokers that work with the competing consumer pattern (for example, [Apache Kafka]({{% ref setup-apache-kafka%}})) are encouraged to reduce the chances of duplicate events. {{% /alert %}} ## Enable the outbox pattern @@ -116,11 +116,11 @@ To use correctly, the `key` values must match between the operation on the state If you have two or more `outbox.projection` enabled state items for the same key, the first one defined is used and the others are ignored. -[Learn more about default and custom CloudEvent messages.]({{< ref pubsub-cloudevents.md >}}) +[Learn more about default and custom CloudEvent messages.]({{% ref pubsub-cloudevents.md %}}) -{{< tabs Python JavaScript ".NET" Java Go HTTP >}} +{{% tabpane Python JavaScript ".NET" Java Go HTTP %}} -{{% codetab %}} +{{% tab %}} @@ -161,9 +161,9 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The first operation is written to the state store and no message is written to the message broker. - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -216,9 +216,9 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -266,9 +266,9 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The first operation is written to the state store and no message is written to the message broker. - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -318,9 +318,9 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -356,9 +356,9 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The first operation is written to the state store and no message is written to the message broker. - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -401,17 +401,17 @@ By setting the metadata item `"outbox.projection"` to `"true"` and making sure t - The first operation is written to the state store and no message is written to the message broker. - The second operation value is published to the configured pub/sub topic. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Override Dapr-generated CloudEvent fields -You can override the [Dapr-generated CloudEvent fields]({{< ref "pubsub-cloudevents.md#dapr-generated-cloudevents-example" >}}) on the published outbox event with custom CloudEvent metadata. +You can override the [Dapr-generated CloudEvent fields]({{% ref "pubsub-cloudevents.md#dapr-generated-cloudevents-example" %}}) on the published outbox event with custom CloudEvent metadata. -{{< tabs Python JavaScript ".NET" Java Go HTTP >}} +{{% tabpane Python JavaScript ".NET" Java Go HTTP %}} -{{% codetab %}} +{{% tab %}} @@ -450,9 +450,9 @@ async def execute_state_transaction(): if __name__ == "__main__": asyncio.run(execute_state_transaction()) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -490,9 +490,9 @@ async function executeStateTransaction() { executeStateTransaction(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -541,9 +541,9 @@ public class StateOperationExample } } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -589,9 +589,9 @@ public class StateOperationExample { } } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -638,9 +638,9 @@ func main() { log.Println("State transaction executed.") } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -667,9 +667,9 @@ curl -X POST http://localhost:3500/v1.0/state/starwars/transaction \ }' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-share-state.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-share-state.md index 2fb3a3aa9b0..0c1d2e0f51c 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-share-state.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-share-state.md @@ -21,7 +21,7 @@ To enable state sharing, Dapr supports the following key prefixes strategies: | ------------ | ----------- | | `appid` | The default strategy allowing you to manage state only by the app with the specified `appid`. All state keys will be prefixed with the `appid`, and are scoped for the application. | | `name` | Uses the name of the state store component as the prefix. Multiple applications can share the same state for a given state store. | -| `namespace` | If set, this setting prefixes the `appid` key with the configured namespace, resulting in a key that is scoped to a given namespace. This allows apps in different namespace with the same `appid` to reuse the same state store. If a namespace is not configured, the setting fallbacks to the `appid` strategy. For more information on namespaces in Dapr see [How-To: Scope components to one or more applications]({{< ref component-scopes.md >}}) | +| `namespace` | If set, this setting prefixes the `appid` key with the configured namespace, resulting in a key that is scoped to a given namespace. This allows apps in different namespace with the same `appid` to reuse the same state store. If a namespace is not configured, the setting fallbacks to the `appid` strategy. For more information on namespaces in Dapr see [How-To: Scope components to one or more applications]({{% ref component-scopes.md %}}) | | `none` | Uses no prefixing. Multiple applications share state across different state stores. | ## Specifying a state prefix strategy diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-state-query-api.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-state-query-api.md index 1fe01bf0efa..e55c57404d1 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-state-query-api.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-state-query-api.md @@ -150,25 +150,25 @@ ORDER BY Execute the query with the following command: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)" >}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -s -X POST -H "Content-Type: application/json" -d @query-api-examples/query1.json http://localhost:3500/v1.0-alpha1/state/statestore/query | jq . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -InFile query-api-examples/query1.json -Uri 'http://localhost:3500/v1.0-alpha1/state/statestore/query' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The query result is an array of matching key/value pairs in the requested order: @@ -250,25 +250,25 @@ SELECT * FROM c WHERE Execute the query with the following command: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)" >}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -s -X POST -H "Content-Type: application/json" -d @query-api-examples/query2.json http://localhost:3500/v1.0-alpha1/state/statestore/query | jq . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -InFile query-api-examples/query2.json -Uri 'http://localhost:3500/v1.0-alpha1/state/statestore/query' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Similar to the previous example, the result is an array of matching key/value pairs. @@ -331,25 +331,25 @@ LIMIT 3 Execute the query with the following command: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)" >}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -s -X POST -H "Content-Type: application/json" -d @query-api-examples/query3.json http://localhost:3500/v1.0-alpha1/state/statestore/query | jq . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -InFile query-api-examples/query3.json -Uri 'http://localhost:3500/v1.0-alpha1/state/statestore/query' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Upon successful execution, the state store returns a JSON object with a list of matching records and the pagination token: @@ -434,25 +434,25 @@ The pagination token is used "as is" in the [subsequent query](../query-api-exam } ``` -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)" >}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -s -X POST -H "Content-Type: application/json" -d @query-api-examples/query3-token.json http://localhost:3500/v1.0-alpha1/state/statestore/query | jq . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -InFile query-api-examples/query3-token.json -Uri 'http://localhost:3500/v1.0-alpha1/state/statestore/query' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} And the result of this query is: @@ -506,14 +506,14 @@ That way you can update the pagination token in the query and iterate through th The state query API has the following limitations: -- To query actor states stored in a state store, you need to use the query API for the specific database. See [querying actor state]({{< ref "state-management-overview.md#querying-actor-state" >}}). -- The API does not work with Dapr [encrypted state stores]({{< ref howto-encrypt-state >}}) capability. Since the encryption is done by the Dapr runtime and stored as encrypted data, then this effectively prevents server side querying. +- To query actor states stored in a state store, you need to use the query API for the specific database. See [querying actor state]({{% ref "state-management-overview.md#querying-actor-state" %}}). +- The API does not work with Dapr [encrypted state stores]({{% ref howto-encrypt-state %}}) capability. Since the encryption is done by the Dapr runtime and stored as encrypted data, then this effectively prevents server side querying. -You can find additional information in the [related links]({{< ref "#related-links" >}}) section. +You can find additional information in the [related links]({{% ref "#related-links" %}}) section. ## Related links -- Refer to the [query API reference]({{< ref "state_api.md#state-query" >}}). -- See the [state store components that implement query support]({{< ref supported-state-stores.md >}}). +- Refer to the [query API reference]({{% ref "state_api.md#state-query" %}}). +- See the [state store components that implement query support]({{% ref supported-state-stores.md %}}). - View the [state store query API implementation guide](https://github.com/dapr/components-contrib/blob/master/state/README.md#implementing-state-query-api). -- See how to [query Redis state store]({{< ref "setup-redis.md#querying-json-objects" >}}). +- See how to [query Redis state store]({{% ref "setup-redis.md#querying-json-objects" %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-stateful-service.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-stateful-service.md index 8ef21d898b5..7dcc69833cd 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-stateful-service.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-stateful-service.md @@ -22,11 +22,11 @@ When you run `dapr init` in self-hosted mode, Dapr creates a default Redis `stat With the `statestore.yaml` component, you can easily swap out underlying components without application code changes. -See a [list of supported state stores]({{< ref supported-state-stores >}}). +See a [list of supported state stores]({{% ref supported-state-stores %}}). ### Kubernetes -See [how to setup different state stores on Kubernetes]({{}}). +See [how to setup different state stores on Kubernetes]({{%ref setup-state-store%}}). ## Strong and eventual consistency diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/_index.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/_index.md index 3641b54fc54..12408a5ea70 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/_index.md @@ -6,4 +6,4 @@ weight: 500 description: "Guides for working with specific backend states stores" --- -Explore the **Operations** section to see a list of [supported state stores]({{< ref supported-state-stores.md >}}) and how to setup [state store components]({{< ref setup-state-store.md >}}). \ No newline at end of file +Explore the **Operations** section to see a list of [supported state stores]({{% ref supported-state-stores.md %}}) and how to setup [state store components]({{% ref setup-state-store.md %}}). \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-cosmosdb-store.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-cosmosdb-store.md index 3774c9fae51..c4966625af6 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-cosmosdb-store.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-cosmosdb-store.md @@ -6,7 +6,7 @@ weight: 1000 description: "Use Azure Cosmos DB as a state store" --- -Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{< ref state_api.md >}}). You can directly interact with the underlying store to manipulate the state data, such as: +Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{% ref state_api.md %}}). You can directly interact with the underlying store to manipulate the state data, such as: - Querying states. - Creating aggregated views. diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-redis-store.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-redis-store.md index dea5e3c65b9..61d0a2fd6e2 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-redis-store.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-redis-store.md @@ -6,7 +6,7 @@ weight: 2000 description: "Use Redis as a state store" --- -Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{< ref state_api.md >}}). You can directly interact with the underlying store to manipulate the state data, such as: +Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{% ref state_api.md %}}). You can directly interact with the underlying store to manipulate the state data, such as: - Querying states. - Creating aggregated views. diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-sqlserver-store.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-sqlserver-store.md index 0034045a037..63b68c5f944 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-sqlserver-store.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/query-state-store/query-sqlserver-store.md @@ -6,7 +6,7 @@ weight: 3000 description: "Use SQL server as a backend state store" --- -Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{< ref state_api.md >}}). You can directly interact with the underlying store to manipulate the state data, such as: +Dapr doesn't transform state values while saving and retrieving states. Dapr requires all state store implementations to abide by a certain key format scheme (see [the state management spec]({{% ref state_api.md %}}). You can directly interact with the underlying store to manipulate the state data, such as: - Querying states. - Creating aggregated views. 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 89c31dc5e1b..00a7acf6f27 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 @@ -6,7 +6,7 @@ weight: 100 description: "Overview of the state management API building block" --- -Your application can use Dapr's state management API to save, read, and query key/value pairs in the [supported state stores]({{< ref supported-state-stores.md >}}). Using a state store component, you can build stateful, long running applications that save and retrieve their state (like a shopping cart or a game's session state). For example, in the diagram below: +Your application can use Dapr's state management API to save, read, and query key/value pairs in the [supported state stores]({{% ref supported-state-stores.md %}}). Using a state store component, you can build stateful, long running applications that save and retrieve their state (like a shopping cart or a game's session state). For example, in the diagram below: - Use **HTTP POST** to save or query key/value pairs. - Use **HTTP GET** to read a specific key and have its value returned. @@ -29,7 +29,7 @@ These are the features available as part of the state management API: ### Pluggable state stores -Dapr data stores are modeled as components, which can be swapped out without any changes to your service code. See [supported state stores]({{< ref supported-state-stores >}}) to see the list. +Dapr data stores are modeled as components, which can be swapped out without any changes to your service code. See [supported state stores]({{% ref supported-state-stores %}}) to see the list. ### Configurable state store behaviors @@ -40,7 +40,7 @@ With Dapr, you can include additional metadata in a state operation request that By default, your application should assume a data store is **eventually consistent** and uses a **last-write-wins concurrency pattern**. -[Not all stores are created equal]({{< ref supported-state-stores.md >}}). To ensure your application's portability, you can query the metadata capabilities of the store and make your code adaptive to different store capabilities. +[Not all stores are created equal]({{% ref supported-state-stores.md %}}). To ensure your application's portability, you can query the metadata capabilities of the store and make your code adaptive to different store capabilities. #### Concurrency @@ -61,7 +61,7 @@ If your application omits ETags in writing requests, Dapr skips ETag checks whil For stores that don't natively support ETags, the corresponding Dapr state store implementation is expected to simulate ETags and follow the Dapr state management API specification when handling states. Since Dapr state store implementations are technically clients to the underlying data store, simulation should be straightforward, using the concurrency control mechanisms provided by the store. {{% /alert %}} -Read the [API reference]({{< ref state_api.md >}}) to learn how to set concurrency options. +Read the [API reference]({{% ref state_api.md %}}) to learn how to set concurrency options. #### Consistency @@ -70,7 +70,7 @@ Dapr supports both **strong consistency** and **eventual consistency**, with eve - **Strong consistency**: Dapr waits for all replicas (or designated quorums) to acknowledge before it acknowledges a write request. - **Eventual consistency**: Dapr returns as soon as the write request is accepted by the underlying data store, even if this is a single replica. -Read the [API reference]({{< ref state_api.md >}}) to learn how to set consistency options. +Read the [API reference]({{% ref state_api.md %}}) to learn how to set consistency options. ### Setting content type @@ -83,7 +83,7 @@ Setting the content type is _optional_, and the component decides whether to mak ### Multiple operations -Dapr supports two types of multi-read or multi-write operations: **bulk** or **transactional**. Read the [API reference]({{< ref state_api.md >}}) to learn how use bulk and multi options. +Dapr supports two types of multi-read or multi-write operations: **bulk** or **transactional**. Read the [API reference]({{% ref state_api.md %}}) to learn how use bulk and multi options. #### Bulk read operations @@ -95,14 +95,14 @@ You can group write, update, and delete operations into a request, which are the ### Actor state -Transactional state stores can be used to store actor state. To specify which state store to use for actors, specify value of property `actorStateStore` as `true` in the state store component's metadata section. Actors state is stored with a specific scheme in transactional state stores, allowing for consistent querying. Only a single state store component can be used as the state store for all actors. Read the [state API reference]({{< ref state_api.md >}}) and the [actors API reference]({{< ref actors_api.md >}}) to learn more about state stores for actors. +Transactional state stores can be used to store actor state. To specify which state store to use for actors, specify value of property `actorStateStore` as `true` in the state store component's metadata section. Actors state is stored with a specific scheme in transactional state stores, allowing for consistent querying. Only a single state store component can be used as the state store for all actors. Read the [state API reference]({{% ref state_api.md %}}) and the [actors API reference]({{% ref actors_api.md %}}) to learn more about state stores for actors. #### Time to Live (TTL) on actor state -You should always set the TTL metadata field (`ttlInSeconds`), or the equivalent API call in your chosen SDK when saving actor state to ensure that state eventually removed. Read [actors overview]({{< ref actors-overview.md >}}) for more information. +You should always set the TTL metadata field (`ttlInSeconds`), or the equivalent API call in your chosen SDK when saving actor state to ensure that state eventually removed. Read [actors overview]({{% ref actors-overview.md %}}) for more information. ### State encryption -Dapr supports automatic client encryption of application state with support for key rotations. This is supported on all Dapr state stores. For more info, read the [How-To: Encrypt application state]({{< ref howto-encrypt-state.md >}}) topic. +Dapr supports automatic client encryption of application state with support for key rotations. This is supported on all Dapr state stores. For more info, read the [How-To: Encrypt application state]({{% ref howto-encrypt-state.md %}}) topic. ### Shared state between applications @@ -114,11 +114,11 @@ Dapr enables states to be: - Shared in a state store between applications. - Shared between multiple applications across different state stores. -For more details read [How-To: Share state between applications]({{< ref howto-share-state.md >}}), +For more details read [How-To: Share state between applications]({{% ref howto-share-state.md %}}), ### Enabling the outbox pattern -Dapr enables developers to use the outbox pattern for achieving a single transaction across a transactional state store and any message broker. For more information, read [How to enable transactional outbox messaging]({{< ref howto-outbox.md >}}) +Dapr enables developers to use the outbox pattern for achieving a single transaction across a transactional state store and any message broker. For more information, read [How to enable transactional outbox messaging]({{% ref howto-outbox.md %}}) ### Querying state @@ -129,11 +129,11 @@ There are two ways to query the state: #### Query API -Using the _optional_ state management [query API]({{< ref "reference/api/state_api.md#query-state" >}}), you can query the key/value data saved in state stores, regardless of underlying database or storage technology. With the state management query API, you can filter, sort, and paginate the key/value data. For more details read [How-To: Query state]({{< ref howto-state-query-api.md >}}). +Using the _optional_ state management [query API]({{% ref "reference/api/state_api.md#query-state" %}}), you can query the key/value data saved in state stores, regardless of underlying database or storage technology. With the state management query API, you can filter, sort, and paginate the key/value data. For more details read [How-To: Query state]({{% ref howto-state-query-api.md %}}). #### Querying state store directly -Dapr saves and retrieves state values without any transformation. You can query and aggregate state directly from the [underlying state store]({{< ref query-state-store >}}). +Dapr saves and retrieves state values without any transformation. You can query and aggregate state directly from the [underlying state store]({{% ref query-state-store %}}). For example, to get all state keys associated with an application ID "myApp" in Redis, use: ```bash @@ -160,11 +160,11 @@ SELECT AVG(value) FROM StateTable WHERE Id LIKE '||||*||tem ### State Time-to-Live (TTL) -Dapr enables [per state set request time-to-live (TTL)]({{< ref state-store-ttl.md >}}). This means that applications can set time-to-live per state stored, and these states cannot be retrieved after expiration. +Dapr enables [per state set request time-to-live (TTL)]({{% ref state-store-ttl.md %}}). This means that applications can set time-to-live per state stored, and these states cannot be retrieved after expiration. ### State management API -The state management API can be found in the [state management API reference]({{< ref state_api.md >}}), which describes how to retrieve, save, delete, and query state values by providing keys. +The state management API can be found in the [state management API reference]({{% ref state_api.md %}}), which describes how to retrieve, save, delete, and query state values by providing keys. ## Try out state management @@ -174,19 +174,19 @@ Want to put the Dapr state management API to the test? Walk through the followin | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [State management quickstart]({{< ref statemanagement-quickstart.md >}}) | Create stateful applications using the state management API. | +| [State management quickstart]({{% ref statemanagement-quickstart.md %}}) | Create stateful applications using the state management API. | | [Hello World](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-world) | _Recommended_
Demonstrates how to run Dapr locally. Highlights service invocation and state management. | | [Hello World Kubernetes](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) | _Recommended_
Demonstrates how to run Dapr in Kubernetes. Highlights service invocation and _state management_. | ### Start using state management directly in your app -Want to skip the quickstarts? Not a problem. You can try out the state management building block directly in your application. After [Dapr is installed]({{< ref "getting-started/_index.md" >}}), you can begin using the state management API starting with [the state management how-to guide]({{< ref howto-get-save-state.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the state management building block directly in your application. After [Dapr is installed]({{% ref "getting-started/_index.md" %}}), you can begin using the state management API starting with [the state management how-to guide]({{% ref howto-get-save-state.md %}}). ## Next steps - Start working through the state management how-to guides, starting with: - - [How-To: Save and get state]({{< ref howto-get-save-state.md >}}) - - [How-To: Build a stateful service]({{< ref howto-stateful-service.md >}}) -- Review the list of [state store components]({{< ref supported-state-stores.md >}}) -- Read the [state management API reference]({{< ref state_api.md >}}) -- Read the [actors API reference]({{< ref actors_api.md >}}) + - [How-To: Save and get state]({{% ref howto-get-save-state.md %}}) + - [How-To: Build a stateful service]({{% ref howto-stateful-service.md %}}) +- Review the list of [state store components]({{% ref supported-state-stores.md %}}) +- Read the [state management API reference]({{% ref state_api.md %}}) +- Read the [actors API reference]({{% ref actors_api.md %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/state-management/state-store-ttl.md b/daprdocs/content/en/developing-applications/building-blocks/state-management/state-store-ttl.md index e5b22d3e004..3fdb3626f0f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/state-management/state-store-ttl.md +++ b/daprdocs/content/en/developing-applications/building-blocks/state-management/state-store-ttl.md @@ -8,7 +8,7 @@ description: "Manage state with TTL." Dapr enables per state set request time-to-live (TTL). This means that applications can set time-to-live per state stored, and these states cannot be retrieved after expiration. -For [supported state stores]({{< ref supported-state-stores >}}), you simply set the `ttlInSeconds` metadata when publishing a message. Other state stores will ignore this value. For some state stores, you can specify a default expiration on a per-table/container basis. +For [supported state stores]({{% ref supported-state-stores %}}), you simply set the `ttlInSeconds` metadata when publishing a message. Other state stores will ignore this value. For some state stores, you can specify a default expiration on a per-table/container basis. ## Native state TTL support @@ -28,15 +28,15 @@ In addition, all state stores also support the option to _explicitly_ persist da ## Supported components -Refer to the TTL column in the [state store components guide]({{< ref supported-state-stores >}}). +Refer to the TTL column in the [state store components guide]({{% ref supported-state-stores %}}). ## Example You can set state TTL in the metadata as part of the state store set request: -{{< tabs Python ".NET" Go "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane Python ".NET" Go "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} @@ -62,9 +62,9 @@ To launch a Dapr sidecar and run the above example application, you'd then run a dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 -- python3 OrderProcessingService.py ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -88,9 +88,9 @@ To launch a Dapr sidecar and run the above example application, you'd then run a dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 dotnet run ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -115,29 +115,29 @@ To launch a Dapr sidecar and run the above example application, you'd then run a dapr run --app-id orderprocessing --app-port 6001 --dapr-http-port 3601 --dapr-grpc-port 60001 go run . ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST -H "Content-Type: application/json" -d '[{ "key": "order_1", "value": "250", "metadata": { "ttlInSeconds": "120" } }]' http://localhost:3601/v1.0/state/statestore ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '[{"key": "order_1", "value": "250", "metadata": {"ttlInSeconds": "120"}}]' -Uri 'http://localhost:3601/v1.0/state/statestore' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- See [the state API reference guide]({{< ref state_api.md >}}). -- Learn [how to use key value pairs to persist a state]({{< ref howto-get-save-state.md >}}). -- List of [state store components]({{< ref supported-state-stores >}}). -- Read the [API reference]({{< ref state_api.md >}}). +- See [the state API reference guide]({{% ref state_api.md %}}). +- Learn [how to use key value pairs to persist a state]({{% ref howto-get-save-state.md %}}). +- List of [state store components]({{% ref supported-state-stores %}}). +- Read the [API reference]({{% ref state_api.md %}}). diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/_index.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/_index.md index dbd73ca7900..41e7e268f11 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/_index.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/_index.md @@ -8,7 +8,7 @@ description: "Orchestrate logic across various microservices" {{% alert title="More about Dapr Workflow" color="primary" %}} Learn more about how to use Dapr Workflow: - - Try the [Workflow quickstart]({{< ref workflow-quickstart.md >}}). - - Explore workflow via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Workflow API reference documentation]({{< ref workflow_api.md >}}). + - Try the [Workflow quickstart]({{% ref workflow-quickstart.md %}}). + - Explore workflow via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Workflow API reference documentation]({{% ref workflow_api.md %}}). {{% /alert %}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md index 009850fae7c..b2ba0341b37 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-author-workflow.md @@ -9,7 +9,7 @@ description: "Learn how to develop and author workflows" This article provides a high-level overview of how to author workflows that are executed by the Dapr Workflow engine. {{% alert title="Note" color="primary" %}} - If you haven't already, [try out the workflow quickstart]({{< ref workflow-quickstart.md >}}) for a quick walk-through on how to use workflows. + If you haven't already, [try out the workflow quickstart]({{% ref workflow-quickstart.md %}}) for a quick walk-through on how to use workflows. {{% /alert %}} @@ -28,11 +28,11 @@ The Dapr sidecar doesn’t load any workflow definitions. Rather, the sidecar si ## Write the workflow activities -[Workflow activities]({{< ref "workflow-features-concepts.md#workflow-activites" >}}) are the basic unit of work in a workflow and are the tasks that get orchestrated in the business process. +[Workflow activities]({{% ref "workflow-features-concepts.md#workflow-activites" %}}) are the basic unit of work in a workflow and are the tasks that get orchestrated in the business process. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} @@ -49,9 +49,9 @@ def hello_act(ctx: WorkflowActivityContext, wf_input): [See the task chaining workflow activity in context.](https://github.com/dapr/python-sdk/blob/main/examples/workflow/simple.py) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -80,9 +80,9 @@ export default class WorkflowActivityContext { [See the workflow activity in context.](https://github.com/dapr/js-sdk/blob/main/src/workflow/runtime/WorkflowActivityContext.ts) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -148,9 +148,9 @@ public class ProcessPaymentActivity : WorkflowActivity [See the full `ProcessPaymentActivity.cs` workflow activity example.](https://github.com/dapr/dotnet-sdk/blob/master/examples/Workflow/WorkflowConsoleApp/Activities/ProcessPaymentActivity.cs) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -191,9 +191,9 @@ public class DemoWorkflowActivity implements WorkflowActivity { [See the Java SDK workflow activity example in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflowActivity.java) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -213,17 +213,17 @@ func TestActivity(ctx workflow.ActivityContext) (any, error) { [See the Go SDK workflow activity example in context.](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Write the workflow Next, register and call the activites in a workflow. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} @@ -255,9 +255,9 @@ def hello_world_wf(ctx: DaprWorkflowContext, wf_input): [See the `hello_world_wf` workflow in context.](https://github.com/dapr/python-sdk/blob/main/examples/workflow/simple.py) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -300,9 +300,9 @@ export default class WorkflowRuntime { [See the `WorkflowRuntime` in context.](https://github.com/dapr/js-sdk/blob/main/src/workflow/runtime/WorkflowRuntime.ts) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -343,9 +343,9 @@ The `OrderProcessingWorkflow` class is derived from a base class called `Workflo [See the full workflow example in `OrderProcessingWorkflow.cs`.](https://github.com/dapr/dotnet-sdk/blob/master/examples/Workflow/WorkflowConsoleApp/Workflows/OrderProcessingWorkflow.cs) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -374,9 +374,9 @@ public class DemoWorkflowWorker { [See the Java SDK workflow in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflowWorker.java) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -405,17 +405,17 @@ func TestWorkflow(ctx *workflow.WorkflowContext) (any, error) { [See the Go SDK workflow in context.](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Write the application Finally, compose the application using the workflow. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} @@ -424,8 +424,8 @@ Finally, compose the application using the workflow. - A Python package called `DaprClient` to receive the Python SDK capabilities. - A builder with extensions called: - `WorkflowRuntime`: Allows you to register the workflow runtime. - - `DaprWorkflowContext`: Allows you to [create workflows]({{< ref "#write-the-workflow" >}}) - - `WorkflowActivityContext`: Allows you to [create workflow activities]({{< ref "#write-the-workflow-activities" >}}) + - `DaprWorkflowContext`: Allows you to [create workflows]({{% ref "#write-the-workflow" %}}) + - `WorkflowActivityContext`: Allows you to [create workflow activities]({{% ref "#write-the-workflow-activities" %}}) - API calls. In the example below, these calls start, pause, resume, purge, and completing the workflow. ```python @@ -590,9 +590,9 @@ if __name__ == '__main__': main() ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -600,8 +600,8 @@ if __name__ == '__main__': - A builder with extensions called: - `WorkflowRuntime`: Allows you to register workflows and workflow activities - - `DaprWorkflowContext`: Allows you to [create workflows]({{< ref "#write-the-workflow" >}}) - - `WorkflowActivityContext`: Allows you to [create workflow activities]({{< ref "#write-the-workflow-activities" >}}) + - `DaprWorkflowContext`: Allows you to [create workflows]({{% ref "#write-the-workflow" %}}) + - `WorkflowActivityContext`: Allows you to [create workflow activities]({{% ref "#write-the-workflow-activities" %}}) - API calls. In the example below, these calls start, terminate, get status, pause, resume, raise event, and purge the workflow. ```javascript @@ -737,9 +737,9 @@ export default class DaprWorkflowClient { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -808,9 +808,9 @@ app.MapGet("/orders/{orderId}", async (string orderId, DaprWorkflowClient client app.Run(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -855,9 +855,9 @@ public class DemoWorkflow extends Workflow { [See the full Java SDK workflow example in context.](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/DemoWorkflow.java) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} @@ -1186,9 +1186,9 @@ func TestActivity(ctx workflow.ActivityContext) (any, error) { [See the full Go SDK workflow example in context.](https://github.com/dapr/go-sdk/tree/main/examples/workflow/README.md) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Important" color="warning" %}} @@ -1203,8 +1203,8 @@ Now that you've authored a workflow, learn how to manage it. {{< button text="Manage workflows >>" page="howto-manage-workflow.md" >}} ## Related links -- [Workflow overview]({{< ref workflow-overview.md >}}) -- [Workflow API reference]({{< ref workflow_api.md >}}) +- [Workflow overview]({{% ref workflow-overview.md %}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) - Try out the full SDK examples: - [Python example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript example](https://github.com/dapr/js-sdk/tree/main/examples/workflow) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md index 13c0a44ca95..64cce13d12b 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/howto-manage-workflow.md @@ -6,14 +6,14 @@ weight: 6000 description: Manage and run workflows --- -Now that you've [authored the workflow and its activities in your application]({{< ref howto-author-workflow.md >}}), you can start, terminate, and get information about the workflow using HTTP API calls. For more information, read the [workflow API reference]({{< ref workflow_api.md >}}). +Now that you've [authored the workflow and its activities in your application]({{% ref howto-author-workflow.md %}}), you can start, terminate, and get information about the workflow using HTTP API calls. For more information, read the [workflow API reference]({{% ref workflow_api.md %}}). -{{< tabs Python JavaScript ".NET" Java Go HTTP >}} +{{% tabpane Python JavaScript ".NET" Java Go HTTP %}} -{{% codetab %}} +{{% tab %}} -Manage your workflow within your code. In the workflow example from the [Author a workflow]({{< ref "howto-author-workflow.md#write-the-application" >}}) guide, the workflow is registered in the code using the following APIs: +Manage your workflow within your code. In the workflow example from the [Author a workflow]({{% ref "howto-author-workflow.md#write-the-application" %}}) guide, the workflow is registered in the code using the following APIs: - **schedule_new_workflow**: Start an instance of a workflow - **get_workflow_state**: Get information on the status of the workflow - **pause_workflow**: Pauses or suspends a workflow instance that can later be resumed @@ -58,12 +58,12 @@ wf_client.purge_workflow(instance_id=instance_id) wf_client.wait_for_workflow_completion(instance_id, timeout_in_seconds=30) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -Manage your workflow within your code. In the workflow example from the [Author a workflow]({{< ref "howto-author-workflow.md#write-the-application" >}}) guide, the workflow is registered in the code using the following APIs: +Manage your workflow within your code. In the workflow example from the [Author a workflow]({{% ref "howto-author-workflow.md#write-the-application" %}}) guide, the workflow is registered in the code using the following APIs: - **client.workflow.start**: Start an instance of a workflow - **client.workflow.get**: Get information on the status of the workflow - **client.workflow.pause**: Pauses or suspends a workflow instance that can later be resumed @@ -129,12 +129,12 @@ start().catch((e) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -Manage your workflow within your code. In the `OrderProcessingWorkflow` example from the [Author a workflow]({{< ref "howto-author-workflow.md#write-the-application" >}}) guide, the workflow is registered in the code. You can now start, terminate, and get information about a running workflow: +Manage your workflow within your code. In the `OrderProcessingWorkflow` example from the [Author a workflow]({{% ref "howto-author-workflow.md#write-the-application" %}}) guide, the workflow is registered in the code. You can now start, terminate, and get information about a running workflow: ```csharp string orderId = "exampleOrderId"; @@ -163,10 +163,10 @@ await daprWorkflowClient.ResumeWorkflowAsync(orderId); await daprWorkflowClient.PurgeInstanceAsync(orderId); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Manage your workflow within your code. [In the workflow example from the Java SDK](https://github.com/dapr/java-sdk/blob/master/examples/src/main/java/io/dapr/examples/workflows/), the workflow is registered in the code using the following APIs: @@ -228,10 +228,10 @@ public class DemoWorkflowClient { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Manage your workflow within your code. [In the workflow example from the Go SDK](https://github.com/dapr/go-sdk/tree/main/examples/workflow), the workflow is registered in the code using the following APIs: @@ -307,12 +307,12 @@ type RaiseEventWorkflowRequest struct { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -Manage your workflow using HTTP calls. The example below plugs in the properties from the [Author a workflow example]({{< ref "howto-author-workflow.md#write-the-workflow" >}}) with a random instance ID number. +Manage your workflow using HTTP calls. The example below plugs in the properties from the [Author a workflow example]({{% ref "howto-author-workflow.md#write-the-workflow" %}}) with a random instance ID number. ### Start workflow @@ -374,16 +374,16 @@ To fetch workflow information (outputs and inputs) with an ID `12345678`, run: curl -X GET "http://localhost:3500/v1.0/workflows/dapr/12345678" ``` -Learn more about these HTTP calls in the [workflow API reference guide]({{< ref workflow_api.md >}}). +Learn more about these HTTP calls in the [workflow API reference guide]({{% ref workflow_api.md %}}). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -- [Try out the Workflow quickstart]({{< ref workflow-quickstart.md >}}) +- [Try out the Workflow quickstart]({{% ref workflow-quickstart.md %}}) - Try out the full SDK examples: - [Python example](https://github.com/dapr/python-sdk/blob/master/examples/demo_workflow/app.py) - [JavaScript example](https://github.com/dapr/js-sdk/tree/main/examples/workflow) @@ -391,4 +391,4 @@ Learn more about these HTTP calls in the [workflow API reference guide]({{< ref - [Java example](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/workflows) - [Go example](https://github.com/dapr/go-sdk/tree/main/examples/workflow) -- [Workflow API reference]({{< ref workflow_api.md >}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md index 78d845150cf..f76813d714c 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-architecture.md @@ -6,7 +6,7 @@ weight: 4000 description: "The Dapr Workflow engine architecture" --- -[Dapr Workflows]({{< ref "workflow-overview.md" >}}) allow developers to define workflows using ordinary code in a variety of programming languages. The workflow engine runs inside of the Dapr sidecar and orchestrates workflow code deployed as part of your application. Dapr Workflows are built on top of Dapr Actors providing durability and scalability for workflow execution. +[Dapr Workflows]({{% ref "workflow-overview.md" %}}) allow developers to define workflows using ordinary code in a variety of programming languages. The workflow engine runs inside of the Dapr sidecar and orchestrates workflow code deployed as part of your application. Dapr Workflows are built on top of Dapr Actors providing durability and scalability for workflow execution. This article describes: @@ -15,7 +15,7 @@ This article describes: - How the workflow engine fits into the overall Dapr architecture - How different workflow backends can work with workflow engine -For more information on how to author Dapr Workflows in your application, see [How to: Author a workflow]({{< ref "workflow-overview.md" >}}). +For more information on how to author Dapr Workflows in your application, see [How to: Author a workflow]({{% ref "workflow-overview.md" %}}). The Dapr Workflow engine is internally powered by Dapr's actor runtime. The following diagram illustrates the Dapr Workflow architecture in Kubernetes mode: @@ -124,7 +124,7 @@ Activity actors are short-lived: ### Reminder usage and execution guarantees -The Dapr Workflow ensures workflow fault-tolerance by using [actor reminders]({{< ref "../actors/actors-timers-reminders.md##actor-reminders" >}}) to recover from transient system failures. Prior to invoking application workflow code, the workflow or activity actor will create a new reminder. If the application code executes without interruption, the reminder is deleted. However, if the node or the sidecar hosting the associated workflow or activity crashes, the reminder will reactivate the corresponding actor and the execution will be retried. +The Dapr Workflow ensures workflow fault-tolerance by using [actor reminders]({{% ref "../actors/actors-timers-reminders.md##actor-reminders" %}}) to recover from transient system failures. Prior to invoking application workflow code, the workflow or activity actor will create a new reminder. If the application code executes without interruption, the reminder is deleted. However, if the node or the sidecar hosting the associated workflow or activity crashes, the reminder will reactivate the corresponding actor and the execution will be retried. Diagram showing the process of invoking workflow actors @@ -136,9 +136,9 @@ Too many active reminders in a cluster may result in performance issues. If your Dapr Workflows use actors internally to drive the execution of workflows. Like any actors, these internal workflow actors store their state in the configured state store. Any state store that supports actors implicitly supports Dapr Workflow. -As discussed in the [workflow actors]({{< ref "workflow-architecture.md#workflow-actors" >}}) section, workflows save their state incrementally by appending to a history log. The history log for a workflow is distributed across multiple state store keys so that each "checkpoint" only needs to append the newest entries. +As discussed in the [workflow actors]({{% ref "workflow-architecture.md#workflow-actors" %}}) section, workflows save their state incrementally by appending to a history log. The history log for a workflow is distributed across multiple state store keys so that each "checkpoint" only needs to append the newest entries. -The size of each checkpoint is determined by the number of concurrent actions scheduled by the workflow before it goes into an idle state. [Sequential workflows]({{< ref "workflow-overview.md#task-chaining" >}}) will therefore make smaller batch updates to the state store, while [fan-out/fan-in workflows]({{< ref "workflow-overview.md#fan-outfan-in" >}}) will require larger batches. The size of the batch is also impacted by the size of inputs and outputs when workflows [invoke activities]({{< ref "workflow-features-concepts.md#workflow-activities" >}}) or [child workflows]({{< ref "workflow-features-concepts.md#child-workflows" >}}). +The size of each checkpoint is determined by the number of concurrent actions scheduled by the workflow before it goes into an idle state. [Sequential workflows]({{% ref "workflow-overview.md#task-chaining" %}}) will therefore make smaller batch updates to the state store, while [fan-out/fan-in workflows]({{% ref "workflow-overview.md#fan-outfan-in" %}}) will require larger batches. The size of the batch is also impacted by the size of inputs and outputs when workflows [invoke activities]({{% ref "workflow-features-concepts.md#workflow-activities" %}}) or [child workflows]({{% ref "workflow-features-concepts.md#child-workflows" %}}). Diagram of workflow actor state store interactions @@ -203,7 +203,7 @@ In order to provide guarantees around durability and resiliency, Dapr Workflows - Latency caused by too many active reminders in the cluster. - Latency caused by high CPU usage in the cluster. -See the [Reminder usage and execution guarantees section]({{< ref "workflow-architecture.md#reminder-usage-and-execution-guarantees" >}}) for more details on how the design of workflow actors may impact execution latency. +See the [Reminder usage and execution guarantees section]({{% ref "workflow-architecture.md#reminder-usage-and-execution-guarantees" %}}) for more details on how the design of workflow actors may impact execution latency. ## Next steps @@ -211,9 +211,9 @@ See the [Reminder usage and execution guarantees section]({{< ref "workflow-arch ## Related links -- [Workflow overview]({{< ref workflow-overview.md >}}) -- [Workflow API reference]({{< ref workflow_api.md >}}) -- [Try out the Workflow quickstart]({{< ref workflow-quickstart.md >}}) +- [Workflow overview]({{% ref workflow-overview.md %}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) +- [Try out the Workflow quickstart]({{% ref workflow-quickstart.md %}}) - Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript example](https://github.com/dapr/js-sdk/tree/main/examples/workflow) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md index 0adb7059f6e..639a82450c3 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-features-concepts.md @@ -6,10 +6,10 @@ weight: 2000 description: "Learn more about the Dapr Workflow features and concepts" --- -Now that you've learned about the [workflow building block]({{< ref workflow-overview.md >}}) at a high level, let's deep dive into the features and concepts included with the Dapr Workflow engine and SDKs. Dapr Workflow exposes several core features and concepts which are common across all supported languages. +Now that you've learned about the [workflow building block]({{% ref workflow-overview.md %}}) at a high level, let's deep dive into the features and concepts included with the Dapr Workflow engine and SDKs. Dapr Workflow exposes several core features and concepts which are common across all supported languages. {{% alert title="Note" color="primary" %}} -For more information on how workflow state is managed, see the [workflow architecture guide]({{< ref workflow-architecture.md >}}). +For more information on how workflow state is managed, see the [workflow architecture guide]({{% ref workflow-architecture.md %}}). {{% /alert %}} ## Workflows @@ -17,14 +17,14 @@ For more information on how workflow state is managed, see the [workflow archite Dapr Workflows are functions you write that define a series of tasks to be executed in a particular order. The Dapr Workflow engine takes care of scheduling and execution of the tasks, including managing failures and retries. If the app hosting your workflows is scaled out across multiple machines, the workflow engine may also load balance the execution of workflows and their tasks across multiple machines. There are several different kinds of tasks that a workflow can schedule, including -- [Activities]({{< ref "workflow-features-concepts.md#workflow-activities" >}}) for executing custom logic -- [Durable timers]({{< ref "workflow-features-concepts.md#durable-timers" >}}) for putting the workflow to sleep for arbitrary lengths of time -- [Child workflows]({{< ref "workflow-features-concepts.md#child-workflows" >}}) for breaking larger workflows into smaller pieces -- [External event waiters]({{< ref "workflow-features-concepts.md#external-events" >}}) for blocking workflows until they receive external event signals. These tasks are described in more details in their corresponding sections. +- [Activities]({{% ref "workflow-features-concepts.md#workflow-activities" %}}) for executing custom logic +- [Durable timers]({{% ref "workflow-features-concepts.md#durable-timers" %}}) for putting the workflow to sleep for arbitrary lengths of time +- [Child workflows]({{% ref "workflow-features-concepts.md#child-workflows" %}}) for breaking larger workflows into smaller pieces +- [External event waiters]({{% ref "workflow-features-concepts.md#external-events" %}}) for blocking workflows until they receive external event signals. These tasks are described in more details in their corresponding sections. ### Workflow identity -Each workflow you define has a type name, and individual executions of a workflow require a unique _instance ID_. Workflow instance IDs can be generated by your app code, which is useful when workflows correspond to business entities like documents or jobs, or can be auto-generated UUIDs. A workflow's instance ID is useful for debugging and also for managing workflows using the [Workflow APIs]({{< ref workflow_api.md >}}). +Each workflow you define has a type name, and individual executions of a workflow require a unique _instance ID_. Workflow instance IDs can be generated by your app code, which is useful when workflows correspond to business entities like documents or jobs, or can be auto-generated UUIDs. A workflow's instance ID is useful for debugging and also for managing workflows using the [Workflow APIs]({{% ref workflow_api.md %}}). Only one workflow instance with a given ID can exist at any given time. However, if a workflow instance completes or fails, its ID can be reused by a new workflow instance. Note, however, that the new workflow instance effectively replaces the old one in the configured state store. @@ -44,13 +44,13 @@ This "replay" behavior continues until the workflow function completes or fails Using this replay technique, a workflow is able to resume execution from any "await" point as if it had never been unloaded from memory. Even the values of local variables from previous runs can be restored without the workflow engine knowing anything about what data they stored. This ability to restore state makes Dapr Workflows _durable_ and _fault tolerant_. {{% alert title="Note" color="primary" %}} -The workflow replay behavior described here requires that workflow function code be _deterministic_. Deterministic workflow functions take the exact same actions when provided the exact same inputs. [Learn more about the limitations around deterministic workflow code.]({{< ref "workflow-features-concepts.md#workflow-determinism-and-code-restraints" >}}) +The workflow replay behavior described here requires that workflow function code be _deterministic_. Deterministic workflow functions take the exact same actions when provided the exact same inputs. [Learn more about the limitations around deterministic workflow code.]({{% ref "workflow-features-concepts.md#workflow-determinism-and-code-restraints" %}}) {{% /alert %}} ### Infinite loops and eternal workflows -As discussed in the [workflow replay]({{< ref "#workflow-replay" >}}) section, workflows maintain a write-only event-sourced history log of all its operations. To avoid runaway resource usage, workflows must limit the number of operations they schedule. For example, ensure your workflow doesn't: +As discussed in the [workflow replay]({{% ref "#workflow-replay" %}}) section, workflows maintain a write-only event-sourced history log of all its operations. To avoid runaway resource usage, workflows must limit the number of operations they schedule. For example, ensure your workflow doesn't: - Use infinite loops in its implementation - Schedule thousands of tasks. @@ -71,9 +71,9 @@ You can use the following two techniques to write workflows that may need to sch ### Updating workflow code -Because workflows are long-running and durable, updating workflow code must be done with extreme care. As discussed in the [workflow determinism]({{< ref "#workflow-determinism-and-code-restraints" >}}) limitation section, workflow code must be deterministic. Updates to workflow code must preserve this determinism if there are any non-completed workflow instances in the system. Otherwise, updates to workflow code can result in runtime failures the next time those workflows execute. +Because workflows are long-running and durable, updating workflow code must be done with extreme care. As discussed in the [workflow determinism]({{% ref "#workflow-determinism-and-code-restraints" %}}) limitation section, workflow code must be deterministic. Updates to workflow code must preserve this determinism if there are any non-completed workflow instances in the system. Otherwise, updates to workflow code can result in runtime failures the next time those workflows execute. -[See known limitations]({{< ref "#limitations" >}}) +[See known limitations]({{% ref "#limitations" %}}) ## Workflow activities @@ -95,7 +95,7 @@ Child workflows have many benefits: The return value of a child workflow is its output. If a child workflow fails with an exception, then that exception is surfaced to the parent workflow, just like it is when an activity task fails with an exception. Child workflows also support automatic retry policies. -Terminating a parent workflow terminates all of the child workflows created by the workflow instance. See [the terminate workflow api]({{< ref "workflow_api.md#terminate-workflow-request" >}}) for more information. +Terminating a parent workflow terminates all of the child workflows created by the workflow instance. See [the terminate workflow api]({{% ref "workflow_api.md#terminate-workflow-request" %}}) for more information. ## Durable timers @@ -107,7 +107,7 @@ Some APIs in the workflow authoring SDK may internally schedule durable timers t ## Retry policies -Workflows support durable retry policies for activities and child workflows. Workflow retry policies are separate and distinct from [Dapr resiliency policies]({{< ref "resiliency-overview.md" >}}) in the following ways. +Workflows support durable retry policies for activities and child workflows. Workflow retry policies are separate and distinct from [Dapr resiliency policies]({{% ref "resiliency-overview.md" %}}) in the following ways. - Workflow retry policies are configured by the workflow author in code, whereas Dapr Resiliency policies are configured by the application operator in YAML. - Workflow retry policies are durable and maintain their state across application restarts, whereas Dapr Resiliency policies are not durable and must be re-applied after application restarts. @@ -116,10 +116,10 @@ Workflows support durable retry policies for activities and child workflows. Wor Retries are internally implemented using durable timers. This means that workflows can be safely unloaded from memory while waiting for a retry to fire, conserving system resources. This also means that delays between retries can be arbitrarily long, including minutes, hours, or even days. {{% alert title="Note" color="primary" %}} -The actions performed by a retry policy are saved into a workflow's history. Care must be taken not to change the behavior of a retry policy after a workflow has already been executed. Otherwise, the workflow may behave unexpectedly when replayed. See the notes on [updating workflow code]({{< ref "#updating-workflow-code" >}}) for more information. +The actions performed by a retry policy are saved into a workflow's history. Care must be taken not to change the behavior of a retry policy after a workflow has already been executed. Otherwise, the workflow may behave unexpectedly when replayed. See the notes on [updating workflow code]({{% ref "#updating-workflow-code" %}}) for more information. {{% /alert %}} -It's possible to use both workflow retry policies and Dapr Resiliency policies together. For example, if a workflow activity uses a Dapr client to invoke a service, the Dapr client uses the configured resiliency policy. See [Quickstart: Service-to-service resiliency]({{< ref "resiliency-serviceinvo-quickstart.md" >}}) for more information with an example. However, if the activity itself fails for any reason, including exhausting the retries on the resiliency policy, then the workflow's resiliency policy kicks in. +It's possible to use both workflow retry policies and Dapr Resiliency policies together. For example, if a workflow activity uses a Dapr client to invoke a service, the Dapr client uses the configured resiliency policy. See [Quickstart: Service-to-service resiliency]({{% ref "resiliency-serviceinvo-quickstart.md" %}}) for more information with an example. However, if the activity itself fails for any reason, including exhausting the retries on the resiliency policy, then the workflow's resiliency policy kicks in. {{% alert title="Note" color="primary" %}} Using workflow retry policies and resiliency policies together can result in unexpected behavior. For example, if a workflow activity exhausts its configured retry policy, the workflow engine will still retry the activity according to the workflow retry policy. This can result in the activity being retried more times than expected. @@ -143,7 +143,7 @@ External events have a _name_ and a _payload_ and are delivered to a single work Workflows can also wait for multiple external event signals of the same name, in which case they are dispatched to the corresponding workflow tasks in a first-in, first-out (FIFO) manner. If a workflow receives an external event signal but has not yet created a "wait for external event" task, the event will be saved into the workflow's history and consumed immediately after the workflow requests the event. -Learn more about [external system interaction.]({{< ref "workflow-patterns.md#external-system-interaction" >}}) +Learn more about [external system interaction.]({{% ref "workflow-patterns.md#external-system-interaction" %}}) ## Workflow backend @@ -161,7 +161,7 @@ In that sense, it's similar to Dapr's state store abstraction, except designed s Workflow state can be purged from a state store, purging all its history and removing all metadata related to a specific workflow instance. The purge capability is used for workflows that have run to a `COMPLETED`, `FAILED`, or `TERMINATED` state. -Learn more in [the workflow API reference guide]({{< ref workflow_api.md >}}). +Learn more in [the workflow API reference guide]({{% ref workflow_api.md %}}). ## Limitations @@ -176,9 +176,9 @@ APIs that generate random numbers, random UUIDs, or the current date are _non-de For example, instead of this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // DON'T DO THIS! @@ -187,9 +187,9 @@ Guid newIdentifier = Guid.NewGuid(); string randomString = GetRandomString(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // DON'T DO THIS! @@ -198,9 +198,9 @@ UUID newIdentifier = UUID.randomUUID(); String randomString = getRandomString(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript // DON'T DO THIS! @@ -209,24 +209,24 @@ const newIdentifier = uuidv4(); const randomString = getRandomString(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // DON'T DO THIS! const currentTime = time.Now() ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Do this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // Do this!! @@ -235,9 +235,9 @@ Guid newIdentifier = context.NewGuid(); string randomString = await context.CallActivityAsync(nameof("GetRandomString")); //Use "nameof" to prevent specifying an activity name that does not exist in your application ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // Do this!! @@ -246,9 +246,9 @@ Guid newIdentifier = context.newGuid(); String randomString = context.callActivity(GetRandomString.class.getName(), String.class).await(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript // Do this!! @@ -256,17 +256,17 @@ const currentTime = context.getCurrentUtcDateTime(); const randomString = yield context.callActivity(getRandomString); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go const currentTime = ctx.CurrentUTCDateTime() ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Workflow functions must only interact _indirectly_ with external state. @@ -276,18 +276,18 @@ Instead, workflows should interact with external state _indirectly_ using workfl For example, instead of this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // DON'T DO THIS! string configuration = Environment.GetEnvironmentVariable("MY_CONFIGURATION")!; string data = await new HttpClient().GetStringAsync("https://example.com/api/data"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // DON'T DO THIS! @@ -297,9 +297,9 @@ HttpRequest request = HttpRequest.newBuilder().uri(new URI("https://postman-echo HttpResponse response = HttpClient.newBuilder().build().send(request, HttpResponse.BodyHandlers.ofString()); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript // DON'T DO THIS! @@ -316,25 +316,25 @@ fetch('https://postman-echo.com/get') }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // DON'T DO THIS! resp, err := http.Get("http://example.com/api/data") ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Do this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // Do this!! @@ -342,9 +342,9 @@ string configuration = workflowInput.Configuration; // imaginary workflow input string data = await context.CallActivityAsync(nameof("MakeHttpCall"), "https://example.com/api/data"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // Do this!! @@ -352,9 +352,9 @@ String configuration = ctx.getInput(InputType.class).getConfiguration(); // imag String data = ctx.callActivity(MakeHttpCall.class, "https://example.com/api/data", String.class).await(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript // Do this!! @@ -362,10 +362,10 @@ const configuration = workflowInput.getConfiguration(); // imaginary workflow in const data = yield ctx.callActivity(makeHttpCall, "https://example.com/api/data"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // Do this!! @@ -373,8 +373,8 @@ err := ctx.CallActivity(MakeHttpCallActivity, workflow.ActivityInput("https://ex ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} #### Workflow functions must execute only on the workflow dispatch thread. @@ -386,18 +386,18 @@ Failure to follow this rule could result in undefined behavior. Any background p For example, instead of this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // DON'T DO THIS! Task t = Task.Run(() => context.CallActivityAsync("DoSomething")); await context.CreateTimer(5000).ConfigureAwait(false); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // DON'T DO THIS! @@ -407,15 +407,15 @@ new Thread(() -> { ctx.createTimer(Duration.ofSeconds(5)).await(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Don't declare JavaScript workflow as `async`. The Node.js runtime doesn't guarantee that asynchronous functions are deterministic. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // DON'T DO THIS! @@ -425,17 +425,17 @@ go func() { err := ctx.CreateTimer(time.Second).Await(nil) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Do this: -{{< tabs ".NET" Java JavaScript Go >}} +{{% tabpane ".NET" Java JavaScript Go %}} -{{% codetab %}} +{{% tab %}} ```csharp // Do this!! @@ -443,9 +443,9 @@ Task t = context.CallActivityAsync(nameof("DoSomething")); await context.CreateTimer(5000).ConfigureAwait(true); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java // Do this!! @@ -453,15 +453,15 @@ ctx.callActivity(DoSomethingActivity.class.getName()).await(); ctx.createTimer(Duration.ofSeconds(5)).await(); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Since the Node.js runtime doesn't guarantee that asynchronous functions are deterministic, always declare JavaScript workflow as synchronous generator functions. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go // Do this! @@ -469,9 +469,9 @@ task := ctx.CallActivity(DoSomething) task.Await(nil) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Updating workflow code @@ -497,9 +497,9 @@ To work around these constraints: ## Related links -- [Try out Dapr Workflow using the quickstart]({{< ref workflow-quickstart.md >}}) -- [Workflow overview]({{< ref workflow-overview.md >}}) -- [Workflow API reference]({{< ref workflow_api.md >}}) +- [Try out Dapr Workflow using the quickstart]({{% ref workflow-quickstart.md %}}) +- [Workflow overview]({{% ref workflow-overview.md %}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) - Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript](https://github.com/dapr/js-sdk/tree/main/examples/workflow) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md index a4447fc652c..a53d5e8c52d 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-overview.md @@ -33,19 +33,19 @@ With Dapr Workflow, you can write activities and then orchestrate those activiti - The basic unit of work in a workflow - Used for calling other (Dapr) services, interacting with state stores, and pub/sub brokers. -[Learn more about workflow activities.]({{< ref "workflow-features-concepts.md##workflow-activities" >}}) +[Learn more about workflow activities.]({{% ref "workflow-features-concepts.md##workflow-activities" %}}) ### Child workflows In addition to activities, you can write workflows to schedule other workflows as child workflows. A child workflow has its own instance ID, history, and status that is independent of the parent workflow that started it, except for the fact that terminating the parent workflow terminates all of the child workflows created by it. Child workflow also supports automatic retry policies. -[Learn more about child workflows.]({{< ref "workflow-features-concepts.md#child-workflows" >}}) +[Learn more about child workflows.]({{% ref "workflow-features-concepts.md#child-workflows" %}}) ### Timers and reminders Same as Dapr actors, you can schedule reminder-like durable delays for any time range. -[Learn more about workflow timers]({{< ref "workflow-features-concepts.md#durable-timers" >}}) and [reminders]({{< ref "workflow-architecture.md#reminder-usage-and-execution-guarantees" >}}) +[Learn more about workflow timers]({{% ref "workflow-features-concepts.md#durable-timers" %}}) and [reminders]({{% ref "workflow-architecture.md#reminder-usage-and-execution-guarantees" %}}) ### Workflow HTTP calls to manage a workflow @@ -57,13 +57,13 @@ When you create an application with workflow code and run it with Dapr, you can - Purged from your state store through a POST request - Queried for workflow status through a GET request -[Learn more about how manage a workflow using HTTP calls.]({{< ref workflow_api.md >}}) +[Learn more about how manage a workflow using HTTP calls.]({{% ref workflow_api.md %}}) ## Workflow patterns Dapr Workflow simplifies complex, stateful coordination requirements in microservice architectures. The following sections describe several application patterns that can benefit from Dapr Workflow. -Learn more about [different types of workflow patterns]({{< ref workflow-patterns.md >}}) +Learn more about [different types of workflow patterns]({{% ref workflow-patterns.md %}}) ## Workflow SDKs @@ -89,7 +89,7 @@ Want to put workflows to the test? Walk through the following quickstart and tut | Quickstart/tutorial | Description | | ------------------- | ----------- | -| [Workflow quickstart]({{< ref workflow-quickstart.md >}}) | Run a workflow application with four workflow activities to see Dapr Workflow in action | +| [Workflow quickstart]({{% ref workflow-quickstart.md %}}) | Run a workflow application with four workflow activities to see Dapr Workflow in action | | [Workflow Python SDK example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) | Learn how to create a Dapr Workflow and invoke it using the Python `dapr-ext-workflow` package. | | [Workflow JavaScript SDK example](https://github.com/dapr/js-sdk/tree/main/examples/workflow) | Learn how to create a Dapr Workflow and invoke it using the JavaScript SDK. | | [Workflow .NET SDK example](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) | Learn how to create a Dapr Workflow and invoke it using ASP.NET Core web APIs. | @@ -98,7 +98,7 @@ Want to put workflows to the test? Walk through the following quickstart and tut ### Start using workflows directly in your app -Want to skip the quickstarts? Not a problem. You can try out the workflow building block directly in your application. After [Dapr is installed]({{< ref install-dapr-cli.md >}}), you can begin using workflows, starting with [how to author a workflow]({{< ref howto-author-workflow.md >}}). +Want to skip the quickstarts? Not a problem. You can try out the workflow building block directly in your application. After [Dapr is installed]({{% ref install-dapr-cli.md %}}), you can begin using workflows, starting with [how to author a workflow]({{% ref howto-author-workflow.md %}}). ## Limitations @@ -116,7 +116,7 @@ Watch [this video for an overview on Dapr Workflow](https://youtu.be/s1p9MNl4VGo ## Related links -- [Workflow API reference]({{< ref workflow_api.md >}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) - Try out the full SDK examples: - [Python example](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript example](https://github.com/dapr/js-sdk/tree/main/examples/workflow) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md index ee59dd1d390..1edb947de43 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md @@ -25,9 +25,9 @@ While the pattern is simple, there are many complexities hidden in the implement Dapr Workflow solves these complexities by allowing you to implement the task chaining pattern concisely as a simple function in the programming language of your choice, as shown in the following example. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python @@ -70,9 +70,9 @@ def error_handler(ctx, error): > **Note** Workflow retry policies will be available in a future version of the Python SDK. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript @@ -144,9 +144,9 @@ start().catch((e) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -177,9 +177,9 @@ catch (TaskFailedException) // Task failures are surfaced as TaskFailedException > **Note** In the example above, `"Step1"`, `"Step2"`, `"Step3"`, and `"MyCompensation"` represent workflow activities, which are functions in your code that actually implement the steps of the workflow. For brevity, these activity implementations are left out of this example. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -232,9 +232,9 @@ public class ChainWorkflow extends Workflow { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -283,9 +283,9 @@ func Step3(ctx workflow.ActivityContext) (any, error) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} As you can see, the workflow is expressed as a simple series of statements in the programming language of your choice. This allows any engineer in the organization to quickly understand the end-to-end flow without necessarily needing to understand the end-to-end system architecture. @@ -303,7 +303,7 @@ In the fan-out/fan-in design pattern, you execute multiple tasks simultaneously Diagram showing how the fan-out/fan-in workflow pattern works -In addition to the challenges mentioned in [the previous pattern]({{< ref "workflow-patterns.md#task-chaining" >}}), there are several important questions to consider when implementing the fan-out/fan-in pattern manually: +In addition to the challenges mentioned in [the previous pattern]({{% ref "workflow-patterns.md#task-chaining" %}}), there are several important questions to consider when implementing the fan-out/fan-in pattern manually: - How do you control the degree of parallelism? - How do you know when to trigger subsequent aggregation steps? @@ -311,9 +311,9 @@ In addition to the challenges mentioned in [the previous pattern]({{< ref "workf Dapr Workflows provides a way to express the fan-out/fan-in pattern as a simple function, as shown in the following example: -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python @@ -351,9 +351,9 @@ def process_results(ctx, final_result: int): print(f'Final result: {final_result}.') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript @@ -405,7 +405,7 @@ async function start() { // Return a result for the given work item, which is also a random number in this case // For more information about random numbers in workflow please check - // https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-code-constraints?tabs=csharp#random-numbers + // https://learn.microsoft.com/azure/azure-functions/durable/durable-functions-code-constraints?tabpane=csharp#random-numbers return Math.floor(Math.random() * 11); } @@ -459,9 +459,9 @@ start().catch((e) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -484,9 +484,9 @@ int sum = parallelTasks.Sum(t => t.Result); await context.CallActivityAsync("PostResults", sum); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -510,9 +510,9 @@ public class FaninoutWorkflow extends Workflow { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -576,9 +576,9 @@ func ProcessResults(ctx workflow.ActivityContext) (any, error) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The key takeaways from this example are: @@ -590,9 +590,9 @@ Furthermore, the execution of the workflow is durable. If a workflow starts 100 It's possible to go further and limit the degree of concurrency using simple, language-specific constructs. The sample code below illustrates how to restrict the degree of fan-out to just 5 concurrent activity executions: -{{< tabs ".NET" >}} +{{% tabpane ".NET" %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -620,9 +620,9 @@ var sum = results.Sum(t => t); await context.CallActivityAsync("PostResults", sum); ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Limiting the degree of concurrency in this way can be useful for limiting contention against shared resources. For example, if the activities need to call into external resources that have their own concurrency limits, like a databases or external APIs, it can be useful to ensure that no more than a specified number of activities call that resource concurrently. @@ -714,11 +714,11 @@ The following diagram provides a rough illustration of this pattern. Depending on the business needs, there may be a single monitor or there may be multiple monitors, one for each business entity (for example, a stock). Furthermore, the amount of time to sleep may need to change, depending on the circumstances. These requirements make using cron-based scheduling systems impractical. -Dapr Workflow supports this pattern natively by allowing you to implement _eternal workflows_. Rather than writing infinite while-loops ([which is an anti-pattern]({{< ref "workflow-features-concepts.md#infinite-loops-and-eternal-workflows" >}})), Dapr Workflow exposes a _continue-as-new_ API that workflow authors can use to restart a workflow function from the beginning with a new input. +Dapr Workflow supports this pattern natively by allowing you to implement _eternal workflows_. Rather than writing infinite while-loops ([which is an anti-pattern]({{% ref "workflow-features-concepts.md#infinite-loops-and-eternal-workflows" %}})), Dapr Workflow exposes a _continue-as-new_ API that workflow authors can use to restart a workflow function from the beginning with a new input. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python @@ -763,9 +763,9 @@ def send_alert(ctx, message: str): print(f'*** Alert: {message}') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript @@ -791,9 +791,9 @@ const statusMonitorWorkflow: TWorkflow = async function* (ctx: WorkflowContext): }; ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -832,9 +832,9 @@ public override async Task RunAsync(WorkflowContext context, MyEntitySta > This example assumes you have a predefined `MyEntityState` class with a boolean `IsHealthy` property. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -874,9 +874,9 @@ public class MonitorWorkflow extends Workflow { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -927,9 +927,9 @@ func SendAlert(ctx workflow.ActivityContext) (any, error) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} A workflow implementing the monitor pattern can loop forever or it can terminate itself gracefully by not calling _continue-as-new_. @@ -939,9 +939,9 @@ This pattern can also be expressed using actors and reminders. The difference is ## External system interaction -In some cases, a workflow may need to pause and wait for an external system to perform some action. For example, a workflow may need to pause and wait for a payment to be received. In this case, a payment system might publish an event to a pub/sub topic on receipt of a payment, and a listener on that topic can raise an event to the workflow using the [raise event workflow API]({{< ref "howto-manage-workflow.md#raise-an-event" >}}). +In some cases, a workflow may need to pause and wait for an external system to perform some action. For example, a workflow may need to pause and wait for a payment to be received. In this case, a payment system might publish an event to a pub/sub topic on receipt of a payment, and a listener on that topic can raise an event to the workflow using the [raise event workflow API]({{% ref "howto-manage-workflow.md#raise-an-event" %}}). -Another very common scenario is when a workflow needs to pause and wait for a human, for example when approving a purchase order. Dapr Workflow supports this event pattern via the [external events]({{< ref "workflow-features-concepts.md#external-events" >}}) feature. +Another very common scenario is when a workflow needs to pause and wait for a human, for example when approving a purchase order. Dapr Workflow supports this event pattern via the [external events]({{% ref "workflow-features-concepts.md#external-events" %}}) feature. Here's an example workflow for a purchase order involving a human: @@ -957,9 +957,9 @@ The following diagram illustrates this flow. The following example code shows how this pattern can be implemented using Dapr Workflow. -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python @@ -1016,9 +1016,9 @@ def place_order(_, order: Order) -> None: print(f'*** Placing order: {order}') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript @@ -1156,9 +1156,9 @@ start().catch((e) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -1200,9 +1200,9 @@ public override async Task RunAsync(WorkflowContext context, OrderP > **Note** In the example above, `RequestApprovalActivity` is the name of a workflow activity to invoke and `ApprovalResult` is an enumeration defined by the workflow app. For brevity, these definitions were left out of the example code. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -1237,9 +1237,9 @@ public class ExternalSystemInteractionWorkflow extends Workflow { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -1294,15 +1294,15 @@ func PlaceOrder(ctx workflow.ActivityContext) (any, error) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} -The code that delivers the event to resume the workflow execution is external to the workflow. Workflow events can be delivered to a waiting workflow instance using the [raise event]({{< ref "howto-manage-workflow.md#raise-an-event" >}}) workflow management API, as shown in the following example: +The code that delivers the event to resume the workflow execution is external to the workflow. Workflow events can be delivered to a waiting workflow instance using the [raise event]({{% ref "howto-manage-workflow.md#raise-an-event" %}}) workflow management API, as shown in the following example: -{{< tabs Python JavaScript ".NET" Java Go >}} +{{% tabpane Python JavaScript ".NET" Java Go %}} -{{% codetab %}} +{{% tab %}} ```python @@ -1317,9 +1317,9 @@ with DaprClient() as d: event_data=asdict(Approval("Jane Doe"))) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript @@ -1330,9 +1330,9 @@ import { DaprClient } from "@dapr/dapr"; } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```csharp @@ -1344,9 +1344,9 @@ await daprClient.RaiseWorkflowEventAsync( eventData: ApprovalResult.Approved); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java @@ -1354,9 +1354,9 @@ System.out.println("**SendExternalMessage: RestartEvent**"); client.raiseEvent(restartingInstanceId, "RestartEvent", "RestartEventPayload"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go @@ -1380,9 +1380,9 @@ func raiseEvent() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} External events don't have to be directly triggered by humans. They can also be triggered by other systems. For example, a workflow may need to pause and wait for a payment to be received. In this case, a payment system might publish an event to a pub/sub topic on receipt of a payment, and a listener on that topic can raise an event to the workflow using the raise event workflow API. @@ -1392,9 +1392,9 @@ External events don't have to be directly triggered by humans. They can also be ## Related links -- [Try out Dapr Workflows using the quickstart]({{< ref workflow-quickstart.md >}}) -- [Workflow overview]({{< ref workflow-overview.md >}}) -- [Workflow API reference]({{< ref workflow_api.md >}}) +- [Try out Dapr Workflows using the quickstart]({{% ref workflow-quickstart.md %}}) +- [Workflow overview]({{% ref workflow-overview.md %}}) +- [Workflow API reference]({{% ref workflow_api.md %}}) - Try out the following examples: - [Python](https://github.com/dapr/python-sdk/tree/master/examples/demo_workflow) - [JavaScript](https://github.com/dapr/js-sdk/tree/main/examples/workflow) diff --git a/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-dapr-services.md b/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-dapr-services.md index 893376e97b9..06b263b2d39 100644 --- a/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-dapr-services.md +++ b/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-dapr-services.md @@ -16,7 +16,7 @@ This guide will cover how to use Dapr debugging binaries to debug the Dapr servi ### Pre-requisites -- Familiarize yourself with [this guide]({{< ref kubernetes-deploy.md >}}) to learn how to deploy Dapr to your Kubernetes cluster. +- Familiarize yourself with [this guide]({{% ref kubernetes-deploy.md %}}) to learn how to deploy Dapr to your Kubernetes cluster. - Setup your [dev environment](https://github.com/dapr/dapr/blob/master/docs/development/developing-dapr.md) - [Helm](https://github.com/helm/helm/releases) @@ -109,6 +109,6 @@ All done. Now you can point to port 40000 and start a remote debug session from ## Related links -- [Overview of Dapr on Kubernetes]({{< ref kubernetes-overview >}}) -- [Deploy Dapr to a Kubernetes cluster]({{< ref kubernetes-deploy >}}) +- [Overview of Dapr on Kubernetes]({{% ref kubernetes-overview %}}) +- [Deploy Dapr to a Kubernetes cluster]({{% ref kubernetes-deploy %}}) - [Dapr Kubernetes Quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) diff --git a/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-daprd.md b/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-daprd.md index 24aca6c85a4..ca2769fb466 100644 --- a/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-daprd.md +++ b/daprdocs/content/en/developing-applications/debugging/debug-k8s/debug-daprd.md @@ -11,12 +11,12 @@ description: "How to debug the Dapr sidecar (daprd) on your Kubernetes cluster" Sometimes it is necessary to understand what's going on in the Dapr sidecar (daprd), which runs as a sidecar next to your application, especially when you diagnose your Dapr application and wonder if there's something wrong in Dapr itself. Additionally, you may be developing a new feature for Dapr on Kubernetes and want to debug your code. -This guide covers how to use built-in Dapr debugging to debug the Dapr sidecar in your Kubernetes pods. To learn how to view logs and troubleshoot Dapr in Kubernetes, see the [Configure and view Dapr logs guide]({{< ref "logs-troubleshooting.md#logs-in-kubernetes-mode" >}}) +This guide covers how to use built-in Dapr debugging to debug the Dapr sidecar in your Kubernetes pods. To learn how to view logs and troubleshoot Dapr in Kubernetes, see the [Configure and view Dapr logs guide]({{% ref "logs-troubleshooting.md#logs-in-kubernetes-mode" %}}) ## Pre-requisites -- Refer to [this guide]({{< ref kubernetes-deploy.md >}}) to learn how to deploy Dapr to your Kubernetes cluster. -- Follow [this guide]({{< ref "debug-dapr-services.md">}}) to build the Dapr debugging binaries you will be deploying in the next step. +- Refer to [this guide]({{% ref kubernetes-deploy.md %}}) to learn how to deploy Dapr to your Kubernetes cluster. +- Follow [this guide]({{% ref "debug-dapr-services.md"%}}) to build the Dapr debugging binaries you will be deploying in the next step. ## Initialize Dapr in debug mode @@ -26,7 +26,7 @@ If Dapr has already been installed in your Kubernetes cluster, uninstall it firs ```bash dapr uninstall -k ``` -We will use 'helm' to install Dapr debugging binaries. For more information refer to [Install with Helm]({{< ref "kubernetes-deploy.md#install-with-helm-advanced" >}}). +We will use 'helm' to install Dapr debugging binaries. For more information refer to [Install with Helm]({{% ref "kubernetes-deploy.md#install-with-helm-advanced" %}}). First configure a values file named `values.yml` with these options: @@ -145,7 +145,7 @@ See the presentation on troubleshooting Dapr on Kubernetes in the [Dapr Communit ## Related links -- [Overview of Dapr on Kubernetes]({{< ref kubernetes-overview >}}) -- [Deploy Dapr to a Kubernetes cluster]({{< ref kubernetes-deploy >}}) -- [Debug Dapr services on Kubernetes]({{< ref debug-dapr-services >}}) +- [Overview of Dapr on Kubernetes]({{% ref kubernetes-overview %}}) +- [Deploy Dapr to a Kubernetes cluster]({{% ref kubernetes-deploy %}}) +- [Debug Dapr services on Kubernetes]({{% ref debug-dapr-services %}}) - [Dapr Kubernetes Quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/develop-components/develop-middleware.md b/daprdocs/content/en/developing-applications/develop-components/develop-middleware.md index 571f29bb947..c3a5aab6ee0 100644 --- a/daprdocs/content/en/developing-applications/develop-components/develop-middleware.md +++ b/daprdocs/content/en/developing-applications/develop-components/develop-middleware.md @@ -9,7 +9,7 @@ aliases: - /concepts/middleware-concept/ --- -Dapr allows custom processing pipelines to be defined by chaining a series of middleware components. In this guide, you'll learn how to create a middleware component. To learn how to configure an existing middleware component, see [Configure middleware components]({{< ref middleware.md >}}) +Dapr allows custom processing pipelines to be defined by chaining a series of middleware components. In this guide, you'll learn how to create a middleware component. To learn how to configure an existing middleware component, see [Configure middleware components]({{% ref middleware.md %}}) ## Writing a custom HTTP middleware @@ -48,6 +48,6 @@ func (m *customMiddleware) GetHandler(metadata middleware.Metadata) (func(next h ## Related links -- [Component schema]({{< ref component-schema.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Component schema]({{% ref component-schema.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) - [API middleware sample](https://github.com/dapr/samples/tree/master/middleware-oauth-google) diff --git a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/develop-pluggable.md b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/develop-pluggable.md index 5868eabffd0..29d811af799 100644 --- a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/develop-pluggable.md +++ b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/develop-pluggable.md @@ -6,7 +6,7 @@ weight: 1100 description: "Learn how to author and implement pluggable components" --- -In this guide, you'll learn why and how to implement a [pluggable component]({{< ref pluggable-components-overview >}}). To learn how to configure and register a pluggable component, refer to [How to: Register a pluggable component]({{< ref pluggable-components-registration.md >}}) +In this guide, you'll learn why and how to implement a [pluggable component]({{% ref pluggable-components-overview %}}). To learn how to configure and register a pluggable component, refer to [How to: Register a pluggable component]({{% ref pluggable-components-registration.md %}}) ## Implement a pluggable component @@ -25,10 +25,10 @@ Currently, the following component APIs are supported: | Component | Type | gRPC definition | Built-in Reference Implementation | Docs | | :---------: | :--------: | :--------------: | :----------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| State Store | `state` | [state.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/state.proto) | [Redis](https://github.com/dapr/components-contrib/tree/master/state/redis) | [concept]({{< ref "state-management-overview" >}}), [howto]({{< ref "howto-get-save-state" >}}), [api spec]({{< ref "state_api" >}}) | -| Pub/sub | `pubsub` | [pubsub.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/pubsub.proto) | [Redis](https://github.com/dapr/components-contrib/tree/master/pubsub/redis) | [concept]({{< ref "pubsub-overview" >}}), [howto]({{< ref "howto-publish-subscribe" >}}), [api spec]({{< ref "pubsub_api" >}}) | -| Bindings | `bindings` | [bindings.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/bindings.proto) | [Kafka](https://github.com/dapr/components-contrib/tree/master/bindings/kafka) | [concept]({{< ref "bindings-overview" >}}), [input howto]({{< ref "howto-triggers" >}}), [output howto]({{< ref "howto-bindings" >}}), [api spec]({{< ref "bindings_api" >}}) | -| Secret Store | `secretstores` | [secretstore.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/secretstore.proto) | [Hashicorp/Vault](https://github.com/dapr/components-contrib/blob/master/secretstores/hashicorp/vault/vault.go) | [concept]({{< ref "secrets-overview" >}}), [howto-secrets]({{< ref "howto-secrets" >}}), [api spec]({{< ref "secrets_api" >}}) | +| State Store | `state` | [state.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/state.proto) | [Redis](https://github.com/dapr/components-contrib/tree/master/state/redis) | [concept]({{% ref "state-management-overview" %}}), [howto]({{% ref "howto-get-save-state" %}}), [api spec]({{% ref "state_api" %}}) | +| Pub/sub | `pubsub` | [pubsub.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/pubsub.proto) | [Redis](https://github.com/dapr/components-contrib/tree/master/pubsub/redis) | [concept]({{% ref "pubsub-overview" %}}), [howto]({{% ref "howto-publish-subscribe" %}}), [api spec]({{% ref "pubsub_api" %}}) | +| Bindings | `bindings` | [bindings.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/bindings.proto) | [Kafka](https://github.com/dapr/components-contrib/tree/master/bindings/kafka) | [concept]({{% ref "bindings-overview" %}}), [input howto]({{% ref "howto-triggers" %}}), [output howto]({{% ref "howto-bindings" %}}), [api spec]({{% ref "bindings_api" %}}) | +| Secret Store | `secretstores` | [secretstore.proto](https://github.com/dapr/dapr/blob/master/dapr/proto/components/v1/secretstore.proto) | [Hashicorp/Vault](https://github.com/dapr/components-contrib/blob/master/secretstores/hashicorp/vault/vault.go) | [concept]({{% ref "secrets-overview" %}}), [howto-secrets]({{% ref "howto-secrets" %}}), [api spec]({{% ref "secrets_api" %}}) | Below is a snippet of the gRPC service definition for pluggable component state stores ([state.proto]): @@ -121,13 +121,13 @@ Returning semantic errors are also part of the pluggable component protocol. The | ETag Invalid | `codes.InvalidArgument` | State store | | | Bulk Delete Row Mismatch | `codes.Internal` | State store | | -Learn more about concurrency requirements in the [State Management overview]({{< ref "state-management-overview.md#concurrency" >}}). +Learn more about concurrency requirements in the [State Management overview]({{% ref "state-management-overview.md#concurrency" %}}). The following examples demonstrate how to return an error in your own pluggable component, changing the messages to suit your needs. -{{< tabs ".NET" "Java" "Go" >}} +{{% tabpane ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} > **Important:** In order to use .NET for error mapping, first install the [`Google.Api.CommonProtos` NuGet package](https://www.nuget.org/packages/Google.Api.CommonProtos/). @@ -200,10 +200,10 @@ metadata.Add("grpc-status-details-bin", status.ToByteArray()); throw new RpcException(new Grpc.Core.Status(baseStatusCode, "fake-err-msg"), metadata); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Just like the [Dapr Java SDK](https://github.com/tmacam/dapr-java-sdk/), the Java Pluggable Components SDK uses [Project Reactor](https://projectreactor.io/), which provides an asynchronous API for Java. @@ -257,10 +257,10 @@ final Status status = Status.newBuilder() return Mono.error(StatusProto.toStatusException(status)); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} **ETag Mismatch** @@ -302,12 +302,12 @@ br.Metadata = map[string]string{ st, err := st.WithDetails(br) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps - Get started with developing .NET pluggable component using this [sample code](https://github.com/dapr/samples/tree/master/pluggable-components-dotnet-template) -- [Review the pluggable components overview]({{< ref pluggable-components-overview.md >}}) -- [Learn how to register your pluggable component]({{< ref pluggable-components-registration >}}) \ No newline at end of file +- [Review the pluggable components overview]({{% ref pluggable-components-overview.md %}}) +- [Learn how to register your pluggable component]({{% ref pluggable-components-registration %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-overview.md b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-overview.md index bdee6b540d6..5d696b0b7ff 100644 --- a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-overview.md +++ b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-overview.md @@ -45,7 +45,7 @@ In order to implement a pluggable component, you need to implement a gRPC servic 1. Create service scaffolding 1. Define the service -Learn more about [how to develop and implement a pluggable component]({{< ref develop-pluggable.md >}}) +Learn more about [how to develop and implement a pluggable component]({{% ref develop-pluggable.md %}}) ### Leverage multiple building blocks for a component @@ -55,11 +55,11 @@ While exposing multiple component interfaces on the same pluggable component low ## Operationalize a pluggable component -Built-in components and pluggable components share one thing in common: both need a [component specification]({{< ref "components-concept.md#component-specification" >}}). Built-in components do not require any extra steps to be used: Dapr is ready to use them automatically. +Built-in components and pluggable components share one thing in common: both need a [component specification]({{% ref "components-concept.md#component-specification" %}}). Built-in components do not require any extra steps to be used: Dapr is ready to use them automatically. In contrast, pluggable components require additional steps before they can communicate with Dapr. You need to first run the component and facilitate Dapr-component communication to kick off the registration process. ## Next steps -- [Implement a pluggable component]({{< ref develop-pluggable.md >}}) -- [Pluggable component registration]({{< ref "pluggable-components-registration" >}}) +- [Implement a pluggable component]({{% ref develop-pluggable.md %}}) +- [Pluggable component registration]({{% ref "pluggable-components-registration" %}}) diff --git a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-sdks/_index.md b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-sdks/_index.md index 3720c8736fc..03c9925fa58 100644 --- a/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-sdks/_index.md +++ b/daprdocs/content/en/developing-applications/develop-components/pluggable-components/pluggable-components-sdks/_index.md @@ -14,5 +14,5 @@ The Dapr SDKs are the easiest way for you to create pluggable components. Choose | Language | Status | |----------|:------:| -| [Go]({{< ref pluggable-components-go >}}) | In development | -| [.NET]({{< ref pluggable-components-dotnet >}}) | In development | +| [Go]({{% ref pluggable-components-go %}}) | In development | +| [.NET]({{% ref pluggable-components-dotnet %}}) | In development | diff --git a/daprdocs/content/en/developing-applications/error-codes/error-codes-reference.md b/daprdocs/content/en/developing-applications/error-codes/error-codes-reference.md index 494a123ef50..24ff7ef5a06 100644 --- a/daprdocs/content/en/developing-applications/error-codes/error-codes-reference.md +++ b/daprdocs/content/en/developing-applications/error-codes/error-codes-reference.md @@ -8,7 +8,7 @@ weight: 20 The following tables list the error codes returned by Dapr runtime. The error codes are returned in the response body of an HTTP request or in the `ErrorInfo` section of a gRPC status response, if one is present. -An effort is underway to enrich all gRPC error responses according to the [Richer Error Model]({{< ref "grpc-error-codes.md#richer-grpc-error-model" >}}). Error codes without a corresponding gRPC code indicate those errors have not yet been updated to this model. +An effort is underway to enrich all gRPC error responses according to the [Richer Error Model]({{% ref "grpc-error-codes.md#richer-grpc-error-model" %}}). Error codes without a corresponding gRPC code indicate those errors have not yet been updated to this model. ### Actors API @@ -202,5 +202,5 @@ An effort is underway to enrich all gRPC error responses according to the [Riche ## Next steps -- [Handling HTTP error codes]({{< ref http-error-codes.md >}}) -- [Handling gRPC error codes]({{< ref grpc-error-codes.md >}}) \ No newline at end of file +- [Handling HTTP error codes]({{% ref http-error-codes.md %}}) +- [Handling gRPC error codes]({{% ref grpc-error-codes.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/error-codes/errors-overview.md b/daprdocs/content/en/developing-applications/error-codes/errors-overview.md index 762413fb7f7..22001762894 100644 --- a/daprdocs/content/en/developing-applications/error-codes/errors-overview.md +++ b/daprdocs/content/en/developing-applications/error-codes/errors-overview.md @@ -29,7 +29,7 @@ Some of the most common errors returned include: - ERR_STATE_STORE_NOT_FOUND - ERR_HEALTH_NOT_READY -> **Note:** [See a full list of error codes in Dapr.]({{< ref error-codes-reference.md >}}) +> **Note:** [See a full list of error codes in Dapr.]({{% ref error-codes-reference.md %}}) An error returned for a state store not found might look like the following: @@ -49,7 +49,7 @@ The returned error includes: ## Dapr error code metrics -Metrics help you see when exactly errors are occuring from within the runtime. Error code metrics are collected using the `error_code_total` endpoint. This endpoint is disabled by default. You can [enable it using the `recordErrorCodes` field in your configuration file]({{< ref "metrics-overview.md#configuring-metrics-for-error-codes" >}}). +Metrics help you see when exactly errors are occuring from within the runtime. Error code metrics are collected using the `error_code_total` endpoint. This endpoint is disabled by default. You can [enable it using the `recordErrorCodes` field in your configuration file]({{% ref "metrics-overview.md#configuring-metrics-for-error-codes" %}}). ## Demo @@ -59,4 +59,4 @@ Watch a demo presented during [Diagrid's Dapr v1.15 celebration](https://www.dia ## Next step -{{< button text="See a list of all Dapr error codes" page="error-codes-reference" >}} \ No newline at end of file +{{< button text="See a list of all Dapr error codes" page="error-codes-reference.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/error-codes/http-error-codes.md b/daprdocs/content/en/developing-applications/error-codes/http-error-codes.md index 1b069ebaf9d..15052cbede4 100644 --- a/daprdocs/content/en/developing-applications/error-codes/http-error-codes.md +++ b/daprdocs/content/en/developing-applications/error-codes/http-error-codes.md @@ -17,5 +17,5 @@ For HTTP calls made to Dapr runtime, when an error is encountered, an error JSON ## Related -- [Error code reference list]({{< ref error-codes-reference.md >}}) -- [Handling gRPC error codes]({{< ref grpc-error-codes.md >}}) \ No newline at end of file +- [Error code reference list]({{% ref error-codes-reference.md %}}) +- [Handling gRPC error codes]({{% ref grpc-error-codes.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/integrations/AWS/authenticating-aws.md b/daprdocs/content/en/developing-applications/integrations/AWS/authenticating-aws.md index 029279c261f..c6606deabc7 100644 --- a/daprdocs/content/en/developing-applications/integrations/AWS/authenticating-aws.md +++ b/daprdocs/content/en/developing-applications/integrations/AWS/authenticating-aws.md @@ -101,9 +101,9 @@ Dapr then authenticates to AWS without specifying credentials in the Dapr compon ### Authenticate to AWS when running dapr locally in stand-alone mode -{{< tabs "Linux/MacOS" "Windows" >}} +{{% tabpane "Linux/MacOS" "Windows" %}} -{{% codetab %}} +{{% tab %}} When running Dapr (or the Dapr runtime directly) in stand-alone mode, you can inject environment variables into the process, like the following example: @@ -125,16 +125,16 @@ AWS_PROFILE=myprofile daprd... You can use any of the [supported environment variables](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html#envvars-list) to configure Dapr in this manner. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Windows, the environment variable needs to be set before starting the `dapr` or `daprd` command, doing it inline (like in Linux/MacOS) is not supported. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Authenticate to AWS if using AWS SSO based profiles @@ -142,9 +142,9 @@ If you authenticate to AWS using [AWS SSO](https://aws.amazon.com/single-sign-on - [AwsHelper](https://pypi.org/project/awshelper/) - [aws-sso-util](https://github.com/benkehoe/aws-sso-util) -{{< tabs "Linux/MacOS" "Windows" >}} +{{% tabpane "Linux/MacOS" "Windows" %}} -{{% codetab %}} +{{% tab %}} If using AwsHelper, start Dapr like this: @@ -157,20 +157,20 @@ or ```bash AWS_PROFILE=myprofile awshelper daprd... ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Windows, the environment variable needs to be set before starting the `awshelper` command; doing it inline (like in Linux/MacOS) is not supported. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -{{< button text="Refer to AWS component specs >>" page="components-reference" >}} +{{< button text="Refer to AWS component specs >>" page="components-reference.md" >}} ## Related links diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/authenticating-azure.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/authenticating-azure.md index 329fad5c6c4..848feb3ec1e 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/authenticating-azure.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/authenticating-azure.md @@ -106,7 +106,7 @@ When running on Kubernetes, you can also use references to Kubernetes secrets fo |-----------------|----------|----------------------------|------------------------------------------| | `azureClientId` | N | Client ID (application ID) | `"c7dd251f-811f-4ba2-a905-acd4d3f8f08b"` | -[Using Managed Identities]({{< ref howto-mi.md >}}), the `azureClientId` field is generally recommended. The field is optional when using a system-assigned identity, but may be required when using user-assigned identities. +[Using Managed Identities]({{% ref howto-mi.md %}}), the `azureClientId` field is generally recommended. The field is optional when using a system-assigned identity, but may be required when using user-assigned identities. #### Authenticating with Workload Identity on AKS @@ -129,9 +129,9 @@ Using this authentication method does not require setting any metadata option. In this example, you will set up an Azure Key Vault secret store component that uses Microsoft Entra ID to authenticate. -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} To use a **client secret**, create a file called `azurekeyvault.yaml` in the components directory, filling in with the details from the above setup process: @@ -176,9 +176,9 @@ spec: - name: azureCertificateFile value : "[pfx_certificate_file_fully_qualified_local_path]" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In Kubernetes, you store the client secret or the certificate into the Kubernetes Secret Store and then refer to those in the YAML file. To use a **client secret**: @@ -273,9 +273,9 @@ To use a **certificate**: kubectl apply -f azurekeyvault.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps @@ -285,7 +285,7 @@ To use a **certificate**: - [Microsoft Entra ID app credential: Azure CLI reference](https://docs.microsoft.com/cli/azure/ad/app/credential) - [Azure Managed Service Identity (MSI) overview](https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview) -- [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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-aad.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-aad.md index abb67782420..9a6df7bdf20 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-aad.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-aad.md @@ -37,9 +37,9 @@ APP_ID=$(az ad app create --display-name "${APP_NAME}" | jq -r .appId) Select how you'd prefer to pass credentials. -{{< tabs "Client secret" "PFX certificate">}} +{{% tabpane "Client secret" "PFX certificate"%}} -{{% codetab %}} +{{% tab %}} To create a **client secret**, run the following command. @@ -67,9 +67,9 @@ When adding the returned values to your Dapr component's metadata: - `password` is the value for `azureClientSecret` (this was randomly-generated) - `tenant` is the value for `azureTenantId` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} For a **PFX (PKCS#12) certificate**, run the following command to create a self-signed certificate: ```sh @@ -101,9 +101,9 @@ When adding the returned values to your Dapr component's metadata: > **Note:** While the generated file has the `.pem` extension, it contains a certificate and private key encoded as PFX (PKCS#12). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Create a Service Principal diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-mi.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-mi.md index d75c5589ad8..923d61f5a01 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-mi.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-authentication/howto-mi.md @@ -22,7 +22,7 @@ In this guide, you learn how to: That's about all there is to it. {{% alert title="Note" color="primary" %}} -In your component YAML, you only need the [`azureClientId` property]({{< ref "authenticating-azure.md#authenticating-with-managed-identities-mi" >}}) if using user-assigned identity. Otherwise, you can omit this property for system-managed identity to be used by default. +In your component YAML, you only need the [`azureClientId` property]({{% ref "authenticating-azure.md#authenticating-with-managed-identities-mi" %}}) if using user-assigned identity. Otherwise, you can omit this property for system-managed identity to be used by default. {{% /alert %}} ## Grant access to the service @@ -32,7 +32,7 @@ Set the requisite Microsoft Entra ID role assignments or custom permissions to y You can set up a managed identity to a new or existing Azure resource. The instructions depend on the service use. Check the following official documentation for the most appropriate instructions: - [Azure Kubernetes Service (AKS)](https://docs.microsoft.com/azure/aks/use-managed-identity) -- [Azure Container Apps (ACA)](https://learn.microsoft.com/azure/container-apps/dapr-components?tabs=yaml#using-managed-identity) +- [Azure Container Apps (ACA)](https://learn.microsoft.com/azure/container-apps/dapr-components?tabpane=yaml#using-managed-identity) - [Azure App Service](https://docs.microsoft.com/azure/app-service/overview-managed-identity) (including Azure Web Apps and Azure Functions) - [Azure Virtual Machines (VM)](https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vm) - [Azure Virtual Machines Scale Sets (VMSS)](https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/qs-configure-cli-windows-vmss) @@ -49,7 +49,7 @@ After assigning a system-managed identity to your Azure resource, you'll have cr } ``` -From the returned values, take note of the **`principalId`** value, which is [the Service Principal ID created for your identity]({{< ref "howto-aad.md#create-a-service-principal" >}}). Use that to grant access permissions for your Azure resources component to access the identity. +From the returned values, take note of the **`principalId`** value, which is [the Service Principal ID created for your identity]({{% ref "howto-aad.md#create-a-service-principal" %}}). Use that to grant access permissions for your Azure resources component to access the identity. {{% alert title="Managed identities in Azure Container Apps" color="primary" %}} Every container app has a completely different system-managed identity, making it very unmanageable to handle the required role assignments across multiple apps. @@ -69,10 +69,10 @@ If the sidecar loads a component which does not specify `azureClientId`, it only The following examples demonstrate setting up either a system-managed or user-assigned identity in an Azure KeyVault secrets component. -{{< tabs "System-managed" "User-assigned" "Kubernetes" >}} +{{% tabpane "System-managed" "User-assigned" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} If you set up system-managed identity using an Azure KeyVault component, the YAML would look like the following: @@ -91,10 +91,10 @@ spec: In this example, the system-managed identity looks up the service identity and communicates with the `mykeyvault` vault. Next, grant your system-managed identiy access to the desired service. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} If you set up user-assigned identity using an Azure KeyVault component, the YAML would look like the following: @@ -115,16 +115,16 @@ spec: Once you've set up the component YAML with the `azureClientId` property, you can grant your user-assigned identity access to your service. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -For component configuration in Kubernetes or AKS, refer to the [Workload Identity guidance.](https://learn.microsoft.com/azure/aks/workload-identity-overview?tabs=dotnet) +For component configuration in Kubernetes or AKS, refer to the [Workload Identity guidance.](https://learn.microsoft.com/azure/aks/workload-identity-overview?tabpane=dotnet) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Troubleshooting @@ -133,7 +133,7 @@ If you receive an error or your managed identity doesn't work as expected, check - The system-managed identity or user-assigned identity don't have the required permissions on the target resource. - The user-assigned identity isn't attached to the Azure service (container app or pod) from which you're loading the component. This can especially happen if: - You have an unscoped component (a component loaded by all container apps in an environment, or all deployments in your AKS cluster). - - You attached the user-assigned identity to only one container app or one deployment in AKS (using [Azure Workload Identity](https://learn.microsoft.com/azure/aks/workload-identity-overview?tabs=dotnet)). + - You attached the user-assigned identity to only one container app or one deployment in AKS (using [Azure Workload Identity](https://learn.microsoft.com/azure/aks/workload-identity-overview?tabpane=dotnet)). In this scenario, since the identity isn't attached to every other container app or deployment in AKS, the component referencing the user-assigned identity via `azureClientId` fails. @@ -141,4 +141,4 @@ If you receive an error or your managed identity doesn't work as expected, check ## Next steps -{{< button text="Refer to Azure component specs >>" page="components-reference" >}} +{{< button text="Refer to Azure component specs >>" page="components-reference.md" >}} diff --git a/daprdocs/content/en/developing-applications/integrations/autoscale-keda.md b/daprdocs/content/en/developing-applications/integrations/autoscale-keda.md index 8e160f9a0e4..0e4831efc01 100644 --- a/daprdocs/content/en/developing-applications/integrations/autoscale-keda.md +++ b/daprdocs/content/en/developing-applications/integrations/autoscale-keda.md @@ -6,11 +6,11 @@ description: "How to configure your Dapr application to autoscale using KEDA" weight: 3000 --- -Dapr, with its building-block API approach, along with the many [pub/sub components]({{< ref pubsub >}}), makes it easy to write message processing applications. Since Dapr can run in many environments (for example VMs, bare-metal, Cloud or Edge Kubernetes) the autoscaling of Dapr applications is managed by the hosting layer. +Dapr, with its building-block API approach, along with the many [pub/sub components]({{% ref pubsub %}}), makes it easy to write message processing applications. Since Dapr can run in many environments (for example VMs, bare-metal, Cloud or Edge Kubernetes) the autoscaling of Dapr applications is managed by the hosting layer. For Kubernetes, Dapr integrates with [KEDA](https://github.com/kedacore/keda), an event driven autoscaler for Kubernetes. Many of Dapr's pub/sub components overlap with the scalers provided by [KEDA](https://github.com/kedacore/keda), so it's easy to configure your Dapr deployment on Kubernetes to autoscale based on the back pressure using KEDA. -In this guide, you configure a scalable Dapr application, along with the back pressure on Kafka topic. However, you can apply this approach to _any_ [pub/sub components]({{< ref pubsub >}}) offered by Dapr. +In this guide, you configure a scalable Dapr application, along with the back pressure on Kafka topic. However, you can apply this approach to _any_ [pub/sub components]({{% ref pubsub %}}) offered by Dapr. {{% alert title="Note" color="primary" %}} If you're working with Azure Container Apps, refer to the official Azure documentation for [scaling Dapr applications using KEDA scalers](https://learn.microsoft.com/azure/container-apps/dapr-keda-scaling). @@ -88,9 +88,9 @@ spec: value: autoscaling-subscriber ``` -The above YAML defines the pub/sub component that your application subscribes to and that [you created earlier (`demo-topic`)]({{< ref "#create-the-kakfa-topic" >}}). +The above YAML defines the pub/sub component that your application subscribes to and that [you created earlier (`demo-topic`)]({{% ref "#create-the-kakfa-topic" %}}). -If you used the [Kafka Helm install instructions]({{< ref "#install-and-deploy-kafka" >}}), you can leave the `brokers` value as-is. Otherwise, change this value to the connection string to your Kafka brokers. +If you used the [Kafka Helm install instructions]({{% ref "#install-and-deploy-kafka" %}}), you can leave the `brokers` value as-is. Otherwise, change this value to the connection string to your Kafka brokers. Notice the `autoscaling-subscriber` value set for `consumerID`. This value is used later to ensure that KEDA and your deployment use the same [Kafka partition offset](http://cloudurable.com/blog/kafka-architecture-topics/index.html#:~:text=Kafka%20continually%20appended%20to%20partitions,fit%20on%20a%20single%20server.). @@ -158,7 +158,7 @@ All done! Now that the `ScaledObject` KEDA object is configured, your deployment will scale based on the lag of the Kafka topic. [Learn more about configuring KEDA for Kafka topics](https://keda.sh/docs/2.0/scalers/apache-kafka/). -As defined in the KEDA scaler manifest, you can now start publishing messages to your Kafka topic `demo-topic` and watch the pods autoscale when the lag threshold is higher than `5` topics. Publish messages to the Kafka Dapr component by using the Dapr [Publish]({{< ref dapr-publish >}}) CLI command. +As defined in the KEDA scaler manifest, you can now start publishing messages to your Kafka topic `demo-topic` and watch the pods autoscale when the lag threshold is higher than `5` topics. Publish messages to the Kafka Dapr component by using the Dapr [Publish]({{% ref dapr-publish %}}) CLI command. ## Next steps diff --git a/daprdocs/content/en/developing-applications/integrations/github_actions.md b/daprdocs/content/en/developing-applications/integrations/github_actions.md index bc01992cfb0..c7b8f76c591 100644 --- a/daprdocs/content/en/developing-applications/integrations/github_actions.md +++ b/daprdocs/content/en/developing-applications/integrations/github_actions.md @@ -17,13 +17,13 @@ Copy and paste the following installer snippet into your application's YAML file uses: dapr/setup-dapr@v1 ``` -The [`dapr/setup-dapr` action](https://github.com/dapr/setup-dapr) will install the specified version of the Dapr CLI on macOS, Linux, and Windows runners. Once installed, you can run any [Dapr CLI command]({{< ref cli >}}) to manage your Dapr environments. +The [`dapr/setup-dapr` action](https://github.com/dapr/setup-dapr) will install the specified version of the Dapr CLI on macOS, Linux, and Windows runners. Once installed, you can run any [Dapr CLI command]({{% ref cli %}}) to manage your Dapr environments. Refer to the [`action.yml` metadata file](https://github.com/dapr/setup-dapr/blob/main/action.yml) for details about all the inputs. ## Example -For example, for an application using the [Dapr extention for Azure Kubernetes Service (AKS)]({{< ref azure-kubernetes-service-extension.md >}}), your application YAML will look like the following: +For example, for an application using the [Dapr extention for Azure Kubernetes Service (AKS)]({{% ref azure-kubernetes-service-extension.md %}}), your application YAML will look like the following: ```yaml - name: Install Dapr @@ -50,4 +50,4 @@ For example, for an application using the [Dapr extention for Azure Kubernetes S ## Next steps - Learn more about [GitHub Actions](https://docs.github.com/en/actions). -- Follow the tutorial to learn how [GitHub Actions works with your Dapr container app (Azure Container Apps)](https://learn.microsoft.com/azure/container-apps/dapr-github-actions?tabs=azure-cli) \ No newline at end of file +- Follow the tutorial to learn how [GitHub Actions works with your Dapr container app (Azure Container Apps)](https://learn.microsoft.com/azure/container-apps/dapr-github-actions?tabpane=azure-cli) \ No newline at end of file diff --git a/daprdocs/content/en/developing-applications/local-development/gRPC-integration.md b/daprdocs/content/en/developing-applications/local-development/gRPC-integration.md index bd0eea99230..477ccf4ae62 100644 --- a/daprdocs/content/en/developing-applications/local-development/gRPC-integration.md +++ b/daprdocs/content/en/developing-applications/local-development/gRPC-integration.md @@ -8,19 +8,19 @@ description: "Use the Dapr gRPC API in your application" Dapr implements both an HTTP and a gRPC API for local calls. [gRPC](https://grpc.io/) is useful for low-latency, high performance scenarios and has language integration using the proto clients. -[Find a list of auto-generated clients in the Dapr SDK documentation]({{< ref sdks >}}). +[Find a list of auto-generated clients in the Dapr SDK documentation]({{% ref sdks %}}). The Dapr runtime implements a [proto service](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto) that apps can communicate with via gRPC. -In addition to calling Dapr via gRPC, Dapr supports service-to-service calls with gRPC by acting as a proxy. [Learn more in the gRPC service invocation how-to guide]({{< ref howto-invoke-services-grpc.md >}}). +In addition to calling Dapr via gRPC, Dapr supports service-to-service calls with gRPC by acting as a proxy. [Learn more in the gRPC service invocation how-to guide]({{% ref howto-invoke-services-grpc.md %}}). This guide demonstrates configuring and invoking Dapr with gRPC using a Go SDK application. ## Configure Dapr to communicate with an app via gRPC -{{< tabs "Self-hosted" "Kubernetes">}} +{{% tabpane "Self-hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} When running in self-hosted mode, use the `--app-protocol` flag to tell Dapr to use gRPC to talk to the app. @@ -30,10 +30,10 @@ dapr run --app-protocol grpc --app-port 5005 node app.js This tells Dapr to communicate with your app via gRPC over port `5005`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, set the following annotations in your deployment YAML: @@ -62,9 +62,9 @@ spec: ... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Invoke Dapr with gRPC @@ -224,9 +224,9 @@ The following steps will show how to create an app that exposes a server for wit ## Run the application -{{< tabs "Self-hosted" "Kubernetes">}} +{{% tabpane "Self-hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} To run locally, use the Dapr CLI: @@ -234,16 +234,16 @@ To run locally, use the Dapr CLI: dapr run --app-id goapp --app-port 50001 --app-protocol grpc go run main.go ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, set the required `dapr.io/app-protocol: "grpc"` and `dapr.io/app-port: "50001` annotations in your pod spec template, as mentioned above. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Other languages @@ -253,5 +253,5 @@ You can use Dapr with any language supported by Protobuf, and not just with the Using the [protoc](https://developers.google.com/protocol-buffers/docs/downloads) tool, you can generate the Dapr clients for other languages like Ruby, C++, Rust, and others. ## Related Topics -- [Service invocation building block]({{< ref service-invocation >}}) -- [Service invocation API specification]({{< ref service_invocation_api.md >}}) +- [Service invocation building block]({{% ref service-invocation %}}) +- [Service invocation API specification]({{% ref service_invocation_api.md %}}) diff --git a/daprdocs/content/en/developing-applications/local-development/ides/intellij.md b/daprdocs/content/en/developing-applications/local-development/ides/intellij.md index 90c8158c283..370d2cbbc8c 100644 --- a/daprdocs/content/en/developing-applications/local-development/ides/intellij.md +++ b/daprdocs/content/en/developing-applications/local-development/ides/intellij.md @@ -28,31 +28,31 @@ First, quit IntelliJ before modifying the configurations file directly. ### IntelliJ configuration file location For versions [2020.1](https://www.jetbrains.com/help/idea/2020.1/tuning-the-ide.html#config-directory) and above the configuration files for tools should be located in: -{{< tabs Windows Linux MacOS >}} +{{% tabpane Windows Linux MacOS %}} -{{% codetab %}} +{{% tab %}} ```powershell %USERPROFILE%\AppData\Roaming\JetBrains\IntelliJIdea2020.1\tools\ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```shell $HOME/.config/JetBrains/IntelliJIdea2020.1/tools/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```shell ~/Library/Application\ Support/JetBrains/IntelliJIdea2020.1/tools/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} > The configuration file location is different for version 2019.3 or prior. See [here](https://www.jetbrains.com/help/idea/2019.3/tuning-the-ide.html#config-directory) for more details. diff --git a/daprdocs/content/en/developing-applications/local-development/ides/vscode/vscode-how-to-debug-multiple-dapr-apps.md b/daprdocs/content/en/developing-applications/local-development/ides/vscode/vscode-how-to-debug-multiple-dapr-apps.md index 86569fb2fe1..88d03b7cc37 100644 --- a/daprdocs/content/en/developing-applications/local-development/ides/vscode/vscode-how-to-debug-multiple-dapr-apps.md +++ b/daprdocs/content/en/developing-applications/local-development/ides/vscode/vscode-how-to-debug-multiple-dapr-apps.md @@ -22,7 +22,7 @@ If your application is a collection of microservices, each with a Dapr sidecar, ## Prerequisites -- Install the [Dapr extension]({{< ref vscode-dapr-extension.md >}}). You will be using the [tasks](https://code.visualstudio.com/docs/editor/tasks) it offers later on. +- Install the [Dapr extension]({{% ref vscode-dapr-extension.md %}}). You will be using the [tasks](https://code.visualstudio.com/docs/editor/tasks) it offers later on. - Optionally clone the [hello world quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-world) ## Step 1: Configure launch.json @@ -30,9 +30,9 @@ If your application is a collection of microservices, each with a Dapr sidecar, The file `.vscode/launch.json` contains [launch configurations](https://code.visualstudio.com/Docs/editor/debugging#_launch-configurations) for a VS Code debug run. This file defines what will launch and how it is configured when the user begins debugging. Configurations are available for each programming language in the [Visual Studio Code marketplace](https://marketplace.visualstudio.com/VSCode). {{% alert title="Scaffold debugging configuration" color="primary" %}} -The [Dapr VSCode extension]({{< ref vscode-dapr-extension.md >}}) offers built-in scaffolding to generate `launch.json` and `tasks.json` for you. +The [Dapr VSCode extension]({{% ref vscode-dapr-extension.md %}}) offers built-in scaffolding to generate `launch.json` and `tasks.json` for you. -{{< button text="Learn more" page="vscode-dapr-extension#scaffold-dapr-components" >}} +{{< button text="Learn more" page="vscode-dapr-extension.md#scaffold-dapr-components" >}} {{% /alert %}} In the case of the hello world quickstart, two applications are launched, each with its own Dapr sidecar. One is written in Node.JS, and the other in Python. You'll notice each configuration contains a `daprd run` preLaunchTask and a `daprd stop` postDebugTask. @@ -165,7 +165,7 @@ You are now debugging multiple applications with Dapr! ## Daprd parameter table -Below are the supported parameters for VS Code tasks. These parameters are equivalent to `daprd` arguments as detailed in [this reference]({{< ref arguments-annotations-overview.md >}}): +Below are the supported parameters for VS Code tasks. These parameters are equivalent to `daprd` arguments as detailed in [this reference]({{% ref arguments-annotations-overview.md %}}): | Parameter | Description | Required | Example | |--------------|---------------|-------------|---------| @@ -195,5 +195,5 @@ Below are the supported parameters for VS Code tasks. These parameters are equiv ## Related Links -- [Visual Studio Code Extension Overview]({{< ref vscode-dapr-extension.md >}}) +- [Visual Studio Code Extension Overview]({{% ref vscode-dapr-extension.md %}}) - [Visual Studio Code Debugging](https://code.visualstudio.com/docs/editor/debugging) diff --git a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-overview.md b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-overview.md index 1cb8cc0b93d..317cc1bdbe1 100644 --- a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-overview.md +++ b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-overview.md @@ -17,9 +17,9 @@ Let's say you want to run several applications locally to test them together, si The Multi-App Run template file describes how to start multiple applications as if you had run many separate CLI `run` commands. By default, this template file is called `dapr.yaml`. -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ## Multi-App Run template file @@ -46,7 +46,7 @@ apps: command: ["go","run", "app.go"] ``` -For a more in-depth example and explanation of the template properties, see [Multi-app template]({{< ref multi-app-template.md >}}). +For a more in-depth example and explanation of the template properties, see [Multi-app template]({{% ref multi-app-template.md %}}). ## Locations for resources and configuration files @@ -89,9 +89,9 @@ Watch [this video for an overview on Multi-App Run](https://youtu.be/s1p9MNl4VGo -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ## Multi-App Run template file @@ -138,7 +138,7 @@ apps: > - The containerImagePullPolicy indicates that a new container image is always downloaded for this app. > - The `createService` field defines a basic service in Kubernetes (ClusterIP or LoadBalancer) that targets the `--app-port` specified in the template. If `createService` isn't specified, the application is not accessible from outside the cluster. -For a more in-depth example and explanation of the template properties, see [Multi-app template]({{< ref multi-app-template.md >}}). +For a more in-depth example and explanation of the template properties, see [Multi-app template]({{% ref multi-app-template.md %}}). ## Logs @@ -163,12 +163,12 @@ Watch [this video for an overview on Multi-App Run in Kubernetes](https://youtu. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -- [Learn the Multi-App Run template file structure and its properties]({{< ref multi-app-template.md >}}) -- [Try out the self-hosted Multi-App Run template with the Service Invocation quickstart]({{< ref serviceinvocation-quickstart.md >}}) +- [Learn the Multi-App Run template file structure and its properties]({{% ref multi-app-template.md %}}) +- [Try out the self-hosted Multi-App Run template with the Service Invocation quickstart]({{% ref serviceinvocation-quickstart.md %}}) - [Try out the Kubernetes Multi-App Run template with the `hello-kubernetes` tutorial](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) diff --git a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md index 2392c4fd90c..617408f72f4 100644 --- a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md +++ b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md @@ -26,9 +26,9 @@ When you provide a directory path, the CLI will try to locate the Multi-App Run Execute the following CLI command to read the Multi-App Run template file, named `dapr.yaml` by default: -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```cmd @@ -36,75 +36,75 @@ Execute the following CLI command to read the Multi-App Run template file, named dapr run -f ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```cmd dapr run -f -k ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Execute by providing a file path If the Multi-App Run template file is named something other than `dapr.yaml`, then you can provide the relative or absolute file path to the command: -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```cmd dapr run -f ./path/to/.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```cmd dapr run -f ./path/to/.yaml -k ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## View the started applications Once the multi-app template is running, you can view the started applications with the following command: -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```cmd dapr list ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```cmd dapr list -k ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Stop the multi-app template Stop the multi-app run template anytime with either of the following commands: -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```cmd @@ -118,9 +118,9 @@ or: dapr stop -f ./path/to/.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```cmd @@ -134,18 +134,18 @@ or: dapr stop -f ./path/to/.yaml -k ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Template file structure The Multi-App Run template file can include the following properties. Below is an example template showing two applications that are configured with some of the properties. -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} ```yaml @@ -183,9 +183,9 @@ The following rules apply for all the paths present in the template file: - `appDirPath` under apps section should be provided relative to the template file path. - All other relative paths under apps section should be provided relative to the `appDirPath`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```yaml @@ -219,20 +219,20 @@ The following rules apply for all the paths present in the template file: - `appDirPath` under apps section should be provided relative to the template file path. - All relative paths under app section should be provided relative to the `appDirPath`. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Template properties -{{< tabs Self-hosted Kubernetes>}} +{{% tabpane Self-hosted Kubernetes%}} -{{% codetab %}} +{{% tab %}} -The properties for the Multi-App Run template align with the `dapr run` CLI flags, [listed in the CLI reference documentation]({{< ref "dapr-run.md#flags" >}}). +The properties for the Multi-App Run template align with the `dapr run` CLI flags, [listed in the CLI reference documentation]({{% ref "dapr-run.md#flags" %}}). -{{< table "table table-white table-striped table-bordered" >}} +{{% table "table table-white table-striped table-bordered" %}} | Properties | Required | Details | Example | |--------------------------|:--------:|--------|---------| @@ -270,21 +270,21 @@ The properties for the Multi-App Run template align with the `dapr run` CLI flag | `appLogDestination` | N | Log destination for outputting app logs; Its value can be file, console or fileAndConsole. Default is fileAndConsole | `file`, `console`, `fileAndConsole` | | `daprdLogDestination` | N | Log destination for outputting daprd logs; Its value can be file, console or fileAndConsole. Default is file | `file`, `console`, `fileAndConsole` | -{{< /table >}} +{{% /table %}} ## Next steps Watch [this video for an overview on Multi-App Run](https://youtu.be/s1p9MNl4VGo?t=2456): -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -The properties for the Multi-App Run template align with the `dapr run -k` CLI flags, [listed in the CLI reference documentation]({{< ref "dapr-run.md#flags" >}}). +The properties for the Multi-App Run template align with the `dapr run -k` CLI flags, [listed in the CLI reference documentation]({{% ref "dapr-run.md#flags" %}}). -{{< table "table table-white table-striped table-bordered" >}} +{{% table "table table-white table-striped table-bordered" %}} | Properties | Required | Details | Example | |----------------------------|:--------:|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------| @@ -321,7 +321,7 @@ The properties for the Multi-App Run template align with the `dapr run -k` CLI f | `containerImagePullPolicy` | N | The container image pull policy (default to `Always`). | `Always`, `IfNotPresent`, `Never` | | `createService` | N | Create a Kubernetes service for the application when deploying to dev/test environment. | `true`, `false` | -{{< /table >}} +{{% /table %}} ## Next steps @@ -329,8 +329,8 @@ Watch [this video for an overview on Multi-App Run in Kubernetes](https://youtu. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} diff --git a/daprdocs/content/en/developing-applications/local-development/sdk-serialization.md b/daprdocs/content/en/developing-applications/local-development/sdk-serialization.md index 172fab4cc77..a592816ed41 100644 --- a/daprdocs/content/en/developing-applications/local-development/sdk-serialization.md +++ b/daprdocs/content/en/developing-applications/local-development/sdk-serialization.md @@ -12,33 +12,35 @@ Dapr SDKs provide serialization for two use cases. First, for API objects sent t | Language SDK | Default Serializer | |------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [.NET]({{< ref dotnet >}}) | [DataContracts](https://learn.microsoft.com/dotnet/framework/wcf/feature-details/using-data-contracts) for remoted actors, [System.Text.Json](https://www.nuget.org/packages/System.Text.Json) otherwise. Read more about .NET serialization [here]({{< ref dotnet-actors-serialization >}}) | | -| [Java]({{< ref java >}}) | [DefaultObjectSerializer](https://dapr.github.io/java-sdk/io/dapr/serializer/DefaultObjectSerializer.html) for JSON serialization | -| [JavaScript]({{< ref js >}}) | JSON | +| [.NET]({{% ref dotnet %}}) | [DataContracts](https://learn.microsoft.com/dotnet/framework/wcf/feature-details/using-data-contracts) for remoted actors, [System.Text.Json](https://www.nuget.org/packages/System.Text.Json) otherwise. Read more about .NET serialization [here]({{% ref dotnet-actors-serialization %}}) | | +| [Java]({{% ref java %}}) | [DefaultObjectSerializer](https://dapr.github.io/java-sdk/io/dapr/serializer/DefaultObjectSerializer.html) for JSON serialization | +| [JavaScript]({{% ref js %}}) | JSON | ## Service invocation -{{< tabs ".NET" "Java" >}} +{{% tabpane ".NET" "Java" %}} -{{% codetab %}} +{{% tab %}} ```csharp using var client = (new DaprClientBuilder()).Build(); await client.InvokeMethodAsync("myappid", "saySomething", "My Message"); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java DaprClient client = (new DaprClientBuilder()).build(); client.invokeMethod("myappid", "saySomething", "My Message", HttpExtension.POST).block(); ``` -{{% /codetab %}} +{{% /tab %}} + +{{% /tabpane %}} In the example above, the app `myappid` receives 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. @@ -54,10 +56,10 @@ Content-Length: 12 ## State management -{{< tabs ".NET" "Java" >}} +{{% tabpane ".NET" "Java" %}} -{{% codetab %}} +{{% tab %}} ```csharp using var client = (new DaprClientBuilder()).Build(); @@ -69,17 +71,19 @@ Content-Length: 12 await client.SaveStateAsync("MyStateStore", "MyKey", state); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java DaprClient client = (new DaprClientBuilder()).build(); client.saveState("MyStateStore", "MyKey", "My Message").block(); ``` -{{% /codetab %}} +{{% /tab %}} + +{{% /tabpane %}} In this example, `My Message` is saved. It is not quoted because Dapr's API internally parse the JSON request object before saving it. @@ -95,10 +99,10 @@ object before saving it. ## PubSub -{{< tabs ".NET" "Java" >}} +{{% tabpane ".NET" "Java" %}} -{{% codetab %}} +{{% tab %}} ```csharp using var client = (new DaprClientBuilder()).Build(); @@ -123,10 +127,10 @@ app.MapPost("/TopicName", [Topic("MyPubSubName", "TopicName")] (string message) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java DaprClient client = (new DaprClientBuilder()).build(); @@ -143,16 +147,18 @@ The event is published and the content is serialized to `byte[]` and sent to Dap } ``` -{{% /codetab %}} +{{% /tab %}} + +{{% /tabpane %}} ## Bindings For output bindings the object is serialized to `byte[]` whereas the input binding receives the raw `byte[]` as-is and deserializes it to the expected object type. -{{< tabs ".NET" "Java" >}} +{{% tabpane ".NET" "Java" %}} -{{% codetab %}} +{{% tab %}} * Output binding: ```csharp @@ -183,10 +189,10 @@ app.MapPost("value", ([FromBody] int itemId) => }); * ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} * Output binding: ```java @@ -203,7 +209,9 @@ app.MapPost("value", ([FromBody] int itemId) => } ``` -{{% /codetab %}} +{{% /tab %}} + +{{% /tabpane %}} It should print: ``` @@ -217,14 +225,14 @@ is all done transparently by the SDK. For Actor methods, the SDK only supports methods with zero or one parameter. -{{< tabs ".NET" "Java" >}} +{{% tabpane ".NET" "Java" %}} The .NET SDK supports two different serialization types based on whether you're using strongly-typed (DataContracts) -or weakly-typed (DataContracts or System.Text.JSON) actor client. [This document]({{< ref dotnet-actors-serialization >}}) +or weakly-typed (DataContracts or System.Text.JSON) actor client. [This document]({{% ref dotnet-actors-serialization %}}) can provide more information about the differences between each and additional considerations to keep in mind. -{{% codetab %}} +{{% tab %}} * Invoking an Actor's method using the weakly-typed client and System.Text.JSON: ```csharp @@ -241,10 +249,10 @@ public Task SayAsync(string message) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} * Invoking an Actor's method: ```java @@ -262,7 +270,9 @@ public String say(String something) { } ``` -{{% /codetab %}} +{{% /tab %}} + +{{% /tabpane %}} It should print: ``` @@ -274,7 +284,7 @@ Actors can also have state. In this case, the state manager will serialize and d serializer and handle it transparently to the application. -{{% codetab %}} +{{% tab %}} ```csharp public Task SayAsync(string message) @@ -288,10 +298,10 @@ public Task SayAsync(string message) } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```java public String actorMethod(String message) { @@ -304,7 +314,8 @@ public String actorMethod(String message) { } ``` -{{% /codetab %}} +{{% /tab %}} + ## Default serializer diff --git a/daprdocs/content/en/developing-applications/sdks/_index.md b/daprdocs/content/en/developing-applications/sdks/_index.md index 4f56c0513bd..079a06d3297 100644 --- a/daprdocs/content/en/developing-applications/sdks/_index.md +++ b/daprdocs/content/en/developing-applications/sdks/_index.md @@ -11,7 +11,7 @@ The Dapr SDKs are the easiest way for you to get Dapr into your application. Cho ## SDK packages -Select your [preferred language below]({{< ref "#sdk-languages" >}}) to learn more about client, server, actor, and workflow packages. +Select your [preferred language below]({{% ref "#sdk-languages" %}}) to learn more about client, server, actor, and workflow packages. - **Client**: The Dapr client allows you to invoke Dapr building block APIs and perform each building block's actions - **Server extensions**: The Dapr service extensions allow you to create services that can be invoked by other services and subscribe to topics @@ -22,15 +22,15 @@ Select your [preferred language below]({{< ref "#sdk-languages" >}}) to learn mo | Language | Status | Client | Server extensions | Actor | Workflow | |----------|:------|:----------:|:-----------:|:---------:|:---------:| -| [.NET]({{< ref dotnet >}}) | Stable | ✔ | [ASP.NET Core](https://github.com/dapr/dotnet-sdk/tree/master/examples/AspNetCore) | ✔ | ✔ | -| [Python]({{< ref python >}}) | Stable | ✔ | [gRPC]({{< ref python-grpc.md >}})
[FastAPI]({{< ref python-fastapi.md >}})
[Flask]({{< ref python-flask.md >}})| ✔ | ✔ | -| [Java]({{< ref java >}}) | Stable | ✔ | Spring Boot
Quarkus| ✔ | ✔ | -| [Go]({{< ref go >}}) | Stable | ✔ | ✔ | ✔ | ✔ | -| [PHP]({{< ref php >}}) | Stable | ✔ | ✔ | ✔ | | -| [JavaScript]({{< ref js >}}) | Stable| ✔ | | ✔ | ✔ | +| [.NET]({{% ref dotnet %}}) | Stable | ✔ | [ASP.NET Core](https://github.com/dapr/dotnet-sdk/tree/master/examples/AspNetCore) | ✔ | ✔ | +| [Python]({{% ref python %}}) | Stable | ✔ | [gRPC]({{% ref python-grpc.md %}})
[FastAPI]({{% ref python-fastapi.md %}})
[Flask]({{% ref python-flask.md %}})| ✔ | ✔ | +| [Java]({{% ref java %}}) | Stable | ✔ | Spring Boot
Quarkus| ✔ | ✔ | +| [Go]({{% ref go %}}) | Stable | ✔ | ✔ | ✔ | ✔ | +| [PHP]({{% ref php %}}) | Stable | ✔ | ✔ | ✔ | | +| [JavaScript]({{% ref js %}}) | Stable| ✔ | | ✔ | ✔ | | [C++](https://github.com/dapr/cpp-sdk) | In development | ✔ | | | -| [Rust]({{< ref rust >}}) | In development | ✔ | | ✔ | | +| [Rust]({{% ref rust %}}) | In development | ✔ | | ✔ | | ## Further reading -- [Serialization in the Dapr SDKs]({{< ref sdk-serialization.md >}}) +- [Serialization in the Dapr SDKs]({{% ref sdk-serialization.md %}}) diff --git a/daprdocs/content/en/getting-started/_index.md b/daprdocs/content/en/getting-started/_index.md index 80d01b22942..fb1964c4aec 100644 --- a/daprdocs/content/en/getting-started/_index.md +++ b/daprdocs/content/en/getting-started/_index.md @@ -9,12 +9,13 @@ description: "Get up and running with Dapr in minutes" Welcome to the Dapr getting started guide! {{% alert title="Dapr Concepts" color="primary" %}} -If you are looking for an introductory overview of Dapr and learn more about basic Dapr terminology, we recommend starting with the [concepts section]({{}}). +If you are looking for an introductory overview of Dapr and learn more about basic Dapr terminology, we recommend starting with the [concepts section]({{%ref concepts%}}). {{% /alert %}} Our getting started guide will walk you through a series of steps to install, initialize, experiment with, and start using Dapr.
-{{< button text="First step: Install the Dapr CLI >>" page="install-dapr-cli" >}} +{{< button text="First step: Install the Dapr CLI >>" page="install-dapr-cli.md" >}} +

\ No newline at end of file diff --git a/daprdocs/content/en/getting-started/get-started-api.md b/daprdocs/content/en/getting-started/get-started-api.md index a785812c4d2..c89b2abb38f 100644 --- a/daprdocs/content/en/getting-started/get-started-api.md +++ b/daprdocs/content/en/getting-started/get-started-api.md @@ -13,16 +13,16 @@ After running Dapr using the Dapr CLI, you'll: - Read/get the state object. - Delete the state object. -[Learn more about the state building block and how it works in our concept docs]({{< ref state-management >}}). +[Learn more about the state building block and how it works in our concept docs]({{% ref state-management %}}). ### Pre-requisites -- [Install Dapr CLI]({{< ref install-dapr-cli.md >}}). -- [Run `dapr init`]({{< ref install-dapr-selfhost.md>}}). +- [Install Dapr CLI]({{% ref install-dapr-cli.md %}}). +- [Run `dapr init`]({{% ref install-dapr-selfhost.md%}}). ### Step 1: Run the Dapr sidecar -The [`dapr run`]({{< ref dapr-run.md >}}) command normally runs your application and a Dapr sidecar. In this case, +The [`dapr run`]({{% ref dapr-run.md %}}) command normally runs your application and a Dapr sidecar. In this case, it only runs the sidecar since you are interacting with the state management API directly. Launch a Dapr sidecar that will listen on port 3500 for a blank application named `myapp`: @@ -31,7 +31,7 @@ Launch a Dapr sidecar that will listen on port 3500 for a blank application name dapr run --app-id myapp --dapr-http-port 3500 ``` -Since no custom component folder was defined with the above command, Dapr uses the default component definitions created during the [`dapr init` flow]({{< ref "install-dapr-selfhost.md#step-5-verify-components-directory-has-been-initialized" >}}). +Since no custom component folder was defined with the above command, Dapr uses the default component definitions created during the [`dapr init` flow]({{% ref "install-dapr-selfhost.md#step-5-verify-components-directory-has-been-initialized" %}}). ### Step 2: Save state @@ -50,48 +50,48 @@ Notice, that objects contained in the state each have a `key` assigned with the Save a new state object using the following command: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)">}} -{{% codetab %}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)"%}} +{{% tab %}} ```bash curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Post -ContentType 'application/json' -Body '[{ "key": "name", "value": "Bruce Wayne"}]' -Uri 'http://localhost:3500/v1.0/state/statestore' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Step 3: Get state Retrieve the object you just stored in the state by using the state management API with the key `name`. In the same terminal window, run the following command: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```bash curl http://localhost:3500/v1.0/state/statestore/name ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Uri 'http://localhost:3500/v1.0/state/statestore/name' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Step 4: See how the state is stored in Redis @@ -132,24 +132,24 @@ exit In the same terminal window, delete the`name` state object from the state store. -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)">}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)"%}} -{{% codetab %}} +{{% tab %}} ```bash curl -v -X DELETE -H "Content-Type: application/json" http://localhost:3500/v1.0/state/statestore/name ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Method Delete -ContentType 'application/json' -Uri 'http://localhost:3500/v1.0/state/statestore/name' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} -{{< button text="Next step: Dapr Quickstarts >>" page="getting-started/quickstarts" >}} \ No newline at end of file +{{< button text="Next step: Dapr Quickstarts >>" page="getting-started/quickstarts.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/getting-started/install-dapr-cli.md b/daprdocs/content/en/getting-started/install-dapr-cli.md index da8dee54ee5..1e2303e9640 100644 --- a/daprdocs/content/en/getting-started/install-dapr-cli.md +++ b/daprdocs/content/en/getting-started/install-dapr-cli.md @@ -13,7 +13,7 @@ You'll use the Dapr CLI as the main tool for various Dapr-related tasks. You can - List running services. - Run the Dapr dashboard. -The Dapr CLI works with both [self-hosted]({{< ref self-hosted >}}) and [Kubernetes]({{< ref Kubernetes >}}) environments. +The Dapr CLI works with both [self-hosted]({{% ref self-hosted %}}) and [Kubernetes]({{% ref Kubernetes %}}) environments. {{% alert title="Before you begin" color="primary" %}} In Docker Desktop's advanced options, verify you've allowed the default Docker socket to be used. This option is not available if you are using WSL integration on Windows. @@ -22,9 +22,9 @@ In Docker Desktop's advanced options, verify you've allowed the default Docker s ### Step 1: Install the Dapr CLI -{{< tabs Linux Windows MacOS Binaries>}} +{{% tabpane Linux Windows MacOS Binaries%}} -{{% codetab %}} +{{% tab %}} #### Install from Terminal @@ -59,9 +59,9 @@ The following example shows how to install CLI version `{{% dapr-latest-version wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | DAPR_INSTALL_DIR="$HOME/dapr" /bin/bash -s {{% dapr-latest-version cli="true" %}} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} #### Install from Command Prompt @@ -124,9 +124,9 @@ Each release of the Dapr CLI also includes an installer for Windows. You can man 3. Follow the installation prompts to accept the license and the installation directory. The selected folder is added to the user PATH environment variable. The default value is set to `$Env:SystemDrive\dapr`. 4. Click `Install` to start the installation. You will see a final message once the installation is complete. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Install from Terminal @@ -185,9 +185,9 @@ The following example shows how to install CLI version `{{% dapr-latest-version curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | DAPR_INSTALL_DIR="$HOME/dapr" -s {{% dapr-latest-version cli="true" %}} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Each release of Dapr CLI includes various OSes and architectures. You can manually download and install these binary versions. 1. Download the desired Dapr CLI from the latest [Dapr Release](https://github.com/dapr/cli/releases). @@ -198,9 +198,9 @@ Each release of Dapr CLI includes various OSes and architectures. You can manual - Create a directory called `C:\dapr`. - Add your newly created directory to your User PATH, by editing your system environment variable. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Step 2: Verify the installation @@ -252,4 +252,4 @@ Flags: Use "dapr [command] --help" for more information about a command. ``` -{{< button text="Next step: Initialize Dapr >>" page="install-dapr-selfhost" >}} +{{< button text="Next step: Initialize Dapr >>" page="install-dapr-selfhost.md" >}} diff --git a/daprdocs/content/en/getting-started/install-dapr-selfhost.md b/daprdocs/content/en/getting-started/install-dapr-selfhost.md index b851a3c25db..e5fb1ab55a7 100644 --- a/daprdocs/content/en/getting-started/install-dapr-selfhost.md +++ b/daprdocs/content/en/getting-started/install-dapr-selfhost.md @@ -8,7 +8,7 @@ aliases: - /getting-started/set-up-dapr/install-dapr/ --- -Now that you've [installed the Dapr CLI]({{}}), use the CLI to initialize Dapr on your local machine. +Now that you've [installed the Dapr CLI]({{%ref install-dapr-cli.md%}}), use the CLI to initialize Dapr on your local machine. Dapr runs as a sidecar alongside your application. In self-hosted mode, this means it is a process on your local machine. By initializing Dapr, you: @@ -24,44 +24,44 @@ Dapr initialization includes: 1. Running a **Dapr scheduler service container instance** for job scheduling. {{% alert title="Kubernetes Development Environment" color="primary" %}} -To initialize Dapr in your local or remote **Kubernetes** cluster for development (including the Redis and Zipkin containers listed above), see [how to initialize Dapr for development on Kubernetes]({{}}) +To initialize Dapr in your local or remote **Kubernetes** cluster for development (including the Redis and Zipkin containers listed above), see [how to initialize Dapr for development on Kubernetes]({{%ref "kubernetes-deploy.md#install-dapr-from-the-official-dapr-helm-chart-with-development-flag" %}}) {{% /alert %}} {{% alert title="Docker" color="primary" %}} -The recommended development environment requires [Docker](https://docs.docker.com/install/). While you can [initialize Dapr without a dependency on Docker]({{< ref self-hosted-no-docker.md >}}), the next steps in this guide assume the recommended Docker development environment. +The recommended development environment requires [Docker](https://docs.docker.com/install/). While you can [initialize Dapr without a dependency on Docker]({{% ref self-hosted-no-docker.md %}}), the next steps in this guide assume the recommended Docker development environment. -You can also install [Podman](https://podman.io/) in place of Docker. Read more about [initializing Dapr using Podman]({{< ref dapr-init.md >}}). +You can also install [Podman](https://podman.io/) in place of Docker. Read more about [initializing Dapr using Podman]({{% ref dapr-init.md %}}). {{% /alert %}} ### Step 1: Open an elevated terminal -{{< tabs "Linux/MacOS" "Windows">}} +{{% tabpane "Linux/MacOS" "Windows"%}} -{{% codetab %}} +{{% tab %}} You will need to use `sudo` for this quickstart if: - You run your Docker commands with `sudo`, or - The install path is `/usr/local/bin` (default install path). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Run Windows Terminal or command prompt as administrator. 1. Right click on the Windows Terminal or command prompt icon. 1. Select **Run as administrator**. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Step 2: Run the init CLI command -{{< tabs "Linux/MacOS" "Windows">}} +{{% tabpane "Linux/MacOS" "Windows"%}} -{{% codetab %}} +{{% tab %}} Install the latest Dapr runtime binaries: @@ -79,9 +79,9 @@ If you are installing on **Mac OS Silicon** with Docker, you may need to perform 1. Navigate to **Docker Desktop** > **Settings** > **Advanced**. 1. Select the **Allow the default Docker socket to be used (requires password)** checkbox. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Install the latest Dapr runtime binaries: @@ -89,16 +89,16 @@ Install the latest Dapr runtime binaries: dapr init ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} **Expected output:** -[See the troubleshooting guide if you encounter any error messages regarding Docker not being installed or running.]({{< ref "common_issues.md#dapr-cant-connect-to-docker-when-installing-the-dapr-cli" >}}) +[See the troubleshooting guide if you encounter any error messages regarding Docker not being installed or running.]({{% ref "common_issues.md#dapr-cant-connect-to-docker-when-installing-the-dapr-cli" %}}) ### Step 3: Verify Dapr version @@ -135,9 +135,9 @@ Verify by opening your components directory: - On Windows, under `%UserProfile%\.dapr` - On Linux/MacOS, under `~/.dapr` -{{< tabs "Linux/MacOS" "Windows">}} +{{% tabpane "Linux/MacOS" "Windows"%}} -{{% codetab %}} +{{% tab %}} ```bash ls $HOME/.dapr @@ -149,9 +149,9 @@ ls $HOME/.dapr
-{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can verify using either PowerShell or command line. If using PowerShell, run: ```powershell explorer "$env:USERPROFILE\.dapr" @@ -166,15 +166,15 @@ explorer "%USERPROFILE%\.dapr" -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}}
### Slim init -To install the CLI without any default configuration files or Docker containers, use the `--slim` flag. [Learn more about the `init` command and its flags.]({{< ref dapr-init.md >}}) +To install the CLI without any default configuration files or Docker containers, use the `--slim` flag. [Learn more about the `init` command and its flags.]({{% ref dapr-init.md %}}) ```bash dapr init --slim diff --git a/daprdocs/content/en/getting-started/quickstarts/_index.md b/daprdocs/content/en/getting-started/quickstarts/_index.md index d1cd2a45e4e..102aae1f5b2 100644 --- a/daprdocs/content/en/getting-started/quickstarts/_index.md +++ b/daprdocs/content/en/getting-started/quickstarts/_index.md @@ -10,27 +10,27 @@ no_list: true Hit the ground running with our Dapr quickstarts, complete with code samples aimed to get you started quickly with Dapr. {{% alert title="Note" color="primary" %}} - Each release, the quickstart library has new examples added for the APIs and SDKs. You can also explore Dapr through the [tutorials]({{< ref "getting-started/tutorials/_index.md" >}}). + Each release, the quickstart library has new examples added for the APIs and SDKs. You can also explore Dapr through the [tutorials]({{% ref "getting-started/tutorials/_index" %}}). {{% /alert %}} #### Before you begin -- [Set up your local Dapr environment]({{< ref "install-dapr-cli.md" >}}). +- [Set up your local Dapr environment]({{% ref "install-dapr-cli" %}}). ## Quickstarts | Quickstarts | Description | | ----------- | ----------- | -| [Service Invocation]({{< ref serviceinvocation-quickstart.md >}}) | Synchronous communication between two services using HTTP or gRPC. | -| [Publish and Subscribe]({{< ref pubsub-quickstart.md >}}) | Asynchronous communication between two services using messaging. | -| [Workflow]({{< ref workflow-quickstart.md >}}) | Orchestrate business workflow activities in long running, fault-tolerant, stateful applications. | -| [State Management]({{< ref statemanagement-quickstart.md >}}) | Store a service's data as key/value pairs in supported state stores. | -| [Bindings]({{< ref bindings-quickstart.md >}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | -| [Actors]({{< ref actors-quickstart.md >}}) | Run a microservice and a simple console client to demonstrate stateful object patterns in Dapr Actors. | -| [Secrets Management]({{< ref secrets-quickstart.md >}}) | Securely fetch secrets. | -| [Configuration]({{< ref configuration-quickstart.md >}}) | Get configuration items and subscribe for configuration updates. | -| [Resiliency]({{< ref resiliency >}}) | Define and apply fault-tolerance policies to your Dapr API requests. | -| [Cryptography]({{< ref cryptography-quickstart.md >}}) | Encrypt and decrypt data using Dapr's cryptographic APIs. | -| [Jobs]({{< ref jobs-quickstart.md >}}) | Schedule, retrieve, and delete jobs using Dapr's jobs APIs. | -| [Conversation]({{< ref conversation-quickstart.md >}}) | Securely and reliably interact with Large Language Models (LLMs). | \ No newline at end of file +| [Service Invocation]({{% ref serviceinvocation-quickstart %}}) | Synchronous communication between two services using HTTP or gRPC. | +| [Publish and Subscribe]({{% ref pubsub-quickstart %}}) | Asynchronous communication between two services using messaging. | +| [Workflow]({{% ref workflow-quickstart %}}) | Orchestrate business workflow activities in long running, fault-tolerant, stateful applications. | +| [State Management]({{% ref statemanagement-quickstart %}}) | Store a service's data as key/value pairs in supported state stores. | +| [Bindings]({{% ref bindings-quickstart %}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | +| [Actors]({{% ref actors-quickstart %}}) | Run a microservice and a simple console client to demonstrate stateful object patterns in Dapr Actors. | +| [Secrets Management]({{% ref secrets-quickstart %}}) | Securely fetch secrets. | +| [Configuration]({{% ref configuration-quickstart %}}) | Get configuration items and subscribe for configuration updates. | +| [Resiliency]({{% ref resiliency %}}) | Define and apply fault-tolerance policies to your Dapr API requests. | +| [Cryptography]({{% ref cryptography-quickstart %}}) | Encrypt and decrypt data using Dapr's cryptographic APIs. | +| [Jobs]({{% ref jobs-quickstart %}}) | Schedule, retrieve, and delete jobs using Dapr's jobs APIs. | +| [Conversation]({{% ref conversation-quickstart %}}) | Securely and reliably interact with Large Language Models (LLMs). | \ No newline at end of file diff --git a/daprdocs/content/en/getting-started/quickstarts/actors-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/actors-quickstart.md index 47c698be345..c6e9c16bd29 100644 --- a/daprdocs/content/en/getting-started/quickstarts/actors-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/actors-quickstart.md @@ -6,14 +6,14 @@ weight: 76 description: "Get started with Dapr's Actors building block" --- -Let's take a look at Dapr's [Actors building block]({{< ref actors >}}). In this Quickstart, you will run a smart device microservice and a simple console client to demonstrate the stateful object patterns in Dapr Actors. +Let's take a look at Dapr's [Actors building block]({{% ref actors %}}). In this Quickstart, you will run a smart device microservice and a simple console client to demonstrate the stateful object patterns in Dapr Actors. Currently, you can experience this actors quickstart using the .NET SDK. -{{< tabs ".NET" >}} +{{% tabpane ".NET" %}} -{{% codetab %}} +{{% tab %}} As a quick overview of the .NET actors quickstart: @@ -242,10 +242,10 @@ For full context of the sample, take a look at the following code: - [`ISmartDevice`](https://github.com/dapr/quickstarts/blob/master/actors/csharp/sdk/interfaces/ISmartDevice.cs): The method definitions and shared data types for each `SmokeDetectorActor` - [`IController`](https://github.com/dapr/quickstarts/blob/master/actors/csharp/sdk/interfaces/IController.cs): The method definitions and shared data types for the `ControllerActor` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! @@ -255,6 +255,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 ## Next steps -Learn more about [the Actor building block]({{< ref actors >}}) +Learn more about [the Actor building block]({{% ref actors %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/bindings-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/bindings-quickstart.md index 3dc076e0a6b..777852b167a 100644 --- a/daprdocs/content/en/getting-started/quickstarts/bindings-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/bindings-quickstart.md @@ -6,20 +6,20 @@ weight: 75 description: "Get started with Dapr's Binding building block" --- -Let's take a look at Dapr's [Bindings building block]({{< ref bindings >}}). Using bindings, you can: +Let's take a look at Dapr's [Bindings building block]({{% ref bindings %}}). Using bindings, you can: - Trigger your app with events coming in from external systems. - Interface with external systems. -In this Quickstart, you schedule a batch script to run every 10 seconds using an input [Cron]({{< ref cron.md >}}) binding. The script processes a JSON file and outputs data to a SQL database using the [PostgreSQL]({{< ref postgresql.md >}}) Dapr binding. +In this Quickstart, you schedule a batch script to run every 10 seconds using an input [Cron]({{% ref cron %}}) binding. The script processes a JSON file and outputs data to a SQL database using the [PostgreSQL]({{% ref postgresql %}}) Dapr binding. Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -90,7 +90,7 @@ dapr run --app-id batch-sdk --app-port 50051 --resources-path ../../../component > **Note**: Since Python3.exe is not defined in Windows, you may need to use `python app.py` instead of `python3 app.py`. -The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{< ref "#componentsbinding-cronyaml-component-file" >}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. +The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{% ref "#componentsbinding-cronyaml-component-file" %}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. ```python # Triggered by Dapr input binding @@ -98,7 +98,7 @@ The code inside the `process_batch` function is executed every 10 seconds (defin def process_batch(): ``` -The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{< ref "#componentbinding-postgresyaml-component-file" >}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. +The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{% ref "#componentbinding-postgresyaml-component-file" %}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. ```python with DaprClient() as d: @@ -172,7 +172,7 @@ The output should look like this: When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the Cron [binding building block]({{< ref bindings >}}) +- Initiates the Cron [binding building block]({{% ref bindings %}}) - Calls the binding endpoint (`batch`) every 10 seconds The Cron `binding-cron.yaml` file included for this Quickstart contains the following: @@ -193,16 +193,16 @@ spec: value: "input" # direction of the cron binding ``` -**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{< ref cron.md >}}) that specifies how often the binding is invoked. +**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{% ref cron %}}) that specifies how often the binding is invoked. #### `component\binding-postgresql.yaml` component file When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the PostgreSQL [binding building block]({{< ref postgresql.md >}}) +- Initiates the PostgreSQL [binding building block]({{% ref postgresql %}}) - Connects to PostgreSQL using the settings specified in the `binding-postgresql.yaml` file -With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{< ref supported-bindings.md >}}) without making code changes. +With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{% ref supported-bindings %}}) without making code changes. The PostgreSQL `binding-postgresql.yaml` file included for this Quickstart contains the following: @@ -227,10 +227,10 @@ In the YAML file: - `spec/type` specifies that PostgreSQL is used for this binding. - `spec/metadata` defines the connection to the PostgreSQL instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -299,7 +299,7 @@ Run the `batch-sdk` service alongside a Dapr sidecar. dapr run --app-id batch-sdk --app-port 5002 --dapr-http-port 3500 --resources-path ../../../components -- node index.js ``` -The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{< ref "#componentsbinding-cronyaml-component-file" >}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. +The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{% ref "#componentsbinding-cronyaml-component-file" %}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. ```javascript async function start() { @@ -308,7 +308,7 @@ async function start() { } ``` -The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{< ref "##componentsbinding-postgresyaml-component-file" >}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. +The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{% ref "##componentsbinding-postgresyaml-component-file" %}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. ```javascript async function processBatch(){ @@ -378,7 +378,7 @@ The output should look like this: When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the Cron [binding building block]({{< ref bindings >}}) +- Initiates the Cron [binding building block]({{% ref bindings %}}) - Calls the binding endpoint (`batch`) every 10 seconds The Cron `binding-cron.yaml` file included for this Quickstart contains the following: @@ -399,16 +399,16 @@ spec: value: "input" # direction of the cron binding ``` -**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{< ref cron.md >}}) that specifies how often the binding is invoked. +**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{% ref cron %}}) that specifies how often the binding is invoked. #### `component\binding-postgresql.yaml` component file When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the PostgreSQL [binding building block]({{< ref postgresql.md >}}) +- Initiates the PostgreSQL [binding building block]({{% ref postgresql %}}) - Connects to PostgreSQL using the settings specified in the `binding-postgresql.yaml` file -With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{< ref supported-bindings.md >}}) without making code changes. +With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{% ref supported-bindings %}}) without making code changes. The PostgreSQL `binding-postgresql.yaml` file included for this Quickstart contains the following: @@ -433,10 +433,10 @@ In the YAML file: - `spec/type` specifies that PostgreSQL is used for this binding. - `spec/metadata` defines the connection to the PostgreSQL instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -509,7 +509,7 @@ Run the `batch-sdk` service alongside a Dapr sidecar. dapr run --app-id batch-sdk --app-port 7002 --resources-path ../../../components -- dotnet run ``` -The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{< ref "#componentsbinding-cronyaml-component-file" >}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. +The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{% ref "#componentsbinding-cronyaml-component-file" %}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. ```csharp app.MapPost("/" + cronBindingName, async () => { @@ -517,7 +517,7 @@ app.MapPost("/" + cronBindingName, async () => { }); ``` -The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{< ref "#componentbinding-postgresyaml-component-file" >}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. +The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{% ref "#componentbinding-postgresyaml-component-file" %}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. ```csharp // ... @@ -589,7 +589,7 @@ The output should look like this: When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the Cron [binding building block]({{< ref bindings >}}) +- Initiates the Cron [binding building block]({{% ref bindings %}}) - Calls the binding endpoint (`batch`) every 10 seconds The Cron `binding-cron.yaml` file included for this Quickstart contains the following: @@ -610,16 +610,16 @@ spec: value: "input" # direction of the cron binding ``` -**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{< ref cron.md >}}) that specifies how often the binding is invoked. +**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{% ref cron %}}) that specifies how often the binding is invoked. #### `component\binding-postgresql.yaml` component file When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the PostgreSQL [binding building block]({{< ref postgresql.md >}}) +- Initiates the PostgreSQL [binding building block]({{% ref postgresql %}}) - Connects to PostgreSQL using the settings specified in the `binding-postgresql.yaml` file -With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{< ref supported-bindings.md >}}) without making code changes. +With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{% ref supported-bindings %}}) without making code changes. The PostgreSQL `binding-postgresql.yaml` file included for this Quickstart contains the following: @@ -644,10 +644,10 @@ In the YAML file: - `spec/type` specifies that PostgreSQL is used for this binding. - `spec/metadata` defines the connection to the PostgreSQL instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -719,14 +719,14 @@ Run the `batch-sdk` service alongside a Dapr sidecar. dapr run --app-id batch-sdk --app-port 8080 --resources-path ../../../components -- java -jar target/BatchProcessingService-0.0.1-SNAPSHOT.jar ``` -The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{< ref "#componentsbinding-cronyaml-component-file" >}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. +The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{% ref "#componentsbinding-cronyaml-component-file" %}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. ```java @PostMapping(path = cronBindingPath, consumes = MediaType.ALL_VALUE) public ResponseEntity processBatch() throws IOException, Exception ``` -The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{< ref "#componentbinding-postgresyaml-component-file" >}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. +The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{% ref "#componentbinding-postgresyaml-component-file" %}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. ```java try (DaprClient client = new DaprClientBuilder().build()) { @@ -803,7 +803,7 @@ The output should look like this: When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the Cron [binding building block]({{< ref bindings >}}) +- Initiates the Cron [binding building block]({{% ref bindings %}}) - Calls the binding endpoint (`batch`) every 10 seconds The Cron `binding-cron.yaml` file included for this Quickstart contains the following: @@ -824,16 +824,16 @@ spec: value: "input" # direction of the cron binding ``` -**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{< ref cron.md >}}) that specifies how often the binding is invoked. +**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{% ref cron %}}) that specifies how often the binding is invoked. #### `component\binding-postgresql.yaml` component file When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the PostgreSQL [binding building block]({{< ref postgresql.md >}}) +- Initiates the PostgreSQL [binding building block]({{% ref postgresql %}}) - Connects to PostgreSQL using the settings specified in the `binding-postgresql.yaml` file -With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{< ref supported-bindings.md >}}) without making code changes. +With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{% ref supported-bindings %}}) without making code changes. The PostgreSQL `binding-postgresql.yaml` file included for this Quickstart contains the following: @@ -858,10 +858,10 @@ In the YAML file: - `spec/type` specifies that PostgreSQL is used for this binding. - `spec/metadata` defines the connection to the PostgreSQL instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -930,14 +930,14 @@ Run the `batch-sdk` service alongside a Dapr sidecar. dapr run --app-id batch-sdk --app-port 6002 --dapr-http-port 3502 --dapr-grpc-port 60002 --resources-path ../../../components -- go run . ``` -The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{< ref "#componentsbinding-cronyaml-component-file" >}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. +The code inside the `process_batch` function is executed every 10 seconds (defined in [`binding-cron.yaml`]({{% ref "#componentsbinding-cronyaml-component-file" %}}) in the `components` directory). The binding trigger looks for a route called via HTTP POST in your application by the Dapr sidecar. ```go // Triggered by Dapr input binding r.HandleFunc("/"+cronBindingName, processBatch).Methods("POST") ``` -The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{< ref "#componentbinding-postgresyaml-component-file" >}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. +The `batch-sdk` service uses the PostgreSQL output binding defined in the [`binding-postgresql.yaml`]({{% ref "#componentbinding-postgresyaml-component-file" %}}) component to insert the `OrderId`, `Customer`, and `Price` records into the `orders` table. ```go func sqlOutput(order Order) (err error) { @@ -1019,7 +1019,7 @@ The output should look like this: When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the Cron [binding building block]({{< ref bindings >}}) +- Initiates the Cron [binding building block]({{% ref bindings %}}) - Calls the binding endpoint (`batch`) every 10 seconds The Cron `binding-cron.yaml` file included for this Quickstart contains the following: @@ -1040,16 +1040,16 @@ spec: value: "input" # direction of the cron binding ``` -**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{< ref cron.md >}}) that specifies how often the binding is invoked. +**Note:** The `metadata` section of `binding-cron.yaml` contains a [Cron expression]({{% ref cron %}}) that specifies how often the binding is invoked. #### `component\binding-postgresql.yaml` component file When you execute the `dapr run` command and specify the component path, the Dapr sidecar: -- Initiates the PostgreSQL [binding building block]({{< ref postgresql.md >}}) +- Initiates the PostgreSQL [binding building block]({{% ref postgresql %}}) - Connects to PostgreSQL using the settings specified in the `binding-postgresql.yaml` file -With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{< ref supported-bindings.md >}}) without making code changes. +With the `binding-postgresql.yaml` component, you can easily swap out the backend database [binding]({{% ref supported-bindings %}}) without making code changes. The PostgreSQL `binding-postgresql.yaml` file included for this Quickstart contains the following: @@ -1074,9 +1074,9 @@ In the YAML file: - `spec/type` specifies that PostgreSQL is used for this binding. - `spec/metadata` defines the connection to the PostgreSQL instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! @@ -1092,6 +1092,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [.NET](https://github.com/dapr/quickstarts/tree/master/bindings/csharp/http) - [Java](https://github.com/dapr/quickstarts/tree/master/bindings/java/http) - [Go](https://github.com/dapr/quickstarts/tree/master/bindings/go/http) -- Learn more about [Binding building block]({{< ref bindings >}}) +- Learn more about [Binding building block]({{% ref bindings %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/configuration-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/configuration-quickstart.md index bd4f44a2a8d..849f0b75421 100644 --- a/daprdocs/content/en/getting-started/quickstarts/configuration-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/configuration-quickstart.md @@ -6,7 +6,7 @@ weight: 78 description: Get started with Dapr's Configuration building block --- -Let's take a look at Dapr's [Configuration building block]({{< ref configuration-api-overview.md >}}). A configuration item is often dynamic in nature and tightly coupled to the needs of the application that consumes it. Configuration items are key/value pairs containing configuration data, such as: +Let's take a look at Dapr's [Configuration building block]({{% ref configuration-api-overview %}}). A configuration item is often dynamic in nature and tightly coupled to the needs of the application that consumes it. Configuration items are key/value pairs containing configuration data, such as: - App ids - Partition keys - Database names, etc @@ -19,9 +19,9 @@ In this quickstart, you'll run an `order-processor` microservice that utilizes t Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -140,11 +140,11 @@ if unsubscribed == True: ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -262,10 +262,10 @@ setTimeout(() => { }, ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -382,10 +382,10 @@ try } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -500,10 +500,10 @@ if (unsubscribe.getIsUnsubscribed()) { } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -619,9 +619,9 @@ case <-ctx.Done(): } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Demo @@ -643,6 +643,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [.NET](https://github.com/dapr/quickstarts/tree/master/configuration/csharp/http) - [Java](https://github.com/dapr/quickstarts/tree/master/configuration/java/http) - [Go](https://github.com/dapr/quickstarts/tree/master/configuration/go/http) -- Learn more about [Configuration building block]({{< ref configuration-api-overview >}}) +- Learn more about [Configuration building block]({{% ref configuration-api-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/conversation-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/conversation-quickstart.md index a9775c6199d..3cda773528c 100644 --- a/daprdocs/content/en/getting-started/quickstarts/conversation-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/conversation-quickstart.md @@ -10,12 +10,12 @@ description: Get started with the Dapr conversation building block The conversation building block is currently in **alpha**. {{% /alert %}} -Let's take a look at how the [Dapr conversation building block]({{< ref conversation-overview.md >}}) makes interacting with Large Language Models (LLMs) easier. In this quickstart, you use the echo component to communicate with the mock LLM and ask it to define Dapr. +Let's take a look at how the [Dapr conversation building block]({{% ref conversation-overview %}}) makes interacting with Large Language Models (LLMs) easier. In this quickstart, you use the echo component to communicate with the mock LLM and ask it to define Dapr. You can try out this conversation quickstart by either: -- [Running the application in this sample with the Multi-App Run template file]({{< ref "#run-the-app-with-the-template-file" >}}), or -- [Running the application without the template]({{< ref "#run-the-app-without-the-template" >}}) +- [Running the application in this sample with the Multi-App Run template file]({{% ref "#run-the-app-with-the-template-file" %}}), or +- [Running the application without the template]({{% ref "#run-the-app-without-the-template" %}}) {{% alert title="Note" color="primary" %}} Currently, you can only use JavaScript for the quickstart sample using HTTP, not the JavaScript SDK. @@ -23,10 +23,10 @@ Currently, you can only use JavaScript for the quickstart sample using HTTP, not ## Run the app with the template file -{{< tabs Python JavaScript ".NET" Go >}} +{{% tabpane Python JavaScript ".NET" Go %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -76,13 +76,13 @@ dapr run -f . ### What happened? -When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) was generated in the `.dapr/components` directory. +When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) was generated in the `.dapr/components` directory. -Running `dapr run -f .` in this Quickstart started [conversation.go]({{< ref "#programcs-conversation-app" >}}). +Running `dapr run -f .` in this Quickstart started [conversation.go]({{% ref "#programcs-conversation-app" %}}). #### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: ```yml version: 1 @@ -108,7 +108,7 @@ spec: version: v1 ``` -To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{< ref "supported-conversation" >}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{< ref "howto-conversation-layer.md#use-the-openai-component" >}}) +To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{% ref "supported-conversation" %}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{% ref "howto-conversation-layer#use-the-openai-component" %}}) #### `app.py` conversation app @@ -141,10 +141,10 @@ with DaprClient() as d: print(f'Output response: {output.result}') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -194,13 +194,13 @@ dapr run -f . ### What happened? -When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) was generated in the `.dapr/components` directory. +When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) was generated in the `.dapr/components` directory. -Running `dapr run -f .` in this Quickstart started [conversation.go]({{< ref "#programcs-conversation-app" >}}). +Running `dapr run -f .` in this Quickstart started [conversation.go]({{% ref "#programcs-conversation-app" %}}). #### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: ```yml version: 1 @@ -227,7 +227,7 @@ spec: version: v1 ``` -To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{< ref "supported-conversation" >}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{< ref "howto-conversation-layer.md#use-the-openai-component" >}}) +To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{% ref "supported-conversation" %}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{% ref "howto-conversation-layer#use-the-openai-component" %}}) #### `index.js` conversation app @@ -277,10 +277,10 @@ main().catch((error) => { }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -324,13 +324,13 @@ dapr run -f . ### What happened? -When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) was generated in the `.dapr/components` directory. +When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) was generated in the `.dapr/components` directory. -Running `dapr run -f .` in this Quickstart started the [conversation Program.cs]({{< ref "#programcs-conversation-app" >}}). +Running `dapr run -f .` in this Quickstart started the [conversation Program.cs]({{% ref "#programcs-conversation-app" %}}). #### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: ```yml version: 1 @@ -357,7 +357,7 @@ spec: version: v1 ``` -To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{< ref "supported-conversation" >}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{< ref "howto-conversation-layer.md#use-the-openai-component" >}}) +To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{% ref "supported-conversation" %}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{% ref "howto-conversation-layer#use-the-openai-component" %}}) #### `Program.cs` conversation app @@ -407,10 +407,10 @@ class Program } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -454,13 +454,13 @@ dapr run -f . ### What happened? -When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) was generated in the `.dapr/components` directory. +When you ran `dapr init` during Dapr install, the [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) was generated in the `.dapr/components` directory. -Running `dapr run -f .` in this Quickstart started [conversation.go]({{< ref "#programcs-conversation-app" >}}). +Running `dapr run -f .` in this Quickstart started [conversation.go]({{% ref "#programcs-conversation-app" %}}). #### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. This Quickstart has only one application, so the `dapr.yaml` file contains the following: ```yml version: 1 @@ -487,7 +487,7 @@ spec: version: v1 ``` -To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{< ref "supported-conversation" >}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{< ref "howto-conversation-layer.md#use-the-openai-component" >}}) +To interface with a real LLM, swap out the mock component with one of [the supported conversation components]({{% ref "supported-conversation" %}}). For example, to use an OpenAI component, see the [example in the conversation how-to guide]({{% ref "howto-conversation-layer#use-the-openai-component" %}}) #### `conversation.go` conversation app @@ -533,16 +533,16 @@ func main() { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run the app without the template -{{< tabs Python JavaScript ".NET" Go >}} +{{% tabpane Python JavaScript ".NET" Go %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -592,10 +592,10 @@ dapr run --app-id conversation --resources-path ../../../components -- python3 a == APP - conversation == Output response: What is dapr? ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -643,10 +643,10 @@ dapr run --app-id conversation --resources-path ../../../components/ -- npm run == APP - conversation == Output response: What is dapr? ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -694,10 +694,10 @@ dapr run --app-id conversation --resources-path ../../../components/ -- dotnet r == APP - conversation == Output response: What is dapr? ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -745,9 +745,9 @@ dapr run --app-id conversation --resources-path ../../../components/ -- go run . == APP - conversation == Output response: What is dapr? ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Demo @@ -768,6 +768,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [JavaScript](https://github.com/dapr/quickstarts/tree/master/conversation/javascript/http) - [.NET](https://github.com/dapr/quickstarts/tree/master/conversation/csharp/http) - [Go](https://github.com/dapr/quickstarts/tree/master/conversation/go/http) -- Learn more about [the conversation building block]({{< ref conversation-overview.md >}}) +- Learn more about [the conversation building block]({{% ref conversation-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/cryptography-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/cryptography-quickstart.md index 76ace1305b7..699cdeec6e5 100644 --- a/daprdocs/content/en/getting-started/quickstarts/cryptography-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/cryptography-quickstart.md @@ -10,7 +10,7 @@ description: Get started with the Dapr Cryptography building block The cryptography building block is currently in **alpha**. {{% /alert %}} -Let's take a look at the Dapr [cryptography building block]({{< ref cryptography >}}). In this Quickstart, you'll create an application that encrypts and decrypts data using the Dapr cryptography APIs. You'll: +Let's take a look at the Dapr [cryptography building block]({{% ref cryptography %}}). In this Quickstart, you'll create an application that encrypts and decrypts data using the Dapr cryptography APIs. You'll: - Encrypt and then decrypt a short string (using an RSA key), reading the result in-memory, in a Go byte slice. - Encrypt and then decrypt a large file (using an AES key), storing the encrypted and decrypted data to files using streams. @@ -23,10 +23,10 @@ This example uses the Dapr SDK, which leverages gRPC and is **strongly** recomme Currently, you can experience the cryptography API using the Go SDK. -{{< tabs "JavaScript" "Go" >}} +{{% tabpane "JavaScript" "Go" %}} -{{% codetab %}} +{{% tab %}} > This quickstart includes a JavaScript application called `crypto-quickstart`. @@ -225,10 +225,10 @@ The application then decrypts the large image file: } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} > This quickstart includes a Go application called `crypto-quickstart`. @@ -466,10 +466,10 @@ The application then decrypts the large image file: } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Watch the demo @@ -485,7 +485,7 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 ## Next steps -- Walk through [more examples of encrypting and decrypting using the cryptography API]({{< ref howto-cryptography.md >}}) -- Learn more about [cryptography as a Dapr building block]({{< ref cryptography-overview.md >}}) +- Walk through [more examples of encrypting and decrypting using the cryptography API]({{% ref howto-cryptography %}}) +- Learn more about [cryptography as a Dapr building block]({{% ref cryptography-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/jobs-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/jobs-quickstart.md index 9435df1944f..645b5f96cd6 100644 --- a/daprdocs/content/en/getting-started/quickstarts/jobs-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/jobs-quickstart.md @@ -10,21 +10,21 @@ description: Get started with the Dapr jobs building block The jobs building block is currently in **alpha**. {{% /alert %}} -Let's take a look at the [Dapr jobs building block]({{< ref jobs-overview.md >}}), which schedules and runs jobs at a specific time or interval. In this Quickstart, you'll schedule, get, and delete a job using Dapr's Job API. +Let's take a look at the [Dapr jobs building block]({{% ref jobs-overview %}}), which schedules and runs jobs at a specific time or interval. In this Quickstart, you'll schedule, get, and delete a job using Dapr's Job API. You can try out this jobs quickstart by either: -- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{< ref "#run-using-multi-app-run" >}}), or -- [Running one application at a time]({{< ref "#run-one-job-application-at-a-time" >}}) +- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{% ref "#run-using-multi-app-run" %}}), or +- [Running one application at a time]({{% ref "#run-one-job-application-at-a-time" %}}) ## Run using Multi-App Run Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. Currently, you can experiment with the jobs API with the Go SDK. -{{< tabs Go >}} +{{% tabpane Go %}} -{{% codetab %}} +{{% tab %}} This quickstart includes two apps: @@ -106,7 +106,7 @@ dapr stop -f . When you ran `dapr init` during Dapr install: - The `dapr_scheduler` control plane was started alongside other Dapr services. -- [The `dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) was generated in the `.dapr/components` directory. +- [The `dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) was generated in the `.dapr/components` directory. Running `dapr run -f .` in this Quickstart started both the `job-scheduler` and the `job-service`. In the terminal output, you can see the following jobs being scheduled, retrieved, and deleted. @@ -121,7 +121,7 @@ Running `dapr run -f .` in this Quickstart started both the `job-scheduler` and #### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -414,16 +414,16 @@ func delete(droidJob DroidJob) error { } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run one job application at a time -{{< tabs Go >}} +{{% tabpane Go %}} -{{% codetab %}} +{{% tab %}} This quickstart includes two apps: @@ -501,11 +501,11 @@ Return to the `job-service` app terminal window. The output should be: == APP == Executing maintenance job: Memory Wipe ``` -Unpack what happened in the [`job-service`]({{< ref "#job-service-app" >}}) and [`job-scheduler`]({{< ref "#job-scheduler-app" >}}) applications when you ran `dapr run`. +Unpack what happened in the [`job-service`]({{% ref "#job-service-app" %}}) and [`job-scheduler`]({{% ref "#job-scheduler-app" %}}) applications when you ran `dapr run`. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Watch the demo @@ -524,7 +524,7 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - HTTP samples of this quickstart: - [Go](https://github.com/dapr/quickstarts/tree/master/jobs/go/http) -- Learn more about [the jobs building block]({{< ref jobs-overview.md >}}) -- Learn more about [the scheduler control plane]({{< ref scheduler.md >}}) +- Learn more about [the jobs building block]({{% ref jobs-overview %}}) +- Learn more about [the scheduler control plane]({{% ref scheduler %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/pubsub-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/pubsub-quickstart.md index 4dc5543f3e4..f16efe9696c 100644 --- a/daprdocs/content/en/getting-started/quickstarts/pubsub-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/pubsub-quickstart.md @@ -6,7 +6,7 @@ weight: 72 description: "Get started with Dapr's Publish and Subscribe building block" --- -Let's take a look at Dapr's [Publish and Subscribe (Pub/sub) building block]({{< ref pubsub >}}). In this Quickstart, you will run a publisher microservice and a subscriber microservice to demonstrate how Dapr enables a Pub/sub pattern. +Let's take a look at Dapr's [Publish and Subscribe (Pub/sub) building block]({{% ref pubsub %}}). In this Quickstart, you will run a publisher microservice and a subscriber microservice to demonstrate how Dapr enables a Pub/sub pattern. 1. Using a publisher service, developers can repeatedly publish messages to a topic. 1. [A Pub/sub component](https://docs.dapr.io/concepts/components-concept/#pubsub-brokers) queues or brokers those messages. Our example below uses Redis, you can use RabbitMQ, Kafka, etc. @@ -16,16 +16,16 @@ Let's take a look at Dapr's [Publish and Subscribe (Pub/sub) building block]({{< You can try out this pub/sub quickstart by either: -- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{< ref "#run-using-multi-app-run" >}}), or -- [Running one application at a time]({{< ref "#run-one-application-at-a-time" >}}) +- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{% ref "#run-using-multi-app-run" %}}), or +- [Running one application at a time]({{% ref "#run-one-application-at-a-time" %}}) ## Run using Multi-App Run Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -74,7 +74,7 @@ With the following command, simultaneously run the following services alongside ```bash dapr run -f . ``` -> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{< ref "#dapryaml-multi-app-run-template-file" >}}) file before running `dapr run -f .` +> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{% ref "#dapryaml-multi-app-run-template-file" %}}) file before running `dapr run -f .` **Expected output** @@ -106,14 +106,14 @@ Exited App successfully ### What happened? When you ran `dapr init` during Dapr install, the following YAML files were generated in the `.dapr/components` directory: -- [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) -- [`pubsub.yaml` component file]({{< ref "#pubsubyaml-component-file" >}}) +- [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) +- [`pubsub.yaml` component file]({{% ref "#pubsubyaml-component-file" %}}) -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-subscriber" >}}) and [publisher]({{< ref "#checkout-publisher" >}}) applications. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-subscriber" %}}) and [publisher]({{% ref "#checkout-publisher" %}}) applications. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -158,7 +158,7 @@ In the component YAML file: ##### `order-processor` subscriber -In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```py # Register Dapr pub/sub subscriptions @@ -187,7 +187,7 @@ app.run(port=5001) ##### `checkout` publisher -In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```python with DaprClient() as client: @@ -200,10 +200,10 @@ with DaprClient() as client: ) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -279,14 +279,14 @@ Exited App successfully ### What happened? When you ran `dapr init` during Dapr install, the following YAML files were generated in the `.dapr/components` directory: -- [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) -- [`pubsub.yaml` component file]({{< ref "#pubsubyaml-component-file" >}}) +- [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) +- [`pubsub.yaml` component file]({{% ref "#pubsubyaml-component-file" %}}) -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-subscriber" >}}) and [publisher]({{< ref "#checkout-publisher" >}}) applications. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-subscriber" %}}) and [publisher]({{% ref "#checkout-publisher" %}}) applications. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -331,7 +331,7 @@ In the component YAML file: ##### `order-processor` subscriber -In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```js server.pubsub.subscribe("orderpubsub", "orders", (data) => console.log("Subscriber received: " + JSON.stringify(data))); @@ -339,7 +339,7 @@ server.pubsub.subscribe("orderpubsub", "orders", (data) => console.log("Subscrib ##### `checkout` publisher -In the `checkout` publisher service, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher service, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```js const client = new DaprClient(); @@ -348,10 +348,10 @@ await client.pubsub.publish(PUBSUB_NAME, PUBSUB_TOPIC, order); console.log("Published data: " + JSON.stringify(order)); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -431,14 +431,14 @@ Exited App successfully ### What happened? When you ran `dapr init` during Dapr install, the following YAML files were generated in the `.dapr/components` directory: -- [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) -- [`pubsub.yaml` component file]({{< ref "#pubsubyaml-component-file" >}}) +- [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) +- [`pubsub.yaml` component file]({{% ref "#pubsubyaml-component-file" %}}) -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-subscriber" >}}) and [publisher]({{< ref "#checkout-publisher" >}}) applications. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-subscriber" %}}) and [publisher]({{% ref "#checkout-publisher" %}}) applications. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -483,7 +483,7 @@ In the component YAML file: ##### `order-processor` subscriber -In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```cs // Dapr subscription in [Topic] routes orders topic to this route @@ -497,7 +497,7 @@ public record Order([property: JsonPropertyName("orderId")] int OrderId); ##### `checkout` publisher -In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```cs using var client = new DaprClientBuilder().Build(); @@ -505,10 +505,10 @@ await client.PublishEventAsync("orderpubsub", "orders", order); Console.WriteLine("Published data: " + order); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -587,14 +587,14 @@ Exited App successfully ### What happened? When you ran `dapr init` during Dapr install, the following YAML files were generated in the `.dapr/components` directory: -- [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) -- [`pubsub.yaml` component file]({{< ref "#pubsubyaml-component-file" >}}) +- [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) +- [`pubsub.yaml` component file]({{% ref "#pubsubyaml-component-file" %}}) -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-subscriber" >}}) and [publisher]({{< ref "#checkout-publisher" >}}) applications. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-subscriber" %}}) and [publisher]({{% ref "#checkout-publisher" %}}) applications. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -639,7 +639,7 @@ In the component YAML file: ##### `order-processor` subscriber -In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```java @Topic(name = "orders", pubsubName = "orderpubsub") @@ -658,7 +658,7 @@ public Mono getCheckout(@RequestBody(required = false) CloudEven ##### `checkout` publisher -In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```java DaprClient client = new DaprClientBuilder().build(); @@ -669,10 +669,10 @@ client.publishEvent( logger.info("Published data: " + order.getOrderId()); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -747,14 +747,14 @@ Exited App successfully ### What happened? When you ran `dapr init` during Dapr install, the following YAML files were generated in the `.dapr/components` directory: -- [`dapr.yaml` Multi-App Run template file]({{< ref "#dapryaml-multi-app-run-template-file" >}}) -- [`pubsub.yaml` component file]({{< ref "#pubsubyaml-component-file" >}}) +- [`dapr.yaml` Multi-App Run template file]({{% ref "#dapryaml-multi-app-run-template-file" %}}) +- [`pubsub.yaml` component file]({{% ref "#pubsubyaml-component-file" %}}) -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-subscriber" >}}) and [publisher]({{< ref "#checkout-publisher" >}}) applications. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-subscriber" %}}) and [publisher]({{% ref "#checkout-publisher" %}}) applications. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -799,7 +799,7 @@ In the component YAML file: ##### `order-processor` subscriber -In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, you subscribe to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```go func eventHandler(ctx context.Context, e *common.TopicEvent) (retry bool, err error) { @@ -810,7 +810,7 @@ func eventHandler(ctx context.Context, e *common.TopicEvent) (retry bool, err er ##### `checkout` publisher -In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, you publish the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```go client, err := dapr.NewClient() @@ -822,17 +822,17 @@ if err := client.PublishEvent(ctx, PUBSUB_NAME, PUBSUB_TOPIC, []byte(order)); er fmt.Println("Published data: ", order) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run one application at a time Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -875,7 +875,7 @@ dapr run --app-id order-processor --resources-path ../../../components/ --app-po > **Note**: Since Python3.exe is not defined in Windows, you may need to use `python app.py` instead of `python3 app.py`. -In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```py # Register Dapr pub/sub subscriptions @@ -924,7 +924,7 @@ dapr run --app-id checkout --resources-path ../../../components/ -- python3 app. > **Note**: Since Python3.exe is not defined in Windows, you may need to use `python app.py` instead of `python3 app.py`. -In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```python with DaprClient() as client: @@ -1003,10 +1003,10 @@ In the YAML file: - `spec/metadata` defines the connection to the instance of the component. - `scopes` specify which application can use the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1052,7 +1052,7 @@ Run the `order-processor` subscriber service alongside a Dapr sidecar. dapr run --app-port 5002 --app-id order-processing --app-protocol http --dapr-http-port 3501 --resources-path ../../../components -- npm run start ``` -In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```js server.pubsub.subscribe("orderpubsub", "orders", (data) => console.log("Subscriber received: " + JSON.stringify(data))); @@ -1084,7 +1084,7 @@ Run the `checkout` publisher service alongside a Dapr sidecar. dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 --resources-path ../../../components -- npm run start ``` -In the `checkout` publisher service, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher service, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```js const client = new DaprClient(); @@ -1161,10 +1161,10 @@ In the YAML file: - `spec/metadata` defines the connection to the instance of the component. - `scopes` specify which application can use the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1206,7 +1206,7 @@ Run the `order-processor` subscriber service alongside a Dapr sidecar. dapr run --app-id order-processor --resources-path ../../../components --app-port 7006 -- dotnet run ``` -In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```cs // Dapr subscription in [Topic] routes orders topic to this route @@ -1240,7 +1240,7 @@ Run the `checkout` publisher service alongside a Dapr sidecar. dapr run --app-id checkout --resources-path ../../../components -- dotnet run ``` -In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```cs using var client = new DaprClientBuilder().Build(); @@ -1314,10 +1314,10 @@ In the YAML file: - `spec/metadata` defines the connection to the instance of the component. - `scopes` specify which application can use the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1361,7 +1361,7 @@ Run the `order-processor` subscriber service alongside a Dapr sidecar. dapr run --app-port 8080 --app-id order-processor --resources-path ../../../components -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` -In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```java @Topic(name = "orders", pubsubName = "orderpubsub") @@ -1399,7 +1399,7 @@ Run the `checkout` publisher service alongside a Dapr sidecar. dapr run --app-id checkout --resources-path ../../../components -- java -jar target/CheckoutService-0.0.1-SNAPSHOT.jar ``` -In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```java DaprClient client = new DaprClientBuilder().build(); @@ -1479,10 +1479,10 @@ In the YAML file: - `spec/metadata` defines the connection to the instance of the component. - `scopes` specify which application can use the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1523,7 +1523,7 @@ Run the `order-processor` subscriber service alongside a Dapr sidecar. dapr run --app-port 6005 --app-id order-processor-sdk --app-protocol http --dapr-http-port 3501 --resources-path ../../../components -- go run . ``` -In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. +In the `order-processor` subscriber, we're subscribing to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. This enables your app code to talk to the Redis component instance through the Dapr sidecar. ```go func eventHandler(ctx context.Context, e *common.TopicEvent) (retry bool, err error) { @@ -1553,7 +1553,7 @@ Run the `checkout` publisher service alongside a Dapr sidecar. dapr run --app-id checkout --app-protocol http --dapr-http-port 3500 --resources-path ../../../components -- go run . ``` -In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{< ref "#pubsubyaml-component-file" >}}) and topic `orders`. As soon as the service starts, it publishes in a loop: +In the `checkout` publisher, we're publishing the orderId message to the Redis instance called `orderpubsub` [(as defined in the `pubsub.yaml` component)]({{% ref "#pubsubyaml-component-file" %}}) and topic `orders`. As soon as the service starts, it publishes in a loop: ```go client, err := dapr.NewClient() @@ -1637,9 +1637,9 @@ In the YAML file: - `spec/metadata` defines the connection to the instance of the component. - `scopes` specify which application can use the component. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! We're continuously working to improve our Quickstart examples and value your feedback. Did you find this Quickstart helpful? Do you have suggestions for improvement? @@ -1654,6 +1654,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [.NET](https://github.com/dapr/quickstarts/tree/master/pub_sub/csharp/http) - [Java](https://github.com/dapr/quickstarts/tree/master/pub_sub/java/http) - [Go](https://github.com/dapr/quickstarts/tree/master/pub_sub/go/http) -- Learn more about [Pub/sub as a Dapr building block]({{< ref pubsub-overview >}}) +- Learn more about [Pub/sub as a Dapr building block]({{% ref pubsub-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md index e19d7a369b1..c9cae8d5ae3 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md @@ -16,9 +16,9 @@ Observe Dapr resiliency capabilities by simulating a system failure. In this Qui Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -221,10 +221,10 @@ dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-htt == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -354,29 +354,29 @@ Since the `resiliency.yaml` spec defines the `order-processor` service as a resi In the `order-processor` window, stop the service: -{{< tabs "MacOs" "Windows" >}} +{{% tabpane "MacOs" "Windows" %}} -{{% codetab %}} +{{% tab %}} ```script CMD + C ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```script CTRL + C ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Once the first request fails, the retry policy titled `retryForever` is applied: @@ -451,10 +451,10 @@ dapr run --app-port 5001 --app-id order-processor --resources-path ../../../reso == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -586,29 +586,29 @@ Since the `resiliency.yaml` spec defines the `order-processor` service as a resi In the `order-processor` window, stop the service: -{{< tabs "MacOs" "Windows" >}} +{{% tabpane "MacOs" "Windows" %}} -{{% codetab %}} +{{% tab %}} ```script CMD + C ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```script CTRL + C ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Once the first request fails, the retry policy titled `retryForever` is applied: @@ -683,10 +683,10 @@ dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-htt == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -819,29 +819,29 @@ Since the `resiliency.yaml` spec defines the `order-processor` service as a resi In the `order-processor` window, stop the service: -{{< tabs "MacOs" "Windows" >}} +{{% tabpane "MacOs" "Windows" %}} -{{% codetab %}} +{{% tab %}} ```script CMD + C ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```script CTRL + C ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Once the first request fails, the retry policy titled `retryForever` is applied: @@ -916,10 +916,10 @@ dapr run --app-id order-processor --resources-path ../../../resources/ --app-por == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -1049,29 +1049,29 @@ Since the `resiliency.yaml` spec defines the `order-processor` service as a resi In the `order-processor` window, stop the service: -{{< tabs "MacOs" "Windows" >}} +{{% tabpane "MacOs" "Windows" %}} -{{% codetab %}} +{{% tab %}} ```script CMD + C ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```script CTRL + C ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Once the first request fails, the retry policy titled `retryForever` is applied: @@ -1146,9 +1146,9 @@ dapr run --app-port 6001 --app-id order-processor --resources-path ../../../reso == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 9cd3817a16c..80ff4c57240 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -16,9 +16,9 @@ Observe Dapr resiliency capabilities by simulating a system failure. In this Qui Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -90,7 +90,7 @@ Run the `order-processor` service alongside a Dapr sidecar. The Dapr sidecar the dapr run --app-id order-processor --resources-path ../../../resources/ -- python3 ``` -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{% ref "statemanagement-quickstart#statestoreyaml-component-file" %}}). ```bash == APP == Saving Order: { orderId: '1' } @@ -186,10 +186,10 @@ INFO[0036] Recovered processing operation component[statestore] output. == APP == Getting Order: { orderId: '9' } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -259,7 +259,7 @@ Run the `order-processor` service alongside a Dapr sidecar. The Dapr sidecar the dapr run --app-id order-processor --resources-path ../../../resources/ -- npm start ``` -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{% ref "statemanagement-quickstart#statestoreyaml-component-file" %}}). ```bash == APP == Saving Order: { orderId: '1' } @@ -355,10 +355,10 @@ INFO[0036] Recovered processing operation component[statestore] output. == APP == Getting Order: { orderId: '9' } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -428,7 +428,7 @@ Run the `order-processor` service alongside a Dapr sidecar. The Dapr sidecar the dapr run --app-id order-processor --resources-path ../../../resources/ -- dotnet run ``` -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{% ref "statemanagement-quickstart#statestoreyaml-component-file" %}}). ```bash == APP == Saving Order: { orderId: '1' } @@ -524,10 +524,10 @@ INFO[0036] Recovered processing operation component[statestore] output. == APP == Getting Order: { orderId: '9' } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -599,7 +599,7 @@ Run the `order-processor` service alongside a Dapr sidecar. The Dapr sidecar the dapr run --app-id order-processor --resources-path ../../../resources/ -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{% ref "statemanagement-quickstart#statestoreyaml-component-file" %}}). ```bash == APP == Saving Order: { orderId: '1' } @@ -695,10 +695,10 @@ INFO[0036] Recovered processing operation component[statestore] output. == APP == Getting Order: { orderId: '9' } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -767,7 +767,7 @@ Run the `order-processor` service alongside a Dapr sidecar. The Dapr sidecar the dapr run --app-id order-processor --resources-path ../../../resources -- go run . ``` -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{% ref "statemanagement-quickstart#statestoreyaml-component-file" %}}). ```bash == APP == Saving Order: { orderId: '1' } @@ -863,9 +863,9 @@ INFO[0036] Recovered processing operation component[statestore] output. == APP == Getting Order: { orderId: '9' } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? @@ -874,6 +874,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 ## Next steps -Learn more about [the resiliency feature]({{< ref resiliency-overview.md >}}) and how it works with Dapr's building block APIs. +Learn more about [the resiliency feature]({{% ref resiliency-overview %}}) and how it works with Dapr's building block APIs. {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/secrets-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/secrets-quickstart.md index 5a799b32496..4ac51034627 100644 --- a/daprdocs/content/en/getting-started/quickstarts/secrets-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/secrets-quickstart.md @@ -16,9 +16,9 @@ Dapr provides a dedicated secrets API that allows developers to retrieve secrets Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -124,10 +124,10 @@ Order-processor output: == APP == INFO:root:Fetched Secret: {'secret': 'YourPasskeyHere'} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -237,10 +237,10 @@ Order-processor output: == APP == Fetched Secret: {"secret":"YourPasskeyHere"} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -349,10 +349,10 @@ Order-processor output: == APP == Fetched Secret: [secret, YourPasskeyHere] ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -457,10 +457,10 @@ Order-processor output: == APP == Fetched Secret: {secret=YourPasskeyHere} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -564,9 +564,9 @@ Order-processor output: == APP == Fetched Secret: YourPasskeyHere ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! @@ -582,6 +582,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [.NET](https://github.com/dapr/quickstarts/tree/master/secrets_management/csharp/http) - [Java](https://github.com/dapr/quickstarts/tree/master/secrets_management/java/http) - [Go](https://github.com/dapr/quickstarts/tree/master/secrets_management/go/http) -- Learn more about the [Secrets Management building block]({{< ref secrets-overview >}}) +- Learn more about the [Secrets Management building block]({{% ref secrets-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/serviceinvocation-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/serviceinvocation-quickstart.md index f925ca75210..190c35a019c 100644 --- a/daprdocs/content/en/getting-started/quickstarts/serviceinvocation-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/serviceinvocation-quickstart.md @@ -11,18 +11,18 @@ With [Dapr's Service Invocation building block](https://docs.dapr.io/developing- Diagram showing the steps of service invocation Dapr offers several methods for service invocation, which you can choose depending on your scenario. For this Quickstart, you'll enable the checkout service to invoke a method using HTTP proxy in the order-processor service and by either: -- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{< ref "#run-using-multi-app-run" >}}), or -- [Running one application at a time]({{< ref "#run-one-application-at-a-time" >}}) +- [Running all applications in this sample simultaneously with the Multi-App Run template file]({{% ref "#run-using-multi-app-run" %}}), or +- [Running one application at a time]({{% ref "#run-one-application-at-a-time" %}}) -Learn more about Dapr's methods for service invocation in the [overview article]({{< ref service-invocation-overview.md >}}). +Learn more about Dapr's methods for service invocation in the [overview article]({{% ref service-invocation-overview %}}). ## Run using Multi-App Run Select your preferred language before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -67,7 +67,7 @@ With the following command, simultaneously run the following services alongside ```bash dapr run -f . ``` -> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{< ref "#dapryaml-multi-app-run-template-file" >}}) file before running `dapr run -f .` +> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{% ref "#dapryaml-multi-app-run-template-file" %}}) file before running `dapr run -f .` **Expected output** @@ -117,11 +117,11 @@ Exited App successfully ### What happened? -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-service" >}}) and [publisher]({{< ref "#checkout-service" >}}) applications using the `dapr.yaml` Multi-App Run template file. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-service" %}}) and [publisher]({{% ref "#checkout-service" %}}) applications using the `dapr.yaml` Multi-App Run template file. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -165,10 +165,10 @@ result = requests.post( ) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -262,11 +262,11 @@ Exited App successfully ### What happened? -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-service" >}}) and [publisher]({{< ref "#checkout-service" >}}) applications using the `dapr.yaml` Multi-App Run template file. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-service" %}}) and [publisher]({{% ref "#checkout-service" %}}) applications using the `dapr.yaml` Multi-App Run template file. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -305,10 +305,10 @@ const res = await axios.post(`${DAPR_HOST}:${DAPR_HTTP_PORT}/orders`, order , ax console.log("Order passed: " + res.config.data); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -407,11 +407,11 @@ Exited App successfully ### What happened? -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-service" >}}) and [publisher]({{< ref "#checkout-service" >}}) applications using the `dapr.yaml` Multi-App Run template file. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-service" %}}) and [publisher]({{% ref "#checkout-service" %}}) applications using the `dapr.yaml` Multi-App Run template file. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -449,10 +449,10 @@ var response = await client.PostAsJsonAsync("/orders", order, cts.Token); Console.WriteLine("Order passed: " + order); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -549,11 +549,11 @@ Exited App successfully ### What happened? -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-service" >}}) and [publisher]({{< ref "#checkout-service" >}}) applications using the `dapr.yaml` Multi-App Run template file. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-service" %}}) and [publisher]({{% ref "#checkout-service" %}}) applications using the `dapr.yaml` Multi-App Run template file. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -590,10 +590,10 @@ HttpResponse response = httpClient.send(request, HttpResponse.BodyHandle System.out.println("Order passed: "+ orderId) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -688,11 +688,11 @@ Exited App successfully ### What happened? -Running `dapr run -f .` in this Quickstart started both the [subscriber]({{< ref "#order-processor-service" >}}) and [publisher]({{< ref "#checkout-service" >}}) applications using the `dapr.yaml` Multi-App Run template file. +Running `dapr run -f .` in this Quickstart started both the [subscriber]({{% ref "#order-processor-service" %}}) and [publisher]({{% ref "#checkout-service" %}}) applications using the `dapr.yaml` Multi-App Run template file. ##### `dapr.yaml` Multi-App Run template file -Running the [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: +Running the [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) with `dapr run -f .` starts all applications in your project. In this Quickstart, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -730,17 +730,17 @@ req.Header.Add("dapr-app-id", "order-processor") response, err := client.Do(req) ``` -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Run one application at a time Select your preferred language before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -832,7 +832,7 @@ result = requests.post( ### Step 5: Use with Multi-App Run -You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{< ref multi-app-dapr-run >}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: +You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{% ref multi-app-dapr-run %}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: ```sh dapr run -f . @@ -878,10 +878,10 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -964,7 +964,7 @@ console.log("Order passed: " + res.config.data); ### Step 5: Use with Multi-App Run -You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{< ref multi-app-dapr-run >}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: +You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{% ref multi-app-dapr-run %}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: ```sh dapr run -f . @@ -1010,10 +1010,10 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr == APP == Order received: {"orderId": 10} ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1099,7 +1099,7 @@ Console.WriteLine("Order passed: " + order); ### Step 5: Use with Multi-App Run -You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{< ref multi-app-dapr-run >}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: +You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{% ref multi-app-dapr-run %}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: ```sh dapr run -f . @@ -1145,10 +1145,10 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr == APP == Order received: Order { OrderId: 10 } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1232,7 +1232,7 @@ System.out.println("Order passed: "+ orderId) ### Step 5: Use with Multi-App Run -You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{< ref multi-app-dapr-run >}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: +You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{% ref multi-app-dapr-run %}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: ```sh dapr run -f . @@ -1278,10 +1278,10 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr == APP == Order received: 10 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Step 1: Pre-requisites @@ -1367,7 +1367,7 @@ response, err := client.Do(req) ### Step 5: Use with Multi-App Run -You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{< ref multi-app-dapr-run >}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: +You can run the Dapr applications in this quickstart with the [Multi-App Run template]({{% ref multi-app-dapr-run %}}). Instead of running two separate `dapr run` commands for the `order-processor` and `checkout` applications, run the following command: ```sh dapr run -f . @@ -1414,9 +1414,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Tell us what you think! We're continuously working to improve our Quickstart examples and value your feedback. Did you find this Quickstart helpful? Do you have suggestions for improvement? @@ -1425,9 +1425,9 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 ## Next Steps -- Learn more about [Service Invocation as a Dapr building block]({{< ref service-invocation-overview.md >}}) +- Learn more about [Service Invocation as a Dapr building block]({{% ref service-invocation-overview %}}) - Learn more about how to invoke Dapr's Service Invocation with: - - [HTTP]({{< ref howto-invoke-discover-services.md >}}), or - - [gRPC]({{< ref howto-invoke-services-grpc.md >}}) + - [HTTP]({{% ref howto-invoke-discover-services %}}), or + - [gRPC]({{% ref howto-invoke-services-grpc %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/statemanagement-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/statemanagement-quickstart.md index bde517c44af..dc78832cb83 100644 --- a/daprdocs/content/en/getting-started/quickstarts/statemanagement-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/statemanagement-quickstart.md @@ -6,21 +6,21 @@ weight: 74 description: "Get started with Dapr's State Management building block" --- -Let's take a look at Dapr's [State Management building block]({{< ref state-management >}}). In this Quickstart, you will save, get, and delete state using a Redis state store by either: -- [Running all applications simultaneously with the Multi-App Run template file]({{< ref "#run-using-multi-app-run" >}}), or -- [Running a single application at a time]({{< ref "#run-one-application-at-a-time" >}}) +Let's take a look at Dapr's [State Management building block]({{% ref state-management %}}). In this Quickstart, you will save, get, and delete state using a Redis state store by either: +- [Running all applications simultaneously with the Multi-App Run template file]({{% ref "#run-using-multi-app-run" %}}), or +- [Running a single application at a time]({{% ref "#run-one-application-at-a-time" %}}) -While this sample uses Redis, you can swap it out for any one of the [supported state stores]({{< ref supported-state-stores.md >}}). +While this sample uses Redis, you can swap it out for any one of the [supported state stores]({{% ref supported-state-stores.md %}}). ## Run using Multi-App Run Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -54,14 +54,14 @@ Install the dependencies: pip3 install -r requirements.txt ``` -Run the `order-processor` service alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). +Run the `order-processor` service alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). ```bash dapr run -f . ``` -> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{< ref "#dapryaml-multi-app-run-template-file" >}}) file before running `dapr run -f .` +> **Note**: Since Python3.exe is not defined in Windows, you may need to change `python3` to `python` in the [`dapr.yaml`]({{% ref "#dapryaml-multi-app-run-template-file" %}}) file before running `dapr run -f .` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```python with DaprClient() as client: @@ -101,7 +101,7 @@ Order-processor output: ##### `dapr.yaml` Multi-App Run template file -When you run `dapr init`, Dapr creates a default [Multi-App Run template file]({{< ref multi-app-dapr-run >}}) named `dapr.yaml`. Running `dapr run -f` starts all applications in your project. In this sample, the `dapr.yaml` file contains the following: +When you run `dapr init`, Dapr creates a default [Multi-App Run template file]({{% ref multi-app-dapr-run %}}) named `dapr.yaml`. Running `dapr run -f` starts all applications in your project. In this sample, the `dapr.yaml` file contains the following: ```yml version: 1 @@ -146,10 +146,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -189,7 +189,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run -f . ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```js const client = new DaprClient() @@ -278,10 +278,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -325,7 +325,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run -f . ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```cs var client = new DaprClientBuilder().Build(); @@ -412,10 +412,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -458,7 +458,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run -f . ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```java try (DaprClient client = new DaprClientBuilder().build()) { @@ -548,10 +548,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -591,7 +591,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run -f . ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```go client, err := dapr.NewClient() @@ -680,18 +680,18 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Run one application at a time Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" "Go" %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -733,7 +733,7 @@ dapr run --app-id order-processor --resources-path ../../../resources/ -- python > **Note**: Since Python3.exe is not defined in Windows, you may need to use `python app.py` instead of `python3 app.py`. -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```python with DaprClient() as client: @@ -804,10 +804,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -851,7 +851,7 @@ Run the `order-processor` service alongside a Dapr sidecar. ```bash dapr run --app-id order-processor --resources-path ../../../resources/ -- npm run start ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```js const client = new DaprClient() @@ -926,10 +926,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -970,7 +970,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run --app-id order-processor --resources-path ../../../resources/ -- dotnet run ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```cs var client = new DaprClientBuilder().Build(); @@ -1043,10 +1043,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -1089,7 +1089,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run --app-id order-processor --resources-path ../../../resources -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```java try (DaprClient client = new DaprClientBuilder().build()) { @@ -1165,10 +1165,10 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ### Pre-requisites @@ -1208,7 +1208,7 @@ Run the `order-processor` service alongside a Dapr sidecar. dapr run --app-id order-processor --resources-path ../../../resources -- go run . ``` -The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). As soon as the service starts, it performs a loop. +The `order-processor` service writes, reads, and deletes an `orderId` key/value pair to the `statestore` instance [defined in the `statestore.yaml` component]({{% ref "#statestoreyaml-component-file" %}}). As soon as the service starts, it performs a loop. ```go client, err := dapr.NewClient() @@ -1283,9 +1283,9 @@ In the YAML file: - `metadata/name` is how your application talks to the component (called `DAPR_STORE_NAME` in the code sample). - `spec/metadata` defines the connection to the Redis instance used by the component. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? @@ -1300,6 +1300,6 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 - [.NET](https://github.com/dapr/quickstarts/tree/master/state_management/csharp/http) - [Java](https://github.com/dapr/quickstarts/tree/master/state_management/java/http) - [Go](https://github.com/dapr/quickstarts/tree/master/state_management/go/http) -- Learn more about [State Management building block]({{< ref state-management >}}) +- Learn more about [State Management building block]({{% ref state-management %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md index 02929b31da4..2f78b6bb4e2 100644 --- a/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/workflow-quickstart.md @@ -10,7 +10,7 @@ description: Get started with the Dapr Workflow building block Redis is currently used as the state store component for Workflows in the Quickstarts. However, Redis does not support transaction rollbacks and should not be used in production as an actor state store. {{% /alert %}} -Let's take a look at the Dapr [Workflow building block]({{< ref workflow-overview.md >}}). In this Quickstart, you'll create a simple console application to demonstrate Dapr's workflow programming model and the workflow management APIs. +Let's take a look at the Dapr [Workflow building block]({{% ref workflow-overview.md %}}). In this Quickstart, you'll create a simple console application to demonstrate Dapr's workflow programming model and the workflow management APIs. In this guide, you'll: @@ -36,10 +36,10 @@ The workflow also contains business logic: Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. -{{< tabs "Python" "JavaScript" ".NET" "Java" Go >}} +{{% tabpane "Python" "JavaScript" ".NET" "Java" Go %}} -{{% codetab %}} +{{% tab %}} The `order-processor` console app starts and manages the `order_processing_workflow`, which simulates purchasing items from a store. The workflow consists of five unique workflow activities, or tasks: @@ -90,7 +90,7 @@ cd .. ### Step 3: Run the order processor app -In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). From the `python/sdk` directory, run the following command: +In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). From the `python/sdk` directory, run the following command: ```bash dapr run -f . @@ -406,10 +406,10 @@ def request_approval_activity(ctx: WorkflowActivityContext, logger.info('Requesting approval for payment of '+f'{input["total_cost"]}'+' USD for ' +f'{input["quantity"]}' +' ' +f'{input["item_name"]}') ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `order-processor` console app starts and manages the lifecycle of an order processing workflow that stores and retrieves data in a state store. The workflow consists of four workflow activities, or tasks: @@ -453,7 +453,7 @@ npm run build ### Step 3: Run the order processor app -In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). From the `javascript/sdk` directory, run the following command: +In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). From the `javascript/sdk` directory, run the following command: ```bash dapr run -f . @@ -783,10 +783,10 @@ export const orderProcessingWorkflow: TWorkflow = async function* (ctx: Workflow } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `order-processor` console app starts and manages the lifecycle of an order processing workflow that stores and retrieves data in a state store. The workflow consists of four workflow activities, or tasks: @@ -838,7 +838,7 @@ cd .. ### Step 3: Run the order processor app -In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). From the `csharp/sdk` directory, run the following command: +In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). From the `csharp/sdk` directory, run the following command: ```bash dapr run -f . @@ -1243,10 +1243,10 @@ Watch [this video to walk through the Dapr Workflow .NET demo](https://youtu.be/ -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `order-processor` console app starts and manages the lifecycle of an order processing workflow that stores and retrieves data in a state store. The workflow consists of four workflow activities, or tasks: @@ -1298,7 +1298,7 @@ cd .. ### Step 3: Run the order processor app -In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). From the `java/sdk` directory, run the following command: +In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). From the `java/sdk` directory, run the following command: ```bash cd workflows/java/sdk @@ -1632,10 +1632,10 @@ The `Activities` directory holds the four workflow activities used by the workfl - [`ProcessPaymentActivity`](https://github.com/dapr/quickstarts/tree/master/workflows/java/sdk/order-processor/src/main/java/io/dapr/quickstarts/workflows/activities/ProcessPaymentActivity.java) - [`UpdateInventoryActivity`](https://github.com/dapr/quickstarts/tree/master/workflows/java/sdk/order-processor/src/main/java/io/dapr/quickstarts/workflows/activities/UpdateInventoryActivity.java) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `order-processor` console app starts and manages the `OrderProcessingWorkflow` workflow, which simulates purchasing items from a store. The workflow consists of five unique workflow activities, or tasks: @@ -1673,7 +1673,7 @@ cd workflows/go/sdk ### Step 3: Run the order processor app -In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{< ref multi-app-dapr-run >}}). From the `go/sdk` directory, run the following command: +In the terminal, start the order processor app alongside a Dapr sidecar using [Multi-App Run]({{% ref multi-app-dapr-run %}}). From the `go/sdk` directory, run the following command: ```bash dapr run -f . @@ -2064,10 +2064,10 @@ func RequestApprovalActivity(ctx workflow.ActivityContext) (any, error) { ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Tell us what you think! @@ -2077,8 +2077,8 @@ Join the discussion in our [discord channel](https://discord.com/channels/778680 ## Next steps -- Set up Dapr Workflow with any programming language using [HTTP instead of an SDK]({{< ref howto-manage-workflow.md >}}) +- Set up Dapr Workflow with any programming language using [HTTP instead of an SDK]({{% ref howto-manage-workflow.md %}}) - Walk through a more in-depth [.NET SDK example workflow](https://github.com/dapr/dotnet-sdk/tree/master/examples/Workflow) -- Learn more about [Workflow as a Dapr building block]({{< ref workflow-overview >}}) +- Learn more about [Workflow as a Dapr building block]({{% ref workflow-overview %}}) {{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/tutorials/_index.md b/daprdocs/content/en/getting-started/tutorials/_index.md index a463e307a6a..3af8018152d 100644 --- a/daprdocs/content/en/getting-started/tutorials/_index.md +++ b/daprdocs/content/en/getting-started/tutorials/_index.md @@ -11,8 +11,8 @@ Now that you've already initialized Dapr and experimented with some of Dapr's bu #### Before you begin -- [Set up your local Dapr environment]({{< ref "install-dapr-cli.md" >}}). -- [Explore one of Dapr's building blocks via our quickstarts]({{< ref "getting-started/quickstarts/_index.md" >}}). +- [Set up your local Dapr environment]({{% ref "install-dapr-cli.md" %}}). +- [Explore one of Dapr's building blocks via our quickstarts]({{% ref "getting-started/quickstarts/_index.md" %}}). ## Tutorials @@ -20,8 +20,8 @@ Thanks to our expansive Dapr community, we offer tutorials hosted both on Dapr D | Dapr Docs tutorials | Description | |--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [Define a component]({{< ref get-started-component.md >}}) | Create a component definition file to interact with the Secrets building block. -| [Configure State & Pub/sub]({{< ref configure-state-pubsub.md >}}) | Configure State Store and Pub/sub message broker components for Dapr. +| [Define a component]({{% ref get-started-component.md %}}) | Create a component definition file to interact with the Secrets building block. +| [Configure State & Pub/sub]({{% ref configure-state-pubsub.md %}}) | Configure State Store and Pub/sub message broker components for Dapr. | GitHub tutorials | Description | |--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md index 13c86ea4957..4d7b9315ee6 100644 --- a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md +++ b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md @@ -14,8 +14,8 @@ To get up and running with the state and Pub/sub building blocks, you'll need tw - As pub/sub message broker component for async-style message delivery. A full list of supported components can be found here: -- [Supported state stores]({{< ref supported-state-stores >}}) -- [Supported pub/sub message brokers]({{< ref supported-pubsub >}}) +- [Supported state stores]({{% ref supported-state-stores %}}) +- [Supported pub/sub message brokers]({{% ref supported-pubsub %}}) For this tutorial, we describe how to get up and running with Redis. @@ -28,13 +28,13 @@ Dapr can use any Redis instance, either: If you already have a Redis store, move on to the [configuration](#configure-dapr-components) section. -{{< tabs "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" %}} -{{% codetab %}} +{{% tab %}} Redis is automatically installed in self-hosted environments by the Dapr CLI as part of the initialization process. You are all set! Skip ahead to the [next steps](#next-steps). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to create a Redis instance in our Kubernetes cluster. Before beginning, [install Helm v3](https://github.com/helm/helm#install). Install Redis into your cluster: @@ -62,9 +62,9 @@ For Kubernetes: - The hostname is `redis-master.default.svc.cluster.local:6379` - The secret, `redis`, is created automatically. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Verify you have an Azure subscription. 1. Open and log into the [Azure portal](https://ms.portal.azure.com/#create/Microsoft.Cache) to start the Azure Redis Cache creation flow. @@ -81,9 +81,9 @@ Verify you have an Azure subscription. kubectl create secret generic redis --from-literal=redis-password=********* ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. Deploy a Redis instance from [AWS Redis](https://aws.amazon.com/redis/). 1. Note the Redis hostname in the AWS portal for later. @@ -93,9 +93,9 @@ Verify you have an Azure subscription. kubectl create secret generic redis --from-literal=redis-password=********* ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. Deploy a MemoryStore instance from [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/). 1. Note the Redis hostname in the GCP portal for later. @@ -105,9 +105,9 @@ Verify you have an Azure subscription. kubectl create secret generic redis --from-literal=redis-password=********* ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Step 2: Configure Dapr components @@ -115,31 +115,31 @@ Dapr defines resources to use for building block functionality with components. #### Locate your component files -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} In self-hosted mode, component files are automatically created under: - **Windows**: `%USERPROFILE%\.dapr\components\` - **Linux/MacOS**: `$HOME/.dapr/components` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Since Kubernetes files are applied with `kubectl`, they can be created in any directory. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Create State store component Create a file named `redis-state.yaml`, and paste the following: -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} ```yaml apiVersion: dapr.io/v1alpha1 @@ -162,9 +162,9 @@ spec: # value: true ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```yaml apiVersion: dapr.io/v1alpha1 @@ -189,21 +189,21 @@ spec: Note the above code example uses the Kubernetes secret you created earlier when setting up a cluster. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Other stores" color="primary" %}} -If using a state store other than Redis, refer to the [supported state stores]({{< ref supported-state-stores >}}) for information on options to set. +If using a state store other than Redis, refer to the [supported state stores]({{% ref supported-state-stores %}}) for information on options to set. {{% /alert %}} #### Create Pub/sub message broker component Create a file called `redis-pubsub.yaml`, and paste the following: -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} ```yaml apiVersion: dapr.io/v1alpha1 @@ -226,9 +226,9 @@ spec: # value: true ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```yaml apiVersion: dapr.io/v1alpha1 @@ -253,12 +253,12 @@ spec: Note the above code example uses the Kubernetes secret you created earlier when setting up a cluster. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Other stores" color="primary" %}} -If using a pub/sub message broker other than Redis, refer to the [supported pub/sub message brokers]({{< ref supported-pubsub >}}) for information on options to set. +If using a pub/sub message broker other than Redis, refer to the [supported pub/sub message brokers]({{% ref supported-pubsub %}}) for information on options to set. {{% /alert %}} #### Hard coded passwords (not recommended) @@ -305,9 +305,9 @@ spec: ### Step 3: Apply the configuration -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} When you run `dapr init`, Dapr creates a default redis `pubsub.yaml` on your local machine. Verify by opening your components directory: @@ -319,11 +319,11 @@ For new component files: 1. Create a new `components` directory in your app folder containing the YAML files. 1. Provide the path to the `dapr run` command with the flag `--resources-path` -If you initialized Dapr in [slim mode]({{< ref self-hosted-no-docker.md >}}) (without Docker), you need to manually create the default directory, or always specify a components directory using `--resources-path`. +If you initialized Dapr in [slim mode]({{% ref self-hosted-no-docker.md %}}) (without Docker), you need to manually create the default directory, or always specify a components directory using `--resources-path`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Run `kubectl apply -f ` for both state and pubsub files: @@ -332,9 +332,9 @@ kubectl apply -f redis-state.yaml kubectl apply -f redis-pubsub.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -[Try out a Dapr quickstart]({{< ref quickstarts.md >}}) +[Try out a Dapr quickstart]({{% ref quickstarts.md %}}) diff --git a/daprdocs/content/en/getting-started/tutorials/get-started-component.md b/daprdocs/content/en/getting-started/tutorials/get-started-component.md index 7c829e5d779..66b66a8ac21 100644 --- a/daprdocs/content/en/getting-started/tutorials/get-started-component.md +++ b/daprdocs/content/en/getting-started/tutorials/get-started-component.md @@ -8,7 +8,7 @@ description: "Create a component definition file to interact with the secrets bu When building an app, you'd most likely create your own component file definitions, depending on the building block and specific component that you'd like to use. -In this tutorial, you will create a component definition file to interact with the [secrets building block API]({{< ref secrets >}}): +In this tutorial, you will create a component definition file to interact with the [secrets building block API]({{% ref secrets %}}): - Create a local JSON secret store. - Register the secret store with Dapr using a component definition file. @@ -28,7 +28,7 @@ In this tutorial, you will create a component definition file to interact with t cd my-components ``` -1. Dapr supports [many types of secret stores]({{< ref supported-secret-stores >}}), but for this tutorial, create a local JSON file named `mysecrets.json` with the following secret: +1. Dapr supports [many types of secret stores]({{% ref supported-secret-stores %}}), but for this tutorial, create a local JSON file named `mysecrets.json` with the following secret: ```json { @@ -86,23 +86,23 @@ If an error message occurs, stating the `app-id` is already in use, you may need In a separate terminal, run: -{{< tabs "HTTP API (Bash)" "HTTP API (PowerShell)">}} -{{% codetab %}} +{{% tabpane "HTTP API (Bash)" "HTTP API (PowerShell)"%}} +{{% tab %}} ```bash curl http://localhost:3500/v1.0/secrets/my-secret-store/my-secret ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell Invoke-RestMethod -Uri 'http://localhost:3500/v1.0/secrets/my-secret-store/my-secret' ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} **Output:** @@ -110,4 +110,4 @@ Invoke-RestMethod -Uri 'http://localhost:3500/v1.0/secrets/my-secret-store/my-se {"my-secret":"I'm Batman"} ``` -{{< button text="Next step: Set up a Pub/sub broker >>" page="pubsub-quickstart" >}} +{{< button text="Next step: Set up a Pub/sub broker >>" page="pubsub-quickstart.md" >}} diff --git a/daprdocs/content/en/operations/components/certification-lifecycle.md b/daprdocs/content/en/operations/components/certification-lifecycle.md index 3cff8bd34e1..791eef53748 100644 --- a/daprdocs/content/en/operations/components/certification-lifecycle.md +++ b/daprdocs/content/en/operations/components/certification-lifecycle.md @@ -7,7 +7,7 @@ description: "The component certification lifecycle from submission to productio --- {{% alert title="Note" color="primary" %}} -Certification lifecycle only applies to built-in components and does not apply to [pluggable components]({{}}). +Certification lifecycle only applies to built-in components and does not apply to [pluggable components]({{%ref "components-concept.md#Built-in-and-pluggable-components" %}}). {{% /alert %}} ## Overview diff --git a/daprdocs/content/en/operations/components/component-scopes.md b/daprdocs/content/en/operations/components/component-scopes.md index 81f1b813c9c..848dc3bc746 100644 --- a/daprdocs/content/en/operations/components/component-scopes.md +++ b/daprdocs/content/en/operations/components/component-scopes.md @@ -13,9 +13,9 @@ When Dapr runs, it matches it's own configured namespace with the namespace of t ## Namespaces Namespaces can be used to limit component access to particular Dapr instances. -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} In self hosted mode, a developer can specify the namespace to a Dapr instance by setting the `NAMESPACE` environment variable. If the `NAMESPACE` environment variable is set, Dapr does not load any component that does not specify the same namespace in its metadata. @@ -48,9 +48,9 @@ Windows: setx NAMESPACE "production" # run Dapr as usual ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Let's consider the following component in Kubernetes: ```yaml @@ -68,14 +68,14 @@ spec: ``` In this example, the Redis component is only accessible to Dapr instances running inside the `production` namespace. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} The component YAML applied to namespace "A" can *reference* the implementation in namespace "B". For example, a component YAML for Redis in namespace "production-A" can point the Redis host address to the Redis instance deployed in namespace "production-B". -See [Configure Pub/Sub components with multiple namespaces]({{< ref "pubsub-namespaces.md" >}}) for an example. +See [Configure Pub/Sub components with multiple namespaces]({{% ref "pubsub-namespaces.md" %}}) for an example. {{% /alert %}} ## Application access to components with scopes @@ -107,13 +107,13 @@ scopes: ## Using namespaces with service invocation -Read [Service invocation across namespaces]({{< ref "service-invocation-namespaces.md" >}}) for more information on using namespaces when calling between services. +Read [Service invocation across namespaces]({{% ref "service-invocation-namespaces.md" %}}) for more information on using namespaces when calling between services. ## Using namespaces with pub/sub -Read [Configure Pub/Sub components with multiple namespaces]({{< ref "pubsub-namespaces.md" >}}) for more information on using namespaces with pub/sub. +Read [Configure Pub/Sub components with multiple namespaces]({{% ref "pubsub-namespaces.md" %}}) for more information on using namespaces with pub/sub. ## Related links -- [Configure Pub/Sub components with multiple namespaces]({{< ref "pubsub-namespaces.md" >}}) -- [Use secret scoping]({{< ref "secrets-scopes.md" >}}) -- [Limit the secrets that can be read from secret stores]({{< ref "secret-scope.md" >}}) +- [Configure Pub/Sub components with multiple namespaces]({{% ref "pubsub-namespaces.md" %}}) +- [Use secret scoping]({{% ref "secrets-scopes.md" %}}) +- [Limit the secrets that can be read from secret stores]({{% ref "secret-scope.md" %}}) diff --git a/daprdocs/content/en/operations/components/component-secrets.md b/daprdocs/content/en/operations/components/component-secrets.md index d894865251b..91d7d8f7ebf 100644 --- a/daprdocs/content/en/operations/components/component-secrets.md +++ b/daprdocs/content/en/operations/components/component-secrets.md @@ -16,7 +16,7 @@ When running in Kubernetes, if the `auth.secretStore` is empty, the Kubernetes s ### Supported secret stores -Go to [this]({{< ref "howto-secrets.md" >}}) link to see all the secret stores supported by Dapr, along with information on how to configure and use them. +Go to [this]({{% ref "howto-secrets.md" %}}) link to see all the secret stores supported by Dapr, along with information on how to configure and use them. ## Referencing secrets @@ -60,7 +60,7 @@ auth: secretStore: ``` -`SECRET_STORE_NAME` is the name of the configured [secret store component]({{< ref supported-secret-stores >}}). When running in Kubernetes and using a Kubernetes secret store, the field `auth.SecretStore` defaults to `kubernetes` and can be left empty. +`SECRET_STORE_NAME` is the name of the configured [secret store component]({{% ref supported-secret-stores %}}). When running in Kubernetes and using a Kubernetes secret store, the field `auth.SecretStore` defaults to `kubernetes` and can be left empty. The above component definition tells Dapr to extract a secret named `redis-secret` from the defined `secretStore` and assign the value associated with the `redis-password` key embedded in the secret to the `redisPassword` field in the component. One use of this case is when your code is constructing a connection string, for example putting together a URL, a secret, plus other information as necessary, into a string. @@ -120,7 +120,7 @@ The following example shows you how to create a Kubernetes secret to hold the co ## Scoping access to secrets -Dapr can restrict access to secrets in a secret store using its configuration. Read [How To: Use secret scoping]({{< ref "secrets-scopes.md" >}}) and [How-To: Limit the secrets that can be read from secret stores]({{< ref "secret-scope.md" >}}) for more information. This is the recommended way to limit access to secrets using Dapr. +Dapr can restrict access to secrets in a secret store using its configuration. Read [How To: Use secret scoping]({{% ref "secrets-scopes.md" %}}) and [How-To: Limit the secrets that can be read from secret stores]({{% ref "secret-scope.md" %}}) for more information. This is the recommended way to limit access to secrets using Dapr. ## Kubernetes permissions @@ -167,5 +167,5 @@ In production scenario to limit Dapr's access to certain secret resources alone, ## Related links -- [Use secret scoping]({{< ref "secrets-scopes.md" >}}) -- [Limit the secrets that can be read from secret stores]({{< ref "secret-scope.md" >}}) +- [Use secret scoping]({{% ref "secrets-scopes.md" %}}) +- [Limit the secrets that can be read from secret stores]({{% ref "secret-scope.md" %}}) diff --git a/daprdocs/content/en/operations/components/component-updates.md b/daprdocs/content/en/operations/components/component-updates.md index 0c1f870c14a..e2272b4b064 100644 --- a/daprdocs/content/en/operations/components/component-updates.md +++ b/daprdocs/content/en/operations/components/component-updates.md @@ -23,8 +23,8 @@ Unless the [`HotReload` feature gate is enabled](#hot-reloading-preview-feature) ## Hot Reloading (Preview Feature) -> This feature is currently in [preview]({{< ref "preview-features.md" >}}). -> Hot reloading is enabled by via the [`HotReload` feature gate]({{< ref "support-preview-features.md" >}}). +> This feature is currently in [preview]({{% ref "preview-features.md" %}}). +> Hot reloading is enabled by via the [`HotReload` feature gate]({{% ref "support-preview-features.md" %}}). Dapr can be made to "hot reload" components whereby component updates are picked up automatically without the need to restart the Dapr sidecar process or Kubernetes pod. This means creating, updating, or deleting a component manifest will be reflected in the Dapr sidecar during runtime. @@ -35,7 +35,7 @@ This causes the component to be unavailable for a short period of time during th {{% /alert %}} {{% alert title="Initialization Errors" color="warning" %}} -If the initialization processes errors when a component is created or updated through hot reloading, the Dapr sidecar respects the component field [`spec.ignoreErrors`]({{< ref component-schema.md>}}). +If the initialization processes errors when a component is created or updated through hot reloading, the Dapr sidecar respects the component field [`spec.ignoreErrors`]({{% ref component-schema.md%}}). That is, the behaviour is the same as when the sidecar loads components on boot. - `spec.ignoreErrors=false` (*default*): the sidecar gracefully shuts down. - `spec.ignoreErrors=true`: the sidecar continues to run with neither the old or new component configuration registered. @@ -43,14 +43,14 @@ That is, the behaviour is the same as when the sidecar loads components on boot. All components are supported for hot reloading except for the following types. Any create, update, or deletion of these component types is ignored by the sidecar with a restart required to pick up changes. -- [Actor State Stores]({{< ref "state_api.md#configuring-state-store-for-actors" >}}) -- [Workflow Backends]({{< ref "workflow-architecture.md#workflow-backend" >}}) +- [Actor State Stores]({{% ref "state_api.md#configuring-state-store-for-actors" %}}) +- [Workflow Backends]({{% ref "workflow-architecture.md#workflow-backend" %}}) ## Further reading -- [Components concept]({{< ref components-concept.md >}}) -- [Reference secrets in component definitions]({{< ref component-secrets.md >}}) -- [Supported state stores]({{< ref supported-state-stores >}}) -- [Supported pub/sub brokers]({{< ref supported-pubsub >}}) -- [Supported secret stores]({{< ref supported-secret-stores >}}) -- [Supported bindings]({{< ref supported-bindings >}}) -- [Set component scopes]({{< ref component-scopes.md >}}) +- [Components concept]({{% ref components-concept.md %}}) +- [Reference secrets in component definitions]({{% ref component-secrets.md %}}) +- [Supported state stores]({{% ref supported-state-stores %}}) +- [Supported pub/sub brokers]({{% ref supported-pubsub %}}) +- [Supported secret stores]({{% ref supported-secret-stores %}}) +- [Supported bindings]({{% ref supported-bindings %}}) +- [Set component scopes]({{% ref component-scopes.md %}}) diff --git a/daprdocs/content/en/operations/components/middleware.md b/daprdocs/content/en/operations/components/middleware.md index ca85f08a848..c9e7a11f96b 100644 --- a/daprdocs/content/en/operations/components/middleware.md +++ b/daprdocs/content/en/operations/components/middleware.md @@ -13,7 +13,7 @@ Dapr allows custom processing pipelines to be defined by chaining a series of mi ## Configure API middleware pipelines -When launched, a Dapr sidecar constructs a middleware processing pipeline for incoming HTTP calls. By default, the pipeline consists of the [tracing]({{< ref tracing-overview.md >}}) and CORS middlewares. Additional middlewares, configured by a Dapr [Configuration]({{< ref configuration-concept.md >}}), can be added to the pipeline in the order they are defined. The pipeline applies to all Dapr API endpoints, including state, pub/sub, service invocation, bindings, secrets, configuration, distributed lock, etc. +When launched, a Dapr sidecar constructs a middleware processing pipeline for incoming HTTP calls. By default, the pipeline consists of the [tracing]({{% ref tracing-overview.md %}}) and CORS middlewares. Additional middlewares, configured by a Dapr [Configuration]({{% ref configuration-concept.md %}}), can be added to the pipeline in the order they are defined. The pipeline applies to all Dapr API endpoints, including state, pub/sub, service invocation, bindings, secrets, configuration, distributed lock, etc. A request goes through all the defined middleware components before it's routed to user code, and then goes through the defined middleware, in reverse order, before it's returned to the client, as shown in the following diagram. @@ -21,7 +21,7 @@ A request goes through all the defined middleware components before it's routed HTTP middleware components are executed when invoking Dapr HTTP APIs using the `httpPipeline` configuration. -The following configuration example defines a custom pipeline that uses an [OAuth 2.0 middleware]({{< ref middleware-oauth2.md >}}) and an [uppercase middleware component]({{< ref middleware-uppercase.md >}}). In this case, all requests are authorized through the OAuth 2.0 protocol, and transformed to uppercase text, before they are forwarded to user code. +The following configuration example defines a custom pipeline that uses an [OAuth 2.0 middleware]({{% ref middleware-oauth2.md %}}) and an [uppercase middleware component]({{% ref middleware-uppercase.md %}}). In this case, all requests are authorized through the OAuth 2.0 protocol, and transformed to uppercase text, before they are forwarded to user code. ```yaml apiVersion: dapr.io/v1alpha1 @@ -38,9 +38,9 @@ spec: type: middleware.http.uppercase ``` -As with other components, middleware components can be found in the [supported Middleware reference]({{< ref supported-middleware >}}) and in the [`dapr/components-contrib` repo](https://github.com/dapr/components-contrib/tree/master/middleware/http). +As with other components, middleware components can be found in the [supported Middleware reference]({{% ref supported-middleware %}}) and in the [`dapr/components-contrib` repo](https://github.com/dapr/components-contrib/tree/master/middleware/http). -{{< button page="supported-middleware" text="See all middleware components">}} +{{< button page="supported-middleware.md" text="See all middleware components" >}} ## Configure app middleware pipelines @@ -67,7 +67,7 @@ spec: ## Related links -- [Learn how to author middleware components]({{< ref develop-middleware.md >}}) -- [Component schema]({{< ref component-schema.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Learn how to author middleware components]({{% ref develop-middleware.md %}}) +- [Component schema]({{% ref component-schema.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) - [API middleware sample](https://github.com/dapr/samples/tree/master/middleware-oauth-google) diff --git a/daprdocs/content/en/operations/components/pluggable-components-registration.md b/daprdocs/content/en/operations/components/pluggable-components-registration.md index 7aecca49458..e53122d7639 100644 --- a/daprdocs/content/en/operations/components/pluggable-components-registration.md +++ b/daprdocs/content/en/operations/components/pluggable-components-registration.md @@ -10,7 +10,7 @@ description: "Learn how to register a pluggable component" ## Component registration process -[Pluggable, gRPC-based components]({{< ref pluggable-components-overview >}}) are typically run as containers or processes that need to communicate with the Dapr runtime via [Unix Domain Sockets][uds] (or UDS for short). They are automatically discovered and registered in the runtime with the following steps: +[Pluggable, gRPC-based components]({{% ref pluggable-components-overview %}}) are typically run as containers or processes that need to communicate with the Dapr runtime via [Unix Domain Sockets][uds] (or UDS for short). They are automatically discovered and registered in the runtime with the following steps: 1. The component listens to an [Unix Domain Socket][uds] placed on the shared volume. 2. The Dapr runtime lists all [Unix Domain Socket][uds] in the shared volume. @@ -35,9 +35,9 @@ As a prerequisite the operating system must supports Unix Domain Sockets, any UN Select your environment to begin making your component discoverable. -{{< tabs "Standalone" "Kubernetes" >}} +{{% tabpane "Standalone" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} [uds]: https://en.wikipedia.org/wiki/Unix_domain_socket ## Run the component @@ -59,11 +59,11 @@ Typically, a pluggable component implements a single component API for packaging ## Define the component -Define your component using a [component spec]({{< ref component-schema.md >}}). Your component's `spec.type` value is made by concatenating the following 2 parts with a `.`: +Define your component using a [component spec]({{% ref component-schema.md %}}). Your component's `spec.type` value is made by concatenating the following 2 parts with a `.`: 1. The component's API (`state`, `pubsub`, `bindings` etc) 2. The component's **name**, which is derived from the [Unix Domain Socket][uds] filename, without the file extension. -You will need to define one [component spec]({{< ref component-schema.md >}}) for each API exposed by your pluggable component's [Unix Domain Socket][uds]. The Unix Domain Socket `my-component.sock` from the previous example exposes a pluggable component named `my-component` with both a `state` and a `pubsub` API. Two components specs, each in their own YAML file, placed in the `resources-path`, will be required: one for `state.my-component` and another for `pubsub.my-component`. +You will need to define one [component spec]({{% ref component-schema.md %}}) for each API exposed by your pluggable component's [Unix Domain Socket][uds]. The Unix Domain Socket `my-component.sock` from the previous example exposes a pluggable component named `my-component` with both a `state` and a `pubsub` API. Two components specs, each in their own YAML file, placed in the `resources-path`, will be required: one for `state.my-component` and another for `pubsub.my-component`. For instance, the component spec for `state.my-component` could be: @@ -86,7 +86,7 @@ Save this file as `component.yaml` in Dapr's component configuration folder. Jus ## Run Dapr -[Initialize Dapr]({{< ref get-started-api.md >}}), and make sure that your component file is placed in the right folder. +[Initialize Dapr]({{% ref get-started-api.md %}}), and make sure that your component file is placed in the right folder. {{% alert title="Note" color="primary" %}} Dapr 1.9.0 is the minimum version that supports pluggable components. As of version 1.11.0, automatic injection of the containers is supported for pluggable components. @@ -106,9 +106,9 @@ Retrieve the value, replacing `$PORT` with the Dapr HTTP port: curl http://localhost:$PORT/v1.0/state/prod-mystore/name ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [uds]: https://en.wikipedia.org/wiki/Unix_domain_socket @@ -118,7 +118,7 @@ Make sure your component is running as a container, published first and accessib ## Deploy Dapr on a Kubernetes cluster -Follow the steps provided in the [Deploy Dapr on a Kubernetes cluster]({{< ref kubernetes-deploy.md >}}) docs. +Follow the steps provided in the [Deploy Dapr on a Kubernetes cluster]({{% ref kubernetes-deploy.md %}}) docs. ## Add the pluggable component container in your deployments @@ -198,7 +198,7 @@ Before applying the deployment, let's add one more configuration: the component ## Define a component -Pluggable components are defined using a [component spec]({{< ref component-schema.md >}}). The component `type` is derived from the socket name (without the file extension). In the following example YAML, replace: +Pluggable components are defined using a [component spec]({{% ref component-schema.md %}}). The component `type` is derived from the socket name (without the file extension). In the following example YAML, replace: - `your_socket_goes_here` with your component socket name (no extension) - `your_component_type` with your component type @@ -224,7 +224,7 @@ scopes: ``` The `dapr.io/component-container` annotation is mandatory on Kubernetes when you want Dapr's sidecar injector to handle the container and volume injection for the pluggable component. At minimum, you'll need the `name` and `image` attributes for the Dapr's sidecar injector to successfully add the container to the Application's pod. Volume for Unix Domain Socket is automatically created and mounted by Dapr's sidecar injector. -[Scope]({{< ref component-scopes >}}) your component to make sure that only the target application can connect with the pluggable component, since it will only be running in its deployment. Otherwise the runtime fails when initializing the component. +[Scope]({{% ref component-scopes %}}) your component to make sure that only the target application can connect with the pluggable component, since it will only be running in its deployment. Otherwise the runtime fails when initializing the component. That's it! **[Apply the created manifests to your Kubernetes cluster](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-apply)**, and call the state store APIs via Dapr API. @@ -242,8 +242,8 @@ Retrieve the value, replacing `$PORT` with the Dapr HTTP port: curl http://localhost:$PORT/v1.0/state/prod-mystore/name ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} ## Next Steps diff --git a/daprdocs/content/en/operations/components/setup-bindings.md b/daprdocs/content/en/operations/components/setup-bindings.md index 44d762dd605..ed88dd98e71 100644 --- a/daprdocs/content/en/operations/components/setup-bindings.md +++ b/daprdocs/content/en/operations/components/setup-bindings.md @@ -31,7 +31,7 @@ spec: The type of binding is determined by the `type` field, and things like connection strings and other metadata are put in the `.metadata` section. -Different [supported bindings]({{< ref supported-bindings >}}) will have different specific fields that would need to be configured. For example, when configuring a binding for [Azure Blob Storage]({{< ref blobstorage>}}), the file would look like this: +Different [supported bindings]({{% ref supported-bindings %}}) will have different specific fields that would need to be configured. For example, when configuring a binding for [Azure Blob Storage]({{% ref blobstorage%}}), the file would look like this: ```yaml apiVersion: dapr.io/v1alpha1 @@ -59,26 +59,26 @@ spec: Once you have created the component's YAML file, follow these instructions to apply it based on your hosting environment: -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} To run locally, create a `components` dir containing the YAML file and provide the path to the `dapr run` command with the flag `--resources-path`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To deploy in Kubernetes, assuming your component file is named `mybinding.yaml`, run: ```bash kubectl apply -f mybinding.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Supported bindings -Visit the [bindings reference]({{< ref supported-bindings >}}) for a full list of supported resources. +Visit the [bindings reference]({{% ref supported-bindings %}}) for a full list of supported resources. ## Related links -- [Bindings building block]({{< ref bindings >}}) -- [Supported bindings]({{}}) \ No newline at end of file +- [Bindings building block]({{% ref bindings %}}) +- [Supported bindings]({{%ref supported-bindings %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/components/setup-pubsub/_index.md b/daprdocs/content/en/operations/components/setup-pubsub/_index.md index 0c0e4fe6c09..770a34a787e 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/_index.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/_index.md @@ -10,9 +10,9 @@ aliases: Dapr integrates with pub/sub message buses to provide applications with the ability to create event-driven, loosely coupled architectures where producers send events to consumers via topics. -Dapr supports the configuration of multiple, named, pub/sub components *per application*. Each pub/sub component has a name and this name is used when publishing a message topic. Read the [API reference]({{< ref pubsub_api.md >}}) for details on how to publish and subscribe to topics. +Dapr supports the configuration of multiple, named, pub/sub components *per application*. Each pub/sub component has a name and this name is used when publishing a message topic. Read the [API reference]({{% ref pubsub_api.md %}}) for details on how to publish and subscribe to topics. -Pub/sub components are extensible. A list of support pub/sub components is [here]({{< ref supported-pubsub >}}) and the implementations can be found in the [components-contrib repo](https://github.com/dapr/components-contrib). +Pub/sub components are extensible. A list of support pub/sub components is [here]({{% ref supported-pubsub %}}) and the implementations can be found in the [components-contrib repo](https://github.com/dapr/components-contrib). ## Component files @@ -36,24 +36,24 @@ spec: ``` The type of pub/sub is determined by the `type` field, and properties such as connection strings and other metadata are put in the `.metadata` section. -Even though metadata values can contain secrets in plain text, it is recommended you use a [secret store]({{< ref component-secrets.md >}}) using a `secretKeyRef`. +Even though metadata values can contain secrets in plain text, it is recommended you use a [secret store]({{% ref component-secrets.md %}}) using a `secretKeyRef`. {{% alert title="Topic creation" color="primary" %}} Depending on the pub/sub message bus you are using and how it is configured, topics may be created automatically. Even if the message bus supports automatic topic creation, it is a common governance practice to disable it in production environments. You may still need to use a CLI, admin console, or request form to manually create the topics required by your application. {{% /alert %}} -While all pub/sub components support `consumerID` metadata, the runtime creates a consumer ID if you do not supply one. All component metadata field values can carry [templated metadata values]({{< ref "component-schema.md#templated-metadata-values" >}}), which are resolved on Dapr sidecar startup. -For example, you can choose to use `{namespace}` as the `consumerGroup` to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{< ref "howto-namespace.md#with-namespace-consumer-groups">}}). +While all pub/sub components support `consumerID` metadata, the runtime creates a consumer ID if you do not supply one. All component metadata field values can carry [templated metadata values]({{% ref "component-schema.md#templated-metadata-values" %}}), which are resolved on Dapr sidecar startup. +For example, you can choose to use `{namespace}` as the `consumerGroup` to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{% ref "howto-namespace.md#with-namespace-consumer-groups"%}}). -Visit [this guide]({{< ref "howto-publish-subscribe.md#step-3-publish-a-topic" >}}) for instructions on configuring and using pub/sub components. +Visit [this guide]({{% ref "howto-publish-subscribe.md#step-3-publish-a-topic" %}}) for instructions on configuring and using pub/sub components. ## Related links -- Overview of the Dapr [Pub/Sub building block]({{< ref pubsub-overview.md >}}) +- Overview of the Dapr [Pub/Sub building block]({{% ref pubsub-overview.md %}}) - Try the [Pub/Sub quickstart sample](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub) -- Read the [guide on publishing and subscribing]({{< ref howto-publish-subscribe.md >}}) -- Learn about [topic scoping]({{< ref pubsub-scopes.md >}}) -- Learn about [message time-to-live]({{< ref pubsub-message-ttl.md >}}) -- Learn [how to configure Pub/Sub components with multiple namespaces]({{< ref pubsub-namespaces.md >}}) -- List of [pub/sub components]({{< ref supported-pubsub >}}) -- Read the [API reference]({{< ref pubsub_api.md >}}) +- Read the [guide on publishing and subscribing]({{% ref howto-publish-subscribe.md %}}) +- Learn about [topic scoping]({{% ref pubsub-scopes.md %}}) +- Learn about [message time-to-live]({{% ref pubsub-message-ttl.md %}}) +- Learn [how to configure Pub/Sub components with multiple namespaces]({{% ref pubsub-namespaces.md %}}) +- List of [pub/sub components]({{% ref supported-pubsub %}}) +- Read the [API reference]({{% ref pubsub_api.md %}}) 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 eff5f17cb1b..3648f34c031 100644 --- a/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md +++ b/daprdocs/content/en/operations/components/setup-pubsub/pubsub-namespaces.md @@ -9,7 +9,7 @@ description: "Use Dapr Pub/Sub with multiple namespaces" In some scenarios, applications can be spread across namespaces and share a queue or topic via PubSub. In this case, the PubSub component must be provisioned on each namespace. {{% alert title="Note" color="primary" %}} -Namespaces are a Dapr concept used for scoping applications and components. This example uses Kubernetes namespaces, however the Dapr component namespace scoping can be used on any supported platform. Read [How-To: Scope components to one or more applications]({{< ref "component-scopes.md" >}}) for more information on scoping components. +Namespaces are a Dapr concept used for scoping applications and components. This example uses Kubernetes namespaces, however the Dapr component namespace scoping can be used on any supported platform. Read [How-To: Scope components to one or more applications]({{% ref "component-scopes.md" %}}) for more information on scoping components. {{% /alert %}} This example uses the [PubSub sample](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub). The Redis installation and the subscribers are in `namespace-a` while the publisher UI is in `namespace-b`. This solution will also work if Redis is installed on another namespace or if you use a managed cloud service like Azure ServiceBus, AWS SNS/SQS or GCP PubSub. @@ -31,12 +31,12 @@ The table below shows which resources are deployed to which namespaces: | React UI publisher | ❌ | ✅ | {{% alert title="Note" color="primary" %}} -All pub/sub components support limiting pub/sub topics to specific applications using [namespace or component scopes]({{< ref pubsub-scopes.md >}}). +All pub/sub components support limiting pub/sub topics to specific applications using [namespace or component scopes]({{% ref pubsub-scopes.md %}}). {{% /alert %}} ## Pre-requisites -* [Dapr installed on Kubernetes]({{< ref "kubernetes-deploy.md" >}}) in any namespace since Dapr works at the cluster level. +* [Dapr installed on Kubernetes]({{% ref "kubernetes-deploy.md" %}}) in any namespace since Dapr works at the cluster level. * Checkout and cd into the directory for [PubSub quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub). ## Setup `namespace-a` @@ -47,7 +47,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]({{< ref "getting-started/tutorials/configure-state-pubsub.md" >}}). +Install Redis (master and slave) on `namespace-a`, following [these instructions]({{% ref "getting-started/tutorials/configure-state-pubsub.md" %}}). Now, configure `deploy/redis.yaml`, paying attention to the hostname containing `namespace-a`. @@ -127,6 +127,6 @@ kubectl delete namespace namespace-b ## Related links -- [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" >}}) +- [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" %}}) diff --git a/daprdocs/content/en/operations/components/setup-secret-store.md b/daprdocs/content/en/operations/components/setup-secret-store.md index 001595325d5..6da8b839dbc 100644 --- a/daprdocs/content/en/operations/components/setup-secret-store.md +++ b/daprdocs/content/en/operations/components/setup-secret-store.md @@ -32,7 +32,7 @@ spec: The type of secret store is determined by the `type` field, and things like connection strings and other metadata are put in the `.metadata` section. -Different [supported secret stores]({{< ref supported-secret-stores >}}) will have different specific fields that would need to be configured. For example, when configuring a secret store which uses AWS Secrets Manager the file would look like this: +Different [supported secret stores]({{% ref supported-secret-stores %}}) will have different specific fields that would need to be configured. For example, when configuring a secret store which uses AWS Secrets Manager the file would look like this: ```yaml apiVersion: dapr.io/v1alpha1 @@ -62,28 +62,28 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet Once you have created the component's YAML file, follow these instructions to apply it based on your hosting environment: -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} To run locally, create a `components` dir containing the YAML file and provide the path to the `dapr run` command with the flag `--resources-path`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To deploy in Kubernetes, assuming your component file is named `secret-store.yaml`, run: ```bash kubectl apply -f secret-store.yaml ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Supported secret stores -Visit the [secret stores reference]({{< ref supported-secret-stores >}}) for a full list of supported secret stores. +Visit the [secret stores reference]({{% ref supported-secret-stores %}}) for a full list of supported secret stores. ## Related links -- [Supported secret store components]({{< ref supported-secret-stores >}}) -- [Secrets building block]({{< ref secrets >}}) +- [Supported secret store components]({{% ref supported-secret-stores %}}) +- [Secrets building block]({{% ref secrets %}}) diff --git a/daprdocs/content/en/operations/components/setup-state-store.md b/daprdocs/content/en/operations/components/setup-state-store.md index 6c1fc74f6e1..3c4b1f07fa7 100644 --- a/daprdocs/content/en/operations/components/setup-state-store.md +++ b/daprdocs/content/en/operations/components/setup-state-store.md @@ -31,16 +31,16 @@ spec: ``` The type of database is determined by the `type` field, and things like connection strings and other metadata are put in the `.metadata` section. -Even though metadata values can contain secrets in plain text, it is recommended you use a [secret store]({{< ref component-secrets.md >}}). +Even though metadata values can contain secrets in plain text, it is recommended you use a [secret store]({{% ref component-secrets.md %}}). -Visit [this guide]({{< ref "howto-get-save-state.md#step-1-setup-a-state-store" >}}) on how to configure a state store component. +Visit [this guide]({{% ref "howto-get-save-state.md#step-1-setup-a-state-store" %}}) on how to configure a state store component. ## Supported state stores -Visit [this reference]({{< ref supported-state-stores >}}) to see all of the supported state stores in Dapr. +Visit [this reference]({{% ref supported-state-stores %}}) to see all of the supported state stores in Dapr. ## Related topics -- [Component concept]({{< ref components-concept.md >}}) -- [State management overview]({{< ref state-management >}}) -- [State management API specification]({{< ref state_api.md >}}) -- [Supported state stores]({{< ref supported-state-stores >}}) +- [Component concept]({{% ref components-concept.md %}}) +- [State management overview]({{% ref state-management %}}) +- [State management API specification]({{% ref state_api.md %}}) +- [Supported state stores]({{% ref supported-state-stores %}}) diff --git a/daprdocs/content/en/operations/configuration/api-allowlist.md b/daprdocs/content/en/operations/configuration/api-allowlist.md index eee4ad3b210..d965b4c744a 100644 --- a/daprdocs/content/en/operations/configuration/api-allowlist.md +++ b/daprdocs/content/en/operations/configuration/api-allowlist.md @@ -8,7 +8,7 @@ description: "Choose which Dapr sidecar APIs are available to the app" In scenarios such as zero trust networks or when exposing the Dapr sidecar to external traffic through a frontend, it's recommended to only enable the Dapr sidecar APIs being used by the app. Doing so reduces the attack surface and helps keep the Dapr APIs scoped to the actual needs of the application. -Dapr allows you to control which APIs are accessible to the application by setting an API allowlist or denylist using a [Dapr Configuration]({{< ref "configuration-schema.md" >}}). +Dapr allows you to control which APIs are accessible to the application by setting an API allowlist or denylist using a [Dapr Configuration]({{% ref "configuration-schema.md" %}}). ### Default behavior @@ -116,22 +116,22 @@ See this list of values corresponding to the different Dapr APIs: | API group | HTTP API | [gRPC API](https://github.com/dapr/dapr/tree/master/pkg/api/grpc) | | ----- | ----- | ----- | -| [Service Invocation]({{< ref service_invocation_api.md >}}) | `invoke` (`v1.0`) | `invoke` (`v1`) | -| [State]({{< ref state_api.md>}})| `state` (`v1.0` and `v1.0-alpha1`) | `state` (`v1` and `v1alpha1`) | -| [Pub/Sub]({{< ref pubsub.md >}}) | `publish` (`v1.0` and `v1.0-alpha1`) | `publish` (`v1` and `v1alpha1`) | -| [Output Bindings]({{< ref bindings_api.md >}}) | `bindings` (`v1.0`) |`bindings` (`v1`) | +| [Service Invocation]({{% ref service_invocation_api.md %}}) | `invoke` (`v1.0`) | `invoke` (`v1`) | +| [State]({{% ref state_api.md%}})| `state` (`v1.0` and `v1.0-alpha1`) | `state` (`v1` and `v1alpha1`) | +| [Pub/Sub]({{% ref pubsub.md %}}) | `publish` (`v1.0` and `v1.0-alpha1`) | `publish` (`v1` and `v1alpha1`) | +| [Output Bindings]({{% ref bindings_api.md %}}) | `bindings` (`v1.0`) |`bindings` (`v1`) | | Subscribe | n/a | `subscribe` (`v1alpha1`) | -| [Secrets]({{< ref secrets_api.md >}})| `secrets` (`v1.0`) | `secrets` (`v1`) | -| [Actors]({{< ref actors_api.md >}}) | `actors` (`v1.0`) |`actors` (`v1`) | -| [Metadata]({{< ref metadata_api.md >}}) | `metadata` (`v1.0`) |`metadata` (`v1`) | -| [Configuration]({{< ref configuration_api.md >}}) | `configuration` (`v1.0` and `v1.0-alpha1`) | `configuration` (`v1` and `v1alpha1`) | -| [Distributed Lock]({{< ref distributed_lock_api.md >}}) | `lock` (`v1.0-alpha1`)
`unlock` (`v1.0-alpha1`) | `lock` (`v1alpha1`)
`unlock` (`v1alpha1`) | -| [Cryptography]({{< ref cryptography_api.md >}}) | `crypto` (`v1.0-alpha1`) | `crypto` (`v1alpha1`) | -| [Workflow]({{< ref workflow_api.md >}}) | `workflows` (`v1.0`) |`workflows` (`v1`) | -| [Conversation]({{< ref conversation_api.md >}}) | `conversation` (`v1.0-alpha1`) | `conversation` (`v1alpha1`) | -| [Health]({{< ref health_api.md >}}) | `healthz` (`v1.0`) | n/a | +| [Secrets]({{% ref secrets_api.md %}})| `secrets` (`v1.0`) | `secrets` (`v1`) | +| [Actors]({{% ref actors_api.md %}}) | `actors` (`v1.0`) |`actors` (`v1`) | +| [Metadata]({{% ref metadata_api.md %}}) | `metadata` (`v1.0`) |`metadata` (`v1`) | +| [Configuration]({{% ref configuration_api.md %}}) | `configuration` (`v1.0` and `v1.0-alpha1`) | `configuration` (`v1` and `v1alpha1`) | +| [Distributed Lock]({{% ref distributed_lock_api.md %}}) | `lock` (`v1.0-alpha1`)
`unlock` (`v1.0-alpha1`) | `lock` (`v1alpha1`)
`unlock` (`v1alpha1`) | +| [Cryptography]({{% ref cryptography_api.md %}}) | `crypto` (`v1.0-alpha1`) | `crypto` (`v1alpha1`) | +| [Workflow]({{% ref workflow_api.md %}}) | `workflows` (`v1.0`) |`workflows` (`v1`) | +| [Conversation]({{% ref conversation_api.md %}}) | `conversation` (`v1.0-alpha1`) | `conversation` (`v1alpha1`) | +| [Health]({{% ref health_api.md %}}) | `healthz` (`v1.0`) | n/a | | Shutdown | `shutdown` (`v1.0`) | `shutdown` (`v1`) | ## Next steps -{{< button text="Configure Dapr to use gRPC" page="grpc" >}} \ No newline at end of file +{{< button text="Configure Dapr to use gRPC" page="grpc.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/configuration-overview.md b/daprdocs/content/en/operations/configuration/configuration-overview.md index 5a528a22433..781c07c0149 100644 --- a/daprdocs/content/en/operations/configuration/configuration-overview.md +++ b/daprdocs/content/en/operations/configuration/configuration-overview.md @@ -8,7 +8,7 @@ description: "Overview of Dapr configuration" Dapr configurations are settings and policies that enable you to change both the behavior of individual Dapr applications, or the global behavior of the Dapr control plane system services. -[for more information, read the configuration concept.]({{< ref configuration-concept.md >}}) +[for more information, read the configuration concept.]({{% ref configuration-concept.md %}}) ## Application configuration @@ -16,21 +16,21 @@ Dapr configurations are settings and policies that enable you to change both the You can set up application configuration either in self-hosted or Kubernetes mode. -{{< tabs "Self-hosted" Kubernetes >}} +{{% tabpane "Self-hosted" Kubernetes %}} -{{% codetab %}} +{{% tab %}} -In self hosted mode, the Dapr configuration is a [configuration file]({{< ref configuration-schema.md >}}) - for example, `config.yaml`. By default, the Dapr sidecar looks in the default Dapr folder for the runtime configuration: +In self hosted mode, the Dapr configuration is a [configuration file]({{% ref configuration-schema.md %}}) - for example, `config.yaml`. By default, the Dapr sidecar looks in the default Dapr folder for the runtime configuration: - Linux/MacOs: `$HOME/.dapr/config.yaml` - Windows: `%USERPROFILE%\.dapr\config.yaml` An application can also apply a configuration by using a `--config` flag to the file path with `dapr run` CLI command. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In Kubernetes mode, the Dapr configuration is a Configuration resource, that is applied to the cluster. For example: @@ -54,11 +54,11 @@ A Dapr sidecar can apply a specific configuration by using a `dapr.io/config` an dapr.io/config: "myappconfig" ``` -> **Note:** [See all Kubernetes annotations]({{< ref "arguments-annotations-overview.md" >}}) available to configure the Dapr sidecar on activation by sidecar Injector system service. +> **Note:** [See all Kubernetes annotations]({{% ref "arguments-annotations-overview.md" %}}) available to configure the Dapr sidecar on activation by sidecar Injector system service. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Application configuration settings @@ -121,7 +121,7 @@ turns on tracing for the sidecar. | `OTEL_EXPORTER_OTLP_INSECURE` | Sets the connection to the endpoint as unencrypted (true/false) | | `OTEL_EXPORTER_OTLP_PROTOCOL` | Transport protocol (`grpc`, `http/protobuf`, `http/json`) | -See [Observability distributed tracing]({{< ref "tracing-overview.md" >}}) for more information. +See [Observability distributed tracing]({{% ref "tracing-overview.md" %}}) for more information. #### Metrics @@ -148,9 +148,9 @@ metrics: recordErrorCodes: true ``` -In the examples above, the path filter `/orders/{orderID}/items/{itemID}` would return _a single metric count_ matching all the `orderID`s and all the `itemID`s, rather than multiple metrics for each `itemID`. For more information, see [HTTP metrics path matching]({{< ref "metrics-overview.md#http-metrics-path-matching" >}}). +In the examples above, the path filter `/orders/{orderID}/items/{itemID}` would return _a single metric count_ matching all the `orderID`s and all the `itemID`s, rather than multiple metrics for each `itemID`. For more information, see [HTTP metrics path matching]({{% ref "metrics-overview.md#http-metrics-path-matching" %}}). -The above example also enables [recording error code metrics]({{< ref "metrics-overview.md#configuring-metrics-for-error-codes" >}}), which is disabled by default. +The above example also enables [recording error code metrics]({{% ref "metrics-overview.md#configuring-metrics-for-error-codes" %}}), which is disabled by default. The following table lists the properties for metrics: @@ -159,7 +159,7 @@ The following table lists the properties for metrics: | `enabled` | boolean | When set to true, the default, enables metrics collection and the metrics endpoint. | | `rules` | array | Named rule to filter metrics. Each rule contains a set of `labels` to filter on and a `regex` expression to apply to the metrics path. | | `latencyDistributionBuckets` | array | Array of latency distribution buckets in milliseconds for latency metrics histograms. | -| `http.increasedCardinality` | boolean | When set to `true` (default), in the Dapr HTTP server each request path causes the creation of a new "bucket" of metrics. This can cause issues, including excessive memory consumption, when there many different requested endpoints (such as when interacting with RESTful APIs).
To mitigate high memory usage and egress costs associated with [high cardinality metrics]({{< ref "metrics-overview.md#high-cardinality-metrics" >}}) with the HTTP server, you should set the `metrics.http.increasedCardinality` property to `false`. | +| `http.increasedCardinality` | boolean | When set to `true` (default), in the Dapr HTTP server each request path causes the creation of a new "bucket" of metrics. This can cause issues, including excessive memory consumption, when there many different requested endpoints (such as when interacting with RESTful APIs).
To mitigate high memory usage and egress costs associated with [high cardinality metrics]({{% ref "metrics-overview.md#high-cardinality-metrics" %}}) with the HTTP server, you should set the `metrics.http.increasedCardinality` property to `false`. | | `http.pathMatching` | array | Array of paths for path matching, allowing users to define matching paths to manage cardinality. | | `http.excludeVerbs` | boolean | When set to true (default is false), the Dapr HTTP server ignores each request HTTP verb when building the method metric label. | @@ -178,7 +178,7 @@ metrics: "orders/": "orders/.+" ``` -See [metrics documentation]({{< ref "metrics-overview.md" >}}) for more information. +See [metrics documentation]({{% ref "metrics-overview.md" %}}) for more information. #### Logging @@ -202,7 +202,7 @@ The following table lists the properties for logging: | `apiLogging.obfuscateURLs` | boolean | When enabled, obfuscates the values of URLs in HTTP API logs (if enabled), logging the abstract route name rather than the full path being invoked, which could contain Personal Identifiable Information (PII). Default: `false`. | `apiLogging.omitHealthChecks` | boolean | If `true`, calls to health check endpoints (e.g. `/v1.0/healthz`) are not logged when API logging is enabled. This is useful if those calls are adding a lot of noise in your logs. Default: `false` -See [logging documentation]({{< ref "logs.md" >}}) for more information. +See [logging documentation]({{% ref "logs.md" %}}) for more information. #### Middleware @@ -230,7 +230,7 @@ The following table lists the properties for HTTP handlers: | `name` | string | Name of the middleware component | `type` | string | Type of middleware component -See [Middleware pipelines]({{< ref "middleware.md" >}}) for more information. +See [Middleware pipelines]({{% ref "middleware.md" %}}) for more information. #### Name resolution component @@ -252,20 +252,20 @@ spec: ``` For more information, see: -- [The name resolution component documentation]({{< ref supported-name-resolution >}}) for more examples. -- [The Configuration file documentation]({{< ref configuration-schema.md >}}) to learn more about how to configure name resolution per component. +- [The name resolution component documentation]({{% ref supported-name-resolution %}}) for more examples. +- [The Configuration file documentation]({{% ref configuration-schema.md %}}) to learn more about how to configure name resolution per component. #### Scope secret store access -See the [Scoping secrets]({{< ref "secret-scope.md" >}}) guide for information and examples on how to scope secrets to an application. +See the [Scoping secrets]({{% ref "secret-scope.md" %}}) guide for information and examples on how to scope secrets to an application. #### Access Control allow lists for building block APIs -See the guide for [selectively enabling Dapr APIs on the Dapr sidecar]({{< ref "api-allowlist.md" >}}) for information and examples on how to set access control allow lists (ACLs) on the building block APIs lists. +See the guide for [selectively enabling Dapr APIs on the Dapr sidecar]({{% ref "api-allowlist.md" %}}) for information and examples on how to set access control allow lists (ACLs) on the building block APIs lists. #### Access Control allow lists for service invocation API -See the [Allow lists for service invocation]({{< ref "invoke-allowlist.md" >}}) guide for information and examples on how to set allow lists with ACLs which use the service invocation API. +See the [Allow lists for service invocation]({{% ref "invoke-allowlist.md" %}}) guide for information and examples on how to set allow lists with ACLs which use the service invocation API. #### Disallow usage of certain component types @@ -294,12 +294,12 @@ Optionally, you can specify a version to disallow by adding it at the end of the - Created by Dapr automatically - Used to store secrets specified in Components specs - If you want to disable the built-in Kubernetes secret store, you need to use the `dapr.io/disable-builtin-k8s-secret-store` [annotation]({{< ref arguments-annotations-overview.md >}}). + If you want to disable the built-in Kubernetes secret store, you need to use the `dapr.io/disable-builtin-k8s-secret-store` [annotation]({{% ref arguments-annotations-overview.md %}}). {{% /alert %}} #### Turning on preview features -See the [preview features]({{< ref "preview-features.md" >}}) guide for information and examples on how to opt-in to preview features for a release. +See the [preview features]({{% ref "preview-features.md" %}}) guide for information and examples on how to opt-in to preview features for a release. Enabling preview features unlock new capabilities to be added for dev/test, since they still need more time before becoming generally available (GA) in the runtime. @@ -376,7 +376,7 @@ The `mtls` section contains properties for mTLS. | `controlPlaneTrustDomain` | string | Trust domain for the control plane. This is used to verify connection to control plane services. | | `tokenValidators` | array | Additional Sentry token validators to use for authenticating certificate requests. | -See the [mTLS how-to]({{< ref "mtls.md" >}}) and [security concepts]({{< ref "security-concept.md" >}}) for more information. +See the [mTLS how-to]({{% ref "mtls.md" %}}) and [security concepts]({{% ref "security-concept.md" %}}) for more information. ### Example control plane configuration @@ -395,4 +395,4 @@ spec: ## Next steps -{{< button text="Learn about concurrency and rate limits" page="control-concurrency" >}} +{{< button text="Learn about concurrency and rate limits" page="control-concurrency.md" >}} diff --git a/daprdocs/content/en/operations/configuration/control-concurrency.md b/daprdocs/content/en/operations/configuration/control-concurrency.md index 8bfdc044cd4..c8c37c1d015 100644 --- a/daprdocs/content/en/operations/configuration/control-concurrency.md +++ b/daprdocs/content/en/operations/configuration/control-concurrency.md @@ -17,7 +17,7 @@ While this guide focuses on `app-max-concurrency`, you can also limit request ra - `middleware.http.ratelimit`: Time bound and limits the number of requests per second - `app-max-concurrency`: Specifies the max number of concurrent requests (and events) at any point of time. -See [Rate limit middleware]({{< ref middleware-rate-limit.md >}}) for more information about that approach. +See [Rate limit middleware]({{% ref middleware-rate-limit.md %}}) for more information about that approach. ## Demo @@ -35,10 +35,10 @@ Using Dapr, you don't need to make any code changes to your application. Select how you'd like to configure `app-max-concurrency`. -{{< tabs "CLI" Kubernetes >}} +{{% tabpane "CLI" Kubernetes %}} -{{% codetab %}} +{{% tab %}} To set concurrency limits with the Dapr CLI for running on your local dev machine, add the `app-max-concurrency` flag: @@ -48,10 +48,10 @@ dapr run --app-max-concurrency 1 --app-port 5000 python ./app.py The above example effectively turns your app into a sequential processing service. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To configure concurrency limits in Kubernetes, add the following annotation to your pod: @@ -80,9 +80,9 @@ spec: #... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Limitations @@ -91,8 +91,8 @@ Rate limiting is guaranteed for every event coming _from_ Dapr, including pub/su ## Related links -[Arguments and annotations]({{< ref arguments-annotations-overview.md >}}) +[Arguments and annotations]({{% ref arguments-annotations-overview.md %}}) ## Next steps -{{< button text="Limit secret store access" page="secret-scope" >}} +{{< button text="Limit secret store access" page="secret-scope.md" >}} diff --git a/daprdocs/content/en/operations/configuration/environment-variables-secrets.md b/daprdocs/content/en/operations/configuration/environment-variables-secrets.md index 960ee4771cf..904fce6c384 100644 --- a/daprdocs/content/en/operations/configuration/environment-variables-secrets.md +++ b/daprdocs/content/en/operations/configuration/environment-variables-secrets.md @@ -8,7 +8,7 @@ description: "Inject Environment Variables from Kubernetes Secrets into Dapr sid In special cases, the Dapr sidecar needs an environment variable injected into it. This use case may be required by a component, a 3rd party library, or a module that uses environment variables to configure the said component or customize its behavior. This can be useful for both production and non-production environments. ## Overview -In Dapr 1.15, the new `dapr.io/env-from-secret` annotation was introduced, [similar to `dapr.io/env`]({{< ref arguments-annotations-overview >}}). +In Dapr 1.15, the new `dapr.io/env-from-secret` annotation was introduced, [similar to `dapr.io/env`]({{% ref arguments-annotations-overview %}}). With this annotation, you can inject an environment variable into the Dapr sidecar, with a value from a secret. ### Annotation format diff --git a/daprdocs/content/en/operations/configuration/grpc.md b/daprdocs/content/en/operations/configuration/grpc.md index 5ab2df15f07..56ad7e4ed4a 100644 --- a/daprdocs/content/en/operations/configuration/grpc.md +++ b/daprdocs/content/en/operations/configuration/grpc.md @@ -6,7 +6,7 @@ weight: 5000 description: "Configure Dapr to use gRPC for low-latency, high performance scenarios" --- -Dapr implements both an HTTP and a gRPC API for local calls. gRPC is useful for low-latency, high performance scenarios and has language integration using the proto clients. [You can see the full list of auto-generated clients (Dapr SDKs)]({{< ref sdks >}}). +Dapr implements both an HTTP and a gRPC API for local calls. gRPC is useful for low-latency, high performance scenarios and has language integration using the proto clients. [You can see the full list of auto-generated clients (Dapr SDKs)]({{% ref sdks %}}). The Dapr runtime implements a [proto service](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto) that apps can communicate with via gRPC. @@ -14,10 +14,10 @@ Not only can you call Dapr via gRPC, Dapr can communicate with an application vi ## Configuring Dapr to communicate with an app via gRPC -{{< tabs "Self-hosted" Kubernetes >}} +{{% tabpane "Self-hosted" Kubernetes %}} -{{% codetab %}} +{{% tab %}} When running in self hosted mode, use the `--app-protocol` flag to tell Dapr to use gRPC to talk to the app: @@ -26,10 +26,10 @@ dapr run --app-protocol grpc --app-port 5005 node app.js ``` This tells Dapr to communicate with your app via gRPC over port `5005`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, set the following annotations in your deployment YAML: @@ -58,10 +58,10 @@ spec: #... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -{{< button text="Handle large HTTP header sizes" page="increase-read-buffer-size" >}} \ No newline at end of file +{{< button text="Handle large HTTP header sizes" page="increase-read-buffer-size.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/increase-read-buffer-size.md b/daprdocs/content/en/operations/configuration/increase-read-buffer-size.md index 9fcb80c4fb0..c43f42c9662 100644 --- a/daprdocs/content/en/operations/configuration/increase-read-buffer-size.md +++ b/daprdocs/content/en/operations/configuration/increase-read-buffer-size.md @@ -12,10 +12,10 @@ You can increase the HTTP header size by using: - The `dapr.io/http-read-buffer-size` annotation, or - The `--dapr-http-read-buffer-size` flag when using the CLI. -{{< tabs Self-hosted Kubernetes >}} +{{% tabpane Self-hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} When running in self-hosted mode, use the `--dapr-http-read-buffer-size` flag to configure Dapr to use non-default http header size: @@ -24,10 +24,10 @@ dapr run --dapr-http-read-buffer-size 16 node app.js ``` This tells Dapr to set maximum read buffer size to `16` KB. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, set the following annotations in your deployment YAML: @@ -56,13 +56,13 @@ spec: #... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -[Dapr Kubernetes pod annotations spec]({{< ref arguments-annotations-overview.md >}}) +[Dapr Kubernetes pod annotations spec]({{% ref arguments-annotations-overview.md %}}) ## Next steps -{{< button text="Handle large HTTP body requests" page="increase-request-size" >}} +{{< button text="Handle large HTTP body requests" page="increase-request-size.md" >}} diff --git a/daprdocs/content/en/operations/configuration/increase-request-size.md b/daprdocs/content/en/operations/configuration/increase-request-size.md index 25461e3e83f..9ab79bb836a 100644 --- a/daprdocs/content/en/operations/configuration/increase-request-size.md +++ b/daprdocs/content/en/operations/configuration/increase-request-size.md @@ -10,10 +10,10 @@ By default, Dapr has a limit for the request body size, set to 4MB. You can chan - The `dapr.io/http-max-request-size` annotation, or - The `--dapr-http-max-request-size` flag. -{{< tabs Self-hosted Kubernetes >}} +{{% tabpane Self-hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} When running in self-hosted mode, use the `--dapr-http-max-request-size` flag to configure Dapr to use non-default request body size: @@ -22,10 +22,10 @@ dapr run --dapr-http-max-request-size 16 node app.js ``` This tells Dapr to set maximum request body size to `16` MB. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes, set the following annotations in your deployment YAML: @@ -54,14 +54,14 @@ spec: #... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -[Dapr Kubernetes pod annotations spec]({{< ref arguments-annotations-overview.md >}}) +[Dapr Kubernetes pod annotations spec]({{% ref arguments-annotations-overview.md %}}) ## Next steps -{{< button text="Install sidecar certificates" page="install-certificates" >}} \ No newline at end of file +{{< button text="Install sidecar certificates" page="install-certificates.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/install-certificates.md b/daprdocs/content/en/operations/configuration/install-certificates.md index 7c2b79f8c86..c2ec733f59c 100644 --- a/daprdocs/content/en/operations/configuration/install-certificates.md +++ b/daprdocs/content/en/operations/configuration/install-certificates.md @@ -12,10 +12,10 @@ The Dapr sidecar can be configured to trust certificates for communicating with Both certificate authority (CA) certificates and leaf certificates are supported. -{{< tabs Self-hosted Kubernetes >}} +{{% tabpane Self-hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} You can make the following configurations when the sidecar is running as a container. @@ -47,10 +47,10 @@ services: > **Note:** When the sidecar is not running inside a container, certificates must be directly installed on the host operating system. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} On Kubernetes: @@ -94,9 +94,9 @@ spec: > **Note**: When using Windows containers, the sidecar container is started with admin privileges, which is required to install the certificates. This does not apply to Linux containers. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} After following these steps, all the certificates in the directory pointed by `SSL_CERT_DIR` are installed. @@ -113,10 +113,10 @@ Watch the demo on using installing SSL certificates and securely using the HTTP ## Related links -- [HTTP binding spec]({{< ref http.md >}}) -- [(Kubernetes) How-to: Mount Pod volumes to the Dapr sidecar]({{< ref kubernetes-volume-mounts.md >}}) -- [Dapr Kubernetes pod annotations spec]({{< ref arguments-annotations-overview.md >}}) +- [HTTP binding spec]({{% ref http.md %}}) +- [(Kubernetes) How-to: Mount Pod volumes to the Dapr sidecar]({{% ref kubernetes-volume-mounts.md %}}) +- [Dapr Kubernetes pod annotations spec]({{% ref arguments-annotations-overview.md %}}) ## Next steps -{{< button text="Enable preview features" page="preview-features" >}} \ No newline at end of file +{{< button text="Enable preview features" page="preview-features.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/invoke-allowlist.md b/daprdocs/content/en/operations/configuration/invoke-allowlist.md index f9afe029926..1126979479c 100644 --- a/daprdocs/content/en/operations/configuration/invoke-allowlist.md +++ b/daprdocs/content/en/operations/configuration/invoke-allowlist.md @@ -77,7 +77,7 @@ The action corresponding to the most specific policy matched takes effect as ord ## Example scenarios -Below are some example scenarios for using access control list for service invocation. See [configuration guidance]({{< ref "configuration-concept.md" >}}) to understand the available configuration settings for an application sidecar. +Below are some example scenarios for using access control list for service invocation. See [configuration guidance]({{% ref "configuration-concept.md" %}}) to understand the available configuration settings for an application sidecar. ### Scenario 1: @@ -243,7 +243,7 @@ spec: In these examples, you learn how to apply access control to the [hello world](https://github.com/dapr/quickstarts/tree/master/tutorials) tutorials. -Access control lists rely on the Dapr [Sentry service]({{< ref "security-concept.md" >}}) to generate the TLS certificates with a SPIFFE ID for authentication. This means the Sentry service either has to be running locally or deployed to your hosting environment, such as a Kubernetes cluster. +Access control lists rely on the Dapr [Sentry service]({{% ref "security-concept.md" %}}) to generate the TLS certificates with a SPIFFE ID for authentication. This means the Sentry service either has to be running locally or deployed to your hosting environment, such as a Kubernetes cluster. The `nodeappconfig` example below shows how to **deny** access to the `neworder` method from the `pythonapp`, where the Python app is in the `myDomain` trust domain and `default` namespace. The Node.js app is in the `public` trust domain. @@ -295,16 +295,16 @@ When walking through this tutorial, you: #### Prerequisites -- Become familiar with running [Sentry service in self-hosted mode]({{< ref "mtls.md" >}}) with mTLS enabled +- Become familiar with running [Sentry service in self-hosted mode]({{% ref "mtls.md" %}}) with mTLS enabled - Clone the [hello world](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-world/README.md) tutorial #### Run the Node.js app 1. In a command prompt, set these environment variables: - {{< tabs "Linux/MacOS" Windows >}} + {{% tabpane "Linux/MacOS" Windows %}} - {{% codetab %}} + {{% tab %}} ```bash export DAPR_TRUST_ANCHORS=`cat $HOME/.dapr/certs/ca.crt` @@ -313,9 +313,9 @@ When walking through this tutorial, you: export NAMESPACE=default ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```powershell $env:DAPR_TRUST_ANCHORS=$(Get-Content -raw $env:USERPROFILE\.dapr\certs\ca.crt) @@ -324,9 +324,9 @@ When walking through this tutorial, you: $env:NAMESPACE="default" ``` - {{% /codetab %}} + {{% /tab %}} - {{< /tabs >}} + {{% /tabpane %}} 1. Run daprd to launch a Dapr sidecar for the Node.js app with mTLS enabled, referencing the local Sentry service: @@ -344,9 +344,9 @@ When walking through this tutorial, you: 1. In another command prompt, set these environment variables: - {{< tabs "Linux/MacOS" Windows >}} + {{% tabpane "Linux/MacOS" Windows %}} - {{% codetab %}} + {{% tab %}} ```bash export DAPR_TRUST_ANCHORS=`cat $HOME/.dapr/certs/ca.crt` @@ -354,9 +354,9 @@ When walking through this tutorial, you: export DAPR_CERT_KEY=`cat $HOME/.dapr/certs/issuer.key` export NAMESPACE=default ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```powershell $env:DAPR_TRUST_ANCHORS=$(Get-Content -raw $env:USERPROFILE\.dapr\certs\ca.crt) @@ -365,9 +365,9 @@ When walking through this tutorial, you: $env:NAMESPACE="default" ``` - {{% /codetab %}} + {{% /tab %}} - {{< /tabs >}} + {{% /tabpane %}} 1. Run daprd to launch a Dapr sidecar for the Python app with mTLS enabled, referencing the local Sentry service: @@ -386,12 +386,12 @@ You should see the calls to the Node.js app fail in the Python app command promp #### Prerequisites -- Become familiar with running [Sentry service in self-hosted mode]({{< ref "mtls.md" >}}) with mTLS enabled +- Become familiar with running [Sentry service in self-hosted mode]({{% ref "mtls.md" %}}) with mTLS enabled - Clone the [hello world](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-world/README.md) tutorial #### Configure the Node.js and Python apps -You can create and apply the above [`nodeappconfig.yaml`](#nodeappconfigyaml) and [`pythonappconfig.yaml`](#pythonappconfigyaml) configuration files, as described in the [configuration]({{< ref "configuration-concept.md" >}}). +You can create and apply the above [`nodeappconfig.yaml`](#nodeappconfigyaml) and [`pythonappconfig.yaml`](#pythonappconfigyaml) configuration files, as described in the [configuration]({{% ref "configuration-concept.md" %}}). For example, the Kubernetes Deployment below is how the Python app is deployed to Kubernetes in the default namespace with this `pythonappconfig` configuration file. @@ -438,4 +438,4 @@ Watch this [video](https://youtu.be/j99RN_nxExA?t=1108) on how to apply access c ## Next steps -{{< button text="Dapr APIs allow list" page="api-allowlist" >}} \ No newline at end of file +{{< button text="Dapr APIs allow list" page="api-allowlist.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/preview-features.md b/daprdocs/content/en/operations/configuration/preview-features.md index 1e442dcc587..3a76357aab6 100644 --- a/daprdocs/content/en/operations/configuration/preview-features.md +++ b/daprdocs/content/en/operations/configuration/preview-features.md @@ -6,7 +6,7 @@ weight: 7000 description: "How to specify and enable preview features" --- -[Preview features]({{< ref support-preview-features >}}) in Dapr are considered experimental when they are first released. These preview features require you to explicitly opt-in to use them. You specify this opt-in in Dapr's Configuration file. +[Preview features]({{% ref support-preview-features %}}) in Dapr are considered experimental when they are first released. These preview features require you to explicitly opt-in to use them. You specify this opt-in in Dapr's Configuration file. Preview features are enabled on a per application basis by setting configuration when running an application instance. @@ -40,10 +40,10 @@ spec: enabled: true ``` -{{< tabs Self-hosted Kubernetes >}} +{{% tabpane Self-hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} To enable preview features when running Dapr locally, either update the default configuration or specify a separate config file using `dapr run`. @@ -57,10 +57,10 @@ Alternately, you can update preview features on all apps run locally by specifyi dapr run --app-id myApp --config ./previewConfig.yaml ./app ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In Kubernetes mode, the configuration must be provided via a configuration component. Using the same configuration as above, apply it via `kubectl`: @@ -100,10 +100,10 @@ spec: imagePullPolicy: Always ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Next steps -{{< button text="Configuration schema" page="configuration-schema" >}} \ No newline at end of file +{{< button text="Configuration schema" page="configuration-schema.md" >}} \ No newline at end of file diff --git a/daprdocs/content/en/operations/configuration/secret-scope.md b/daprdocs/content/en/operations/configuration/secret-scope.md index 96e7b12e3a1..453d838ca37 100644 --- a/daprdocs/content/en/operations/configuration/secret-scope.md +++ b/daprdocs/content/en/operations/configuration/secret-scope.md @@ -7,15 +7,15 @@ description: "Define secret scopes by augmenting the existing configuration reso description: "Define secret scopes by augmenting the existing configuration resource with restrictive permissions." --- -In addition to [scoping which applications can access a given component]({{< ref "component-scopes.md">}}), you can also scope a named secret store component to one or more secrets for an application. By defining `allowedSecrets` and/or `deniedSecrets` lists, you restrict applications to access only specific secrets. -In addition to [scoping which applications can access a given component]({{< ref "component-scopes.md">}}), you can also scope a named secret store component to one or more secrets for an application. By defining `allowedSecrets` and/or `deniedSecrets` lists, you restrict applications to access only specific secrets. +In addition to [scoping which applications can access a given component]({{% ref "component-scopes.md"%}}), you can also scope a named secret store component to one or more secrets for an application. By defining `allowedSecrets` and/or `deniedSecrets` lists, you restrict applications to access only specific secrets. +In addition to [scoping which applications can access a given component]({{% ref "component-scopes.md"%}}), you can also scope a named secret store component to one or more secrets for an application. By defining `allowedSecrets` and/or `deniedSecrets` lists, you restrict applications to access only specific secrets. For more information about configuring a Configuration resource: -- [Configuration overview]({{< ref configuration-overview.md >}}) -- [Configuration schema]({{< ref configuration-schema.md >}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) +- [Configuration schema]({{% ref configuration-schema.md %}}) For more information about configuring a Configuration resource: -- [Configuration overview]({{< ref configuration-overview.md >}}) -- [Configuration schema]({{< ref configuration-schema.md >}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) +- [Configuration schema]({{% ref configuration-schema.md %}}) ## Configure secrets access @@ -95,14 +95,14 @@ In a Kubernetes cluster, the native Kubernetes secret store is added to your Dap kubectl apply -f appconfig.yaml`. ``` -For applications that you need to deny access to the Kubernetes secret store, follow [the Kubernetes instructions]({{< ref kubernetes-overview >}}), adding the following annotation to the application pod. +For applications that you need to deny access to the Kubernetes secret store, follow [the Kubernetes instructions]({{% ref kubernetes-overview %}}), adding the following annotation to the application pod. 1. Apply it to the Kubernetes cluster using the following command: ```bash kubectl apply -f appconfig.yaml`. ``` -For applications that you need to deny access to the Kubernetes secret store, follow [the Kubernetes instructions]({{< ref kubernetes-overview >}}), adding the following annotation to the application pod. +For applications that you need to deny access to the Kubernetes secret store, follow [the Kubernetes instructions]({{% ref kubernetes-overview %}}), adding the following annotation to the application pod. ```yaml dapr.io/config: appconfig @@ -128,8 +128,8 @@ spec: allowedSecrets: ["secret1", "secret2"] ``` -This example defines configuration for secret store named `vault`. The default access to the secret store is `deny`. Meanwhile, some secrets are accessible by the application based on the `allowedSecrets` list. Follow [the Sidecar configuration instructions]({{< ref "configuration-overview.md#sidecar-configuration" >}}) to apply configuration to the sidecar. -This example defines configuration for secret store named `vault`. The default access to the secret store is `deny`. Meanwhile, some secrets are accessible by the application based on the `allowedSecrets` list. Follow [the Sidecar configuration instructions]({{< ref "configuration-overview.md#sidecar-configuration" >}}) to apply configuration to the sidecar. +This example defines configuration for secret store named `vault`. The default access to the secret store is `deny`. Meanwhile, some secrets are accessible by the application based on the `allowedSecrets` list. Follow [the Sidecar configuration instructions]({{% ref "configuration-overview.md#sidecar-configuration" %}}) to apply configuration to the sidecar. +This example defines configuration for secret store named `vault`. The default access to the secret store is `deny`. Meanwhile, some secrets are accessible by the application based on the `allowedSecrets` list. Follow [the Sidecar configuration instructions]({{% ref "configuration-overview.md#sidecar-configuration" %}}) to apply configuration to the sidecar. ### Scenario 3: Deny access to certain sensitive secrets in a secret store @@ -148,13 +148,14 @@ spec: deniedSecrets: ["secret1", "secret2"] ``` -This configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault,` while allowing access to all other secrets. Follow [the Sidecar configuration instructions]({{< ref "configuration-overview.md#sidecar-configuration" >}}) to apply configuration to the sidecar. +This configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault,` while allowing access to all other secrets. Follow [the Sidecar configuration instructions]({{% ref "configuration-overview.md#sidecar-configuration" %}}) to apply configuration to the sidecar. ## Next steps -{{< button text="Service invocation access control" page="invoke-allowlist" >}} -This configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault,` while allowing access to all other secrets. Follow [the Sidecar configuration instructions]({{< ref "configuration-overview.md#sidecar-configuration" >}}) to apply configuration to the sidecar. +{{< button text="Service invocation access control" page="invoke-allowlist.md" >}} + +This configuration explicitly denies access to `secret1` and `secret2` from the secret store named `vault,` while allowing access to all other secrets. Follow [the Sidecar configuration instructions]({{% ref "configuration-overview.md#sidecar-configuration" %}}) to apply configuration to the sidecar. ## Next steps -{{< button text="Service invocation access control" page="invoke-allowlist" >}} +{{< button text="Service invocation access control" page="invoke-allowlist.md" >}} diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-aks.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-aks.md index 2b390923203..40162438b71 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-aks.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-aks.md @@ -57,7 +57,7 @@ AKS Edge Essentials does not come with a default storage class, which may cause ## Related links -- Learn more about [the Dapr extension for AKS]({{< ref azure-kubernetes-service-extension >}}) +- Learn more about [the Dapr extension for AKS]({{% ref azure-kubernetes-service-extension %}}) - [Install the Dapr extension for AKS](https://learn.microsoft.com/azure/aks/dapr) - [Configure the Dapr extension for AKS](https://learn.microsoft.com/azure/aks/dapr-settings) - [Deploy and run workflows with the Dapr extension for AKS](https://learn.microsoft.com/azure/aks/dapr-workflow) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-eks.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-eks.md index b7e8a0f8153..6cff6e58031 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-eks.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-eks.md @@ -127,6 +127,6 @@ aws eks --region [your_aws_region] update-kubeconfig --name [your_eks_cluster_na - [Learn more about EKS clusters](https://docs.aws.amazon.com/eks/latest/userguide/clusters.html) - [Learn more about eksctl](https://eksctl.io/getting-started/) -- [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) -- Learn how to [deploy Dapr on your cluster]({{< ref kubernetes-deploy.md >}}) -- [Kubernetes production guidelines]({{< ref kubernetes-production.md >}}) +- [Try out a Dapr quickstart]({{% ref quickstarts.md %}}) +- Learn how to [deploy Dapr on your cluster]({{% ref kubernetes-deploy.md %}}) +- [Kubernetes production guidelines]({{% ref kubernetes-production.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 index 8fb20880dc8..c23923a3e43 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-gke.md @@ -80,7 +80,7 @@ kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterr ## Related links - [Learn more about GKE clusters](https://cloud.google.com/kubernetes-engine/docs) -- [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) -- Learn how to [deploy Dapr on your cluster]({{< ref kubernetes-deploy.md >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) -- [Kubernetes production guidelines]({{< ref kubernetes-production.md >}}) \ No newline at end of file +- [Try out a Dapr quickstart]({{% ref quickstarts.md %}}) +- Learn how to [deploy Dapr on your cluster]({{% ref kubernetes-deploy.md %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) +- [Kubernetes production guidelines]({{% ref kubernetes-production.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-kind.md b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-kind.md index d77f27b3073..f330f1fd3b0 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-kind.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-kind.md @@ -151,7 +151,7 @@ If you are using Docker Desktop, verify that you have [the recommended settings] ``` ## Related links -- [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) -- Learn how to [deploy Dapr on your cluster]({{< ref kubernetes-deploy.md >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) -- [Kubernetes production guidelines]({{< ref kubernetes-production.md >}}) \ No newline at end of file +- [Try out a Dapr quickstart]({{% ref quickstarts.md %}}) +- Learn how to [deploy Dapr on your cluster]({{% ref kubernetes-deploy.md %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) +- [Kubernetes production guidelines]({{% ref kubernetes-production.md %}}) \ No newline at end of file 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 78f4c0786a0..950fd127428 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/cluster/setup-minikube.md @@ -77,7 +77,7 @@ $ minikube service calculator-front-end ``` ## Related links -- [Try out a Dapr quickstart]({{< ref quickstarts.md >}}) -- Learn how to [deploy Dapr on your cluster]({{< ref kubernetes-deploy.md >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) -- [Kubernetes production guidelines]({{< ref kubernetes-production.md >}}) \ No newline at end of file +- [Try out a Dapr quickstart]({{% ref quickstarts.md %}}) +- Learn how to [deploy Dapr on your cluster]({{% ref kubernetes-deploy.md %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) +- [Kubernetes production guidelines]({{% ref kubernetes-production.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-dapr-shared.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-dapr-shared.md index 9839e129633..e6c3168446d 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-dapr-shared.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-dapr-shared.md @@ -56,7 +56,7 @@ Kubernetes `Deployments` are installed once per cluster. Based on available reso ## Getting Started with Dapr Shared {{% alert title="Prerequisites" color="primary" %}} -Before installing Dapr Shared, make ensure you have [Dapr installed in your cluster]({{< ref "kubernetes-deploy.md" >}}). +Before installing Dapr Shared, make ensure you have [Dapr installed in your cluster]({{% ref "kubernetes-deploy.md" %}}). {{% /alert %}} If you want to get started with Dapr Shared, you can create a new Dapr Shared instance by installing the official Helm Chart: diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md index 41af7c0d84a..5f7cb75c995 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-deploy.md @@ -8,29 +8,29 @@ aliases: - /getting-started/install-dapr-kubernetes/ --- -When [setting up Dapr on Kubernetes]({{< ref kubernetes-overview.md >}}), you can use either the Dapr CLI or Helm. +When [setting up Dapr on Kubernetes]({{% ref kubernetes-overview.md %}}), you can use either the Dapr CLI or Helm. {{% alert title="Hybrid clusters" color="primary" %}} -Both the Dapr CLI and the Dapr Helm chart automatically deploy with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy Dapr to Windows nodes if your application requires it. For more information, see [Deploying to a hybrid Linux/Windows Kubernetes cluster]({{< ref kubernetes-hybrid-clusters >}}). +Both the Dapr CLI and the Dapr Helm chart automatically deploy with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy Dapr to Windows nodes if your application requires it. For more information, see [Deploying to a hybrid Linux/Windows Kubernetes cluster]({{% ref kubernetes-hybrid-clusters %}}). {{% /alert %}} -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} ## Install with Dapr CLI -You can install Dapr on a Kubernetes cluster using the [Dapr CLI]({{< ref install-dapr-cli.md >}}). +You can install Dapr on a Kubernetes cluster using the [Dapr CLI]({{% ref install-dapr-cli.md %}}). ### Prerequisites - Install: - - [Dapr CLI]({{< ref install-dapr-cli.md >}}) + - [Dapr CLI]({{% ref install-dapr-cli.md %}}) - [kubectl](https://kubernetes.io/docs/tasks/tools/) - Create a Kubernetes cluster with Dapr. Here are some helpful links: - - [Set up KiNd Cluster]({{< ref setup-kind.md >}}) - - [Set up Minikube Cluster]({{< ref setup-minikube.md >}}) - - [Set up Azure Kubernetes Service Cluster]({{< ref setup-aks.md >}}) - - [Set up GKE cluster]({{< ref setup-gke.md >}}) + - [Set up KiNd Cluster]({{% ref setup-kind.md %}}) + - [Set up Minikube Cluster]({{% ref setup-minikube.md %}}) + - [Set up Azure Kubernetes Service Cluster]({{% ref setup-aks.md %}}) + - [Set up GKE cluster]({{% ref setup-gke.md %}}) - [Set up Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) @@ -133,7 +133,7 @@ export DAPR_HELM_REPO_PASSWORD="passwd_xxx" ``` #### Install in high availability mode -You can run Dapr with three replicas of each control plane pod in the `dapr-system` namespace for [production scenarios]({{< ref kubernetes-production.md >}}). +You can run Dapr with three replicas of each control plane pod in the `dapr-system` namespace for [production scenarios]({{% ref kubernetes-production.md %}}). ```bash dapr init -k --enable-ha=true @@ -149,7 +149,7 @@ dapr init -k -n mynamespace #### Disable mTLS -Dapr is initialized by default with [mTLS]({{< ref "security-concept.md#sidecar-to-sidecar-communication" >}}). You can disable it with: +Dapr is initialized by default with [mTLS]({{% ref "security-concept.md#sidecar-to-sidecar-communication" %}}). You can disable it with: ```bash dapr init -k --enable-mtls=false @@ -171,10 +171,10 @@ Run the following command on your local machine to uninstall Dapr on your cluste dapr uninstall -k ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ## Install with Helm @@ -188,10 +188,10 @@ You can install Dapr on Kubernetes using a Helm v3 chart. - [Helm v3](https://helm.sh/docs/intro/install/) - [kubectl](https://kubernetes.io/docs/tasks/tools/) - Create a Kubernetes cluster with Dapr. Here are some helpful links: - - [Set up KiNd Cluster]({{< ref setup-kind.md >}}) - - [Set up Minikube Cluster]({{< ref setup-minikube.md >}}) - - [Set up Azure Kubernetes Service Cluster]({{< ref setup-aks.md >}}) - - [Set up GKE cluster]({{< ref setup-gke.md >}}) + - [Set up KiNd Cluster]({{% ref setup-kind.md %}}) + - [Set up Minikube Cluster]({{% ref setup-minikube.md %}}) + - [Set up Azure Kubernetes Service Cluster]({{% ref setup-aks.md %}}) + - [Set up GKE cluster]({{% ref setup-gke.md %}}) - [Set up Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) @@ -244,7 +244,7 @@ You can install Dapr on Kubernetes using a Helm v3 chart. --wait ``` -See [Guidelines for production ready deployments on Kubernetes]({{< ref kubernetes-production.md >}}) for more information on installing and upgrading Dapr using Helm. +See [Guidelines for production ready deployments on Kubernetes]({{% ref kubernetes-production.md %}}) for more information on installing and upgrading Dapr using Helm. ### (optional) Install the Dapr dashboard as part of the control plane @@ -287,12 +287,12 @@ helm uninstall dapr --namespace dapr-system ### More information -- Read [the Kubernetes productions guidelines]({{< ref kubernetes-production.md >}}) for recommended Helm chart values for production setups +- Read [the Kubernetes productions guidelines]({{% ref kubernetes-production.md %}}) for recommended Helm chart values for production setups - [More details on Dapr Helm charts](https://github.com/dapr/dapr/blob/master/charts/dapr/README.md) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Use Mariner-based images @@ -302,9 +302,9 @@ Alternatively, you can use Dapr container images based on Mariner 2 (minimal dis To use Mariner-based images for Dapr, you need to add `-mariner` to your Docker tags. For example, while `ghcr.io/dapr/dapr:latest` is the Docker image based on *distroless*, `ghcr.io/dapr/dapr:latest-mariner` is based on Mariner. Tags pinned to a specific version are also available, such as `{{% dapr-latest-version short="true" %}}-mariner`. -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} In the Dapr CLI, you can switch to using Mariner-based images with the `--image-variant` flag. @@ -312,10 +312,10 @@ In the Dapr CLI, you can switch to using Mariner-based images with the `--image- dapr init -k --image-variant mariner ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With Kubernetes and Helm, you can use Mariner-based images by setting the `global.tag` option and adding `-mariner`. For example: @@ -328,12 +328,12 @@ helm upgrade --install dapr dapr/dapr \ --wait ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Deploy Dapr with Helm parameters and other details]({{< ref "kubernetes-production.md#deploy-dapr-with-helm" >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) -- [Kubernetes production guidelines]({{< ref kubernetes-production.md >}}) -- [Configure state store & pubsub message broker]({{< ref "getting-started/tutorials/configure-state-pubsub.md" >}}) +- [Deploy Dapr with Helm parameters and other details]({{% ref "kubernetes-production.md#deploy-dapr-with-helm" %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) +- [Kubernetes production guidelines]({{% ref kubernetes-production.md %}}) +- [Configure state store & pubsub message broker]({{% ref "getting-started/tutorials/configure-state-pubsub.md" %}}) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-hybrid-clusters.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-hybrid-clusters.md index c2385c9f990..8d82048aa06 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-hybrid-clusters.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-hybrid-clusters.md @@ -40,7 +40,7 @@ Before you begin, set up a Kubernetes cluster with Windows nodes. Many Kubernete ## Install the Dapr control plane -If you are installing using the Dapr CLI or via a Helm chart, simply follow the normal deployment procedures: [Installing Dapr on a Kubernetes cluster]({{< ref "install-dapr-selfhost.md#installing-Dapr-on-a-kubernetes-cluster" >}}) +If you are installing using the Dapr CLI or via a Helm chart, simply follow the normal deployment procedures: [Installing Dapr on a Kubernetes cluster]({{% ref "install-dapr-selfhost.md#installing-Dapr-on-a-kubernetes-cluster" %}}) Affinity will be automatically set for `kubernetes.io/os=linux`. This will be sufficient for most users, as Kubernetes requires at least one Linux node pool. @@ -58,7 +58,7 @@ helm install dapr dapr/dapr --set global.daprControlPlaneOs=windows ### Windows applications -1. [Follow the Microsoft documentation to create a Docker Windows container with your application installed](https://learn.microsoft.com/virtualization/windowscontainers/quick-start/set-up-environment?tabs=dockerce). +1. [Follow the Microsoft documentation to create a Docker Windows container with your application installed](https://learn.microsoft.com/virtualization/windowscontainers/quick-start/set-up-environment?tabpane=dockerce). 1. Once you've created a Docker container with your application, create a deployment YAML file with the node affinity set to `kubernetes.io/os: windows`. In the example `deploy_windows.yaml` deployment file below: diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md index 11bae378069..685ec0b6090 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md @@ -65,5 +65,5 @@ func main() { ## Related links -- [Deploy Dapr on Kubernetes]({{< ref kubernetes-deploy.md >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) +- [Deploy Dapr on Kubernetes]({{% ref kubernetes-deploy.md %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md index 6abda8f987a..629866e4f1b 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-overview.md @@ -10,10 +10,10 @@ Dapr can be configured to run on any supported versions of Kubernetes. To achiev | Kubernetes services | Description | |-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `dapr-operator` | Manages [component]({{< ref components >}}) updates and Kubernetes services endpoints for Dapr (state stores, pub/subs, etc.) | +| `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-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" >}}) | +| `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" %}}) | | `dapr-scheduler` | Provides distributed job scheduling capabilities used by the Jobs API, Workflow API, and Actor Reminders | @@ -23,7 +23,7 @@ Dapr support for Kubernetes is aligned with [Kubernetes Version Skew Policy](htt ## Deploying Dapr to a Kubernetes cluster -Read [Deploy Dapr on a Kubernetes cluster]({{< ref kubernetes-deploy.md >}}) to learn how to deploy Dapr to your Kubernetes cluster. +Read [Deploy Dapr on a Kubernetes cluster]({{% ref kubernetes-deploy.md %}}) to learn how to deploy Dapr to your Kubernetes cluster. ## Adding Dapr to a Kubernetes deployment @@ -40,11 +40,11 @@ Deploying and running a Dapr-enabled application into your Kubernetes cluster is dapr.io/config: "tracing" ``` -For more information, check [Dapr annotations]({{< ref arguments-annotations-overview.md >}}). +For more information, check [Dapr annotations]({{% ref arguments-annotations-overview.md %}}). ## Pulling container images from private registries -Dapr works seamlessly with any user application container image, regardless of its origin. Simply [initialize Dapr]({{< ref install-dapr-selfhost.md >}}) and add the [Dapr annotations]({{< ref arguments-annotations-overview.md >}}) to your Kubernetes definition to add the Dapr sidecar. +Dapr works seamlessly with any user application container image, regardless of its origin. Simply [initialize Dapr]({{% ref install-dapr-selfhost.md %}}) and add the [Dapr annotations]({{% ref arguments-annotations-overview.md %}}) to your Kubernetes definition to add the Dapr sidecar. The Dapr control plane and sidecar images come from the [daprio Docker Hub](https://hub.docker.com/u/daprio) container registry, which is a public registry. @@ -58,7 +58,7 @@ For information about: ## Related links -- [Deploy Dapr to a Kubernetes cluster]({{< ref kubernetes-deploy >}}) -- [Upgrade Dapr on a Kubernetes cluster]({{< ref kubernetes-upgrade >}}) -- [Production guidelines for Dapr on Kubernetes]({{< ref kubernetes-production.md >}}) +- [Deploy Dapr to a Kubernetes cluster]({{% ref kubernetes-deploy %}}) +- [Upgrade Dapr on a Kubernetes cluster]({{% ref kubernetes-upgrade %}}) +- [Production guidelines for Dapr on Kubernetes]({{% ref kubernetes-production.md %}}) - [Dapr Kubernetes Quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-persisting-scheduler.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-persisting-scheduler.md index 01f757756ea..9baa2b0ac0f 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-persisting-scheduler.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-persisting-scheduler.md @@ -6,13 +6,13 @@ weight: 50000 description: "Configure Scheduler to persist its database to make it resilient to restarts" --- -The [Scheduler]({{< ref scheduler.md >}}) service is responsible for writing jobs to its embedded Etcd database and scheduling them for execution. +The [Scheduler]({{% ref scheduler.md %}}) service is responsible for writing jobs to its embedded Etcd database and scheduling them for execution. By default, the Scheduler service database writes data to a Persistent Volume Claim volume of size `1Gb`, using the cluster's default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/). This means that there is no additional parameter required to run the scheduler service reliably on most Kubernetes deployments, although you will need [additional configuration](#storage-class) if a default StorageClass is not available or when running a production environment. {{% alert title="Warning" color="warning" %}} The default storage size for the Scheduler is `1Gi`, which is likely not sufficient for most production deployments. -Remember that the Scheduler is used for [Actor Reminders]({{< ref actors-timers-reminders.md >}}) & [Workflows]({{< ref workflow-overview.md >}}), and the [Jobs API]({{< ref jobs_api.md >}}). +Remember that the Scheduler is used for [Actor Reminders]({{% ref actors-timers-reminders.md %}}) & [Workflows]({{% ref workflow-overview.md %}}), and the [Jobs API]({{% ref jobs_api.md %}}). You may want to consider reinstalling Dapr with a larger Scheduler storage of at least `16Gi` or more. For more information, see the [ETCD Storage Disk Size](#etcd-storage-disk-size) section below. {{% /alert %}} @@ -30,7 +30,7 @@ error running scheduler: etcdserver: mvcc: database space exceeded ``` Knowing the safe upper bound for your storage size is not an exact science, and relies heavily on the number, persistence, and the data payload size of your application jobs. -The [Job API]({{< ref jobs_api.md >}}) and [Actor Reminders]({{< ref actors-timers-reminders.md >}}) transparently maps one to one to the usage of your applications. +The [Job API]({{% ref jobs_api.md %}}) and [Actor Reminders]({{% ref actors-timers-reminders.md %}}) transparently maps one to one to the usage of your applications. Workflows create a large number of jobs as Actor Reminders, however these jobs are short lived- matching the lifecycle of each workflow execution. The data payload of jobs created by Workflows is typically empty or small. @@ -43,18 +43,18 @@ This means the actual disk usage of Scheduler will be higher than the current ob If you need to increase an **existing** Scheduler storage size, see the [Increase Scheduler Storage Size](#increase-existing-scheduler-storage-size) section below. To increase the storage size (in this example- `16Gi`) for a **fresh** Dapr installation, you can use the following command: -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} ```bash dapr init -k --set dapr_scheduler.cluster.storageSize=16Gi --set dapr_scheduler.etcdSpaceQuota=16Gi ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash helm upgrade --install dapr dapr/dapr \ @@ -66,15 +66,15 @@ helm upgrade --install dapr dapr/dapr \ --wait ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} For storage providers that do NOT support dynamic volume expansion: If Dapr has ever been installed on the cluster before, the Scheduler's Persistent Volume Claims must be manually uninstalled in order for new ones with increased storage size to be created. ```bash kubectl delete pvc -n dapr-system dapr-scheduler-data-dir-dapr-scheduler-server-0 dapr-scheduler-data-dir-dapr-scheduler-server-1 dapr-scheduler-data-dir-dapr-scheduler-server-2 ``` -Persistent Volume Claims are not deleted automatically with an [uninstall]({{< ref dapr-uninstall.md >}}). This is a deliberate safety measure to prevent accidental data loss. +Persistent Volume Claims are not deleted automatically with an [uninstall]({{% ref dapr-uninstall.md %}}). This is a deliberate safety measure to prevent accidental data loss. {{% /alert %}} #### Increase existing Scheduler Storage Size @@ -150,21 +150,21 @@ Below are a list of useful links to the relevant documentation for creating a pe Once the storage class is available, you can install Dapr using the following command, with Scheduler configured to use the storage class (replace `my-storage-class` with the name of the storage class): {{% alert title="Note" color="primary" %}} -If Dapr is already installed, the control plane needs to be completely [uninstalled]({{< ref dapr-uninstall.md >}}) in order for the Scheduler `StatefulSet` to be recreated with the new persistent volume. +If Dapr is already installed, the control plane needs to be completely [uninstalled]({{% ref dapr-uninstall.md %}}) in order for the Scheduler `StatefulSet` to be recreated with the new persistent volume. {{% /alert %}} -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} ```bash dapr init -k --set dapr_scheduler.cluster.storageClassName=my-storage-class ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash helm upgrade --install dapr dapr/dapr \ @@ -175,8 +175,8 @@ helm upgrade --install dapr dapr/dapr \ --wait ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} ## Ephemeral Storage @@ -184,21 +184,21 @@ When running in non-HA mode, the Scheduler can be optionally made to use ephemer This is useful in non-production deployments or for testing where storage is not available or required. {{% alert title="Note" color="primary" %}} -If Dapr is already installed, the control plane needs to be completely [uninstalled]({{< ref dapr-uninstall.md >}}) in order for the Scheduler `StatefulSet` to be recreated without the persistent volume. +If Dapr is already installed, the control plane needs to be completely [uninstalled]({{% ref dapr-uninstall.md %}}) in order for the Scheduler `StatefulSet` to be recreated without the persistent volume. {{% /alert %}} -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} ```bash dapr init -k --set dapr_scheduler.cluster.inMemoryStorage=true ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash helm upgrade --install dapr dapr/dapr \ @@ -209,5 +209,5 @@ helm upgrade --install dapr dapr/dapr \ --wait ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md index 89a0c03a4f9..5ec24780a28 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-production.md @@ -41,7 +41,7 @@ The following Dapr control plane deployments are optional: ## Sidecar resource settings -[Set the resource assignments for the Dapr sidecar using the supported annotations]({{< ref "arguments-annotations-overview.md" >}}). The specific annotations related to **resource constraints** are: +[Set the resource assignments for the Dapr sidecar using the supported annotations]({{% ref "arguments-annotations-overview.md" %}}). The specific annotations related to **resource constraints** are: - `dapr.io/sidecar-cpu-limit` - `dapr.io/sidecar-memory-limit` @@ -56,7 +56,7 @@ Example settings for the Dapr sidecar in a production-ready setup: |-----|--------| | Limit: 300m, Request: 100m | Limit: 1000Mi, Request: 250Mi -The CPU and memory limits above account for Dapr supporting a high number of I/O bound operations. Use a [monitoring tool]({{< ref observability >}}) to get a baseline for the sidecar (and app) containers and tune these settings based on those baselines. +The CPU and memory limits above account for Dapr supporting a high number of I/O bound operations. Use a [monitoring tool]({{% ref observability %}}) to get a baseline for the sidecar (and app) containers and tune these settings based on those baselines. For more details on configuring resource in Kubernetes, see the following Kubernetes guides: - [Assign Memory Resources to Containers and Pods](https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/) @@ -90,10 +90,10 @@ The `GOMEMLIMIT` environment variable [allows certain suffixes for the memory si When deploying Dapr in a production-ready configuration, it's best to deploy with a high availability (HA) configuration of the control plane. This creates three replicas of each control plane pod in the `dapr-system` namespace, allowing the Dapr control plane to retain three running instances and survive individual node failures and other outages. For a new Dapr deployment, HA mode can be set with both: -- The [Dapr CLI]({{< ref "kubernetes-deploy.md#install-in-highly-available-mode" >}}), and -- [Helm charts]({{< ref "kubernetes-deploy.md#add-and-install-dapr-helm-chart" >}}) +- The [Dapr CLI]({{% ref "kubernetes-deploy.md#install-in-highly-available-mode" %}}), and +- [Helm charts]({{% ref "kubernetes-deploy.md#add-and-install-dapr-helm-chart" %}}) -For an existing Dapr deployment, [you can enable HA mode in a few extra steps]({{< ref "#enable-high-availability-in-an-existing-dapr-deployment" >}}). +For an existing Dapr deployment, [you can enable HA mode in a few extra steps]({{% ref "#enable-high-availability-in-an-existing-dapr-deployment" %}}). ### Individual service HA Helm configuration @@ -159,7 +159,7 @@ spec: ## Deploy Dapr with Helm -[Visit the full guide on deploying Dapr with Helm]({{< ref "kubernetes-deploy.md#install-with-helm" >}}). +[Visit the full guide on deploying Dapr with Helm]({{% ref "kubernetes-deploy.md#install-with-helm" %}}). ### Parameters file @@ -204,7 +204,7 @@ kubectl get pods --namespace dapr-system The example above uses `helm install` and `helm upgrade`. You can also run `helm upgrade --install` to dynamically determine whether to install or upgrade. {{% /alert %}} -The Dapr Helm chart automatically deploys with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy the Dapr control plane to Windows nodes. For more information, see [Deploying to a Hybrid Linux/Windows K8s Cluster]({{< ref "kubernetes-hybrid-clusters.md" >}}). +The Dapr Helm chart automatically deploys with affinity for nodes with the label `kubernetes.io/os=linux`. You can deploy the Dapr control plane to Windows nodes. For more information, see [Deploying to a Hybrid Linux/Windows K8s Cluster]({{% ref "kubernetes-hybrid-clusters.md" %}}). ## Upgrade Dapr with Helm @@ -219,7 +219,7 @@ Upgrading the CLI is optional, but recommended. ### Upgrade the control plane -[Upgrade Dapr on a Kubernetes cluster]({{< ref "kubernetes-upgrade.md#helm" >}}). +[Upgrade Dapr on a Kubernetes cluster]({{% ref "kubernetes-upgrade.md#helm" %}}). ### Update the data plane (sidecars) @@ -268,21 +268,21 @@ When properly configured, Dapr ensures secure communication and can make your ap Verify your production-ready deployment includes the following settings: -1. **Mutual Authentication (mTLS)** is enabled. Dapr has mTLS on by default. [Learn more about how to bring your own certificates]({{< ref "mtls.md#bringing-your-own-certificates" >}}). +1. **Mutual Authentication (mTLS)** is enabled. Dapr has mTLS on by default. [Learn more about how to bring your own certificates]({{% ref "mtls.md#bringing-your-own-certificates" %}}). -1. **App to Dapr API authentication** is enabled. This is the communication between your application and the Dapr sidecar. To secure the Dapr API from unauthorized application access, [enable Dapr's token-based authentication]({{< ref "api-token.md" >}}). +1. **App to Dapr API authentication** is enabled. This is the communication between your application and the Dapr sidecar. To secure the Dapr API from unauthorized application access, [enable Dapr's token-based authentication]({{% ref "api-token.md" %}}). -1. **Dapr to App API authentication** is enabled. This is the communication between Dapr and your application. [Let Dapr know that it is communicating with an authorized application using token authentication]({{< ref "app-api-token.md" >}}). +1. **Dapr to App API authentication** is enabled. This is the communication between Dapr and your application. [Let Dapr know that it is communicating with an authorized application using token authentication]({{% ref "app-api-token.md" %}}). -1. **Component secret data is configured in a secret store** and not hard-coded in the component YAML file. [Learn how to use secrets with Dapr components]({{< ref "component-secrets.md" >}}). +1. **Component secret data is configured in a secret store** and not hard-coded in the component YAML file. [Learn how to use secrets with Dapr components]({{% ref "component-secrets.md" %}}). 1. The Dapr **control plane is installed on a dedicated namespace**, such as `dapr-system`. -1. Dapr supports and is enabled to **scope components for certain applications**. This is not a required practice. [Learn more about component scopes]({{< ref "component-scopes.md" >}}). +1. Dapr supports and is enabled to **scope components for certain applications**. This is not a required practice. [Learn more about component scopes]({{% ref "component-scopes.md" %}}). ## Recommended Placement service configuration -The [Placement service]({{< ref "placement.md" >}}) is a component in Dapr, responsible for disseminating information about actor addresses to all Dapr sidecars via a placement table (more information on this can be found [here]({{< ref "actors-features-concepts.md#actor-placement-service" >}})). +The [Placement service]({{% ref "placement.md" %}}) is a component in Dapr, responsible for disseminating information about actor addresses to all Dapr sidecars via a placement table (more information on this can be found [here]({{% ref "actors-features-concepts.md#actor-placement-service" %}})). When running in production, it's recommended to configure the Placement service with the following values: @@ -305,12 +305,12 @@ When creating a new Pod (or a Deployment, StatefulSet, Job, etc), you can disabl It's recommended that you consider deploying your apps with `automountServiceAccountToken: false` to improve the security posture of your pods, unless your apps depend on having a Service Account token. For example, you may need a Service Account token if: - Your application needs to interact with the Kubernetes APIs. -- You are using Dapr components that interact with the Kubernetes APIs; for example, the [Kubernetes secret store]({{< ref "kubernetes-secret-store.md" >}}) or the [Kubernetes Events binding]({{< ref "kubernetes-binding.md" >}}). +- You are using Dapr components that interact with the Kubernetes APIs; for example, the [Kubernetes secret store]({{% ref "kubernetes-secret-store.md" %}}) or the [Kubernetes Events binding]({{% ref "kubernetes-binding.md" %}}). Thus, Dapr does not set `automountServiceAccountToken: false` automatically for you. However, in all situations where the Service Account is not required by your solution, it's recommended that you set this option in the pods spec. {{% alert title="Note" color="primary" %}} -Initializing Dapr components using [component secrets]({{< ref "component-secrets.md" >}}) stored as Kubernetes secrets does **not** require a Service Account token, so you can still set `automountServiceAccountToken: false` in this case. Only calling the Kubernetes secret store at runtime, using the [Secrets management]({{< ref "secrets-overview.md" >}}) building block, is impacted. +Initializing Dapr components using [component secrets]({{% ref "component-secrets.md" %}}) stored as Kubernetes secrets does **not** require a Service Account token, so you can still set `automountServiceAccountToken: false` in this case. Only calling the Kubernetes secret store at runtime, using the [Secrets management]({{% ref "secrets-overview.md" %}}) building block, is impacted. {{% /alert %}} ## Tracing and metrics configuration @@ -321,13 +321,13 @@ If you already have your own observability setup, you can disable tracing and me ### Tracing -[Configure a tracing backend for Dapr]({{< ref "setup-tracing.md" >}}). +[Configure a tracing backend for Dapr]({{% ref "setup-tracing.md" %}}). ### Metrics For metrics, Dapr exposes a Prometheus endpoint listening on port 9090, which can be scraped by Prometheus. -[Set up Prometheus, Grafana, and other monitoring tools with Dapr]({{< ref "observability" >}}). +[Set up Prometheus, Grafana, and other monitoring tools with Dapr]({{% ref "observability" %}}). ## Injector watchdog @@ -335,13 +335,13 @@ The Dapr Operator service includes an **injector watchdog**, which can be used t The injector watchdog is disabled by default when running Dapr in Kubernetes mode. However, you should consider enabling it with the appropriate values for your specific situation. -Refer to the [Dapr operator service documentation]({{< ref operator >}}) for more details on the injector watchdog and how to enable it. +Refer to the [Dapr operator service documentation]({{% ref operator %}}) for more details on the injector watchdog and how to enable it. ## Configure `seccompProfile` for sidecar containers By default, the Dapr sidecar injector injects a sidecar without any `seccompProfile`. However, for the Dapr sidecar container to run successfully in a namespace with the [Restricted](https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted) profile, the sidecar container needs `securityContext.seccompProfile.Type` to not be `nil`. -Refer to [the Arguments and Annotations overview]({{< ref "arguments-annotations-overview.md" >}}) to set the appropriate `seccompProfile` on the sidecar container. +Refer to [the Arguments and Annotations overview]({{% ref "arguments-annotations-overview.md" %}}) to set the appropriate `seccompProfile` on the sidecar container. ## Best Practices @@ -352,5 +352,5 @@ Watch this video for a deep dive into the best practices for running Dapr in pro ## Related links -- [Deploy Dapr on Kubernetes]({{< ref kubernetes-deploy.md >}}) -- [Upgrade Dapr on Kubernetes]({{< ref kubernetes-upgrade.md >}}) +- [Deploy Dapr on Kubernetes]({{% ref kubernetes-deploy.md %}}) +- [Upgrade Dapr on Kubernetes]({{% ref kubernetes-upgrade.md %}}) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md index 6fbf8bca32d..4313488f57c 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-upgrade.md @@ -9,20 +9,20 @@ description: "Follow these steps to upgrade Dapr on Kubernetes and ensure a smoo You can upgrade the Dapr control plane on a Kubernetes cluster using either the Dapr CLI or Helm. {{% alert title="Note" color="primary" %}} -Refer to the [Dapr version policy]({{< ref "support-release-policy.md#upgrade-paths" >}}) for guidance on Dapr's upgrade path. +Refer to the [Dapr version policy]({{% ref "support-release-policy.md#upgrade-paths" %}}) for guidance on Dapr's upgrade path. {{% /alert %}} -{{< tabs "Dapr CLI" "Helm" >}} +{{% tabpane "Dapr CLI" "Helm" %}} -{{% codetab %}} +{{% tab %}} ## Upgrade using the Dapr CLI -You can upgrade Dapr using the [Dapr CLI]({{< ref install-dapr-cli.md >}}). +You can upgrade Dapr using the [Dapr CLI]({{% ref install-dapr-cli.md %}}). ### Prerequisites -- [Install the Dapr CLI]({{< ref install-dapr-cli.md >}}) -- An existing [Kubernetes cluster running with Dapr]({{< ref cluster >}}) +- [Install the Dapr CLI]({{% ref install-dapr-cli.md %}}) +- An existing [Kubernetes cluster running with Dapr]({{% ref cluster %}}) ### Upgrade existing cluster to {{% dapr-latest-version long="true" %}} @@ -54,10 +54,10 @@ The CustomResourceDefinition "configurations.dapr.io" is invalid: spec.preserveU 1. Proceed with the `dapr upgrade --runtime-version {{% dapr-latest-version long="true" %}} -k` command. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ## Upgrade using Helm You can upgrade Dapr using a Helm v3 chart. @@ -67,7 +67,7 @@ You can upgrade Dapr using a Helm v3 chart. ### Prerequisites - [Install Helm v3](https://github.com/helm/helm/releases) -- An existing [Kubernetes cluster running with Dapr]({{< ref cluster >}}) +- An existing [Kubernetes cluster running with Dapr]({{% ref cluster %}}) ### Upgrade existing cluster to {{% dapr-latest-version long="true" %}} @@ -113,17 +113,17 @@ As of version 1.0.0 onwards, existing certificate values will automatically be r kubectl rollout restart deploy/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Upgrade existing Dapr deployment to enable high availability mode -[Enable high availability mode in an existing Dapr deployment with a few additional steps.]({{< ref "kubernetes-production.md#enabling-high-availability-in-an-existing-dapr-deployment" >}}) +[Enable high availability mode in an existing Dapr deployment with a few additional steps.]({{% ref "kubernetes-production.md#enabling-high-availability-in-an-existing-dapr-deployment" %}}) ## Related links -- [Dapr on Kubernetes]({{< ref kubernetes-overview.md >}}) -- [More on upgrading Dapr with Helm]({{< ref "kubernetes-production.md#upgrade-dapr-with-helm" >}}) -- [Dapr production guidelines]({{< ref kubernetes-production.md >}}) \ No newline at end of file +- [Dapr on Kubernetes]({{% ref kubernetes-overview.md %}}) +- [More on upgrading Dapr with Helm]({{% ref "kubernetes-production.md#upgrade-dapr-with-helm" %}}) +- [Dapr production guidelines]({{% ref kubernetes-production.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-volume-mounts.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-volume-mounts.md index aa93ca17f52..84e595a1763 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-volume-mounts.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-volume-mounts.md @@ -128,4 +128,4 @@ Since any type of Kubernetes Volume can be attached to the sidecar, you can use ## Related links -[Dapr Kubernetes pod annotations spec]({{< ref arguments-annotations-overview.md >}}) +[Dapr Kubernetes pod annotations spec]({{% ref arguments-annotations-overview.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 8bbe050cdb1..30ffc7f0716 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 @@ -8,7 +8,7 @@ description: "How to deploy and run Dapr in self-hosted mode without Docker inst ## Prerequisites -- [Install the Dapr CLI]({{< ref "install-dapr-selfhost.md#installing-dapr-cli" >}}) +- [Install the Dapr CLI]({{% ref "install-dapr-selfhost.md#installing-dapr-cli" %}}) ## Initialize Dapr without containers @@ -22,9 +22,9 @@ Two different binaries are installed: - `daprd` - `placement` -The `placement` binary is needed to enable [actors]({{< ref "actors-overview.md" >}}) in a Dapr self-hosted installation. +The `placement` binary is needed to enable [actors]({{% ref "actors-overview.md" %}}) in a Dapr self-hosted installation. -In slim init mode, no default components (such as Redis) are installed for state management or pub/sub. This means that, aside from [service invocation]({{< ref "service-invocation-overview.md" >}}), no other building block functionality is available "out-of-the-box" on install. Instead, you can set up your own environment and custom components. +In slim init mode, no default components (such as Redis) are installed for state management or pub/sub. This means that, aside from [service invocation]({{% ref "service-invocation-overview.md" %}}), no other building block functionality is available "out-of-the-box" on install. Instead, you can set up your own environment and custom components. Actor-based service invocation is possible if a state store is configured, as explained in the following sections. @@ -39,16 +39,16 @@ See documentation around [configuring Redis in self-hosted mode without Docker]( To enable actor placement: - Run the placement service locally. -- Enable a [transactional state store that supports ETags]({{< ref "supported-state-stores.md" >}}) to use actors. For example, [Redis configured in self-hosted mode](https://redis.io/topics/quickstart). +- Enable a [transactional state store that supports ETags]({{% ref "supported-state-stores.md" %}}) to use actors. For example, [Redis configured in self-hosted mode](https://redis.io/topics/quickstart). By default, the `placement` binary is installed in: - For Linux/MacOS: `/$HOME/.dapr/bin` - For Windows: `%USERPROFILE%\.dapr\bin` -{{< tabs "Linux/MacOS" "Windows">}} +{{% tabpane "Linux/MacOS" "Windows"%}} -{{% codetab %}} +{{% tab %}} ```bash $ $HOME/.dapr/bin/placement @@ -64,9 +64,9 @@ INFO[0001] leader is established. instance=Nicoletaz-L10. ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} When running standalone placement on Windows, specify port 6050: @@ -84,14 +84,14 @@ time="2022-10-17T14:56:56.8232286-05:00" level=info msg="leader is established." ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Now, to run an application with actors enabled, you can follow the sample example created for: - [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) -- [dotnet-sdk]({{< ref "dotnet-actors-howto.md" >}}) +- [dotnet-sdk]({{% ref "dotnet-actors-howto.md" %}}) Update the state store configuration files to match the Redis host and password with your setup. @@ -104,8 +104,8 @@ Enable it as a actor state store by making the metadata piece similar to the [sa ## Clean up -When finished, remove the binaries by following [Uninstall Dapr in a self-hosted environment]({{< ref self-hosted-uninstall >}}) to remove the binaries. +When finished, remove the binaries by following [Uninstall Dapr in a self-hosted environment]({{% ref self-hosted-uninstall %}}) to remove the binaries. ## Next steps -- Run Dapr with [Podman]({{< ref self-hosted-with-podman.md >}}), using the default [Docker]({{< ref install-dapr-selfhost.md >}}), or in an [airgap environment]({{< ref self-hosted-airgap.md >}}) -- [Upgrade Dapr in self-hosted mode]({{< ref self-hosted-upgrade >}}) \ No newline at end of file +- Run Dapr with [Podman]({{% ref self-hosted-with-podman.md %}}), using the default [Docker]({{% ref install-dapr-selfhost.md %}}), or in an [airgap environment]({{% ref self-hosted-airgap.md %}}) +- [Upgrade Dapr in self-hosted mode]({{% ref self-hosted-upgrade %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-overview.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-overview.md index 6dadac40ce1..df79e5483a0 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-overview.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-overview.md @@ -12,10 +12,10 @@ Dapr can be configured to run in self-hosted mode on your local developer machin ## Initialization -Dapr can be initialized [with Docker]({{< ref self-hosted-with-docker.md >}}) (default) or in [slim-init mode]({{< ref self-hosted-no-docker.md >}}). It can also be initialized and run in [offline or airgap environments]({{< ref self-hosted-airgap.md >}}). +Dapr can be initialized [with Docker]({{% ref self-hosted-with-docker.md %}}) (default) or in [slim-init mode]({{% ref self-hosted-no-docker.md %}}). It can also be initialized and run in [offline or airgap environments]({{% ref self-hosted-airgap.md %}}). {{% alert title="Note" color="warning" %}} -You can also use [Podman](https://podman.io/) in place of Docker as container runtime. Please refer [dapr init with Podman]({{< ref self-hosted-with-podman.md >}}) for more details. It can be useful in the scenarios where docker cannot be installed due to various networking constraints. +You can also use [Podman](https://podman.io/) in place of Docker as container runtime. Please refer [dapr init with Podman]({{% ref self-hosted-with-podman.md %}}) for more details. It can be useful in the scenarios where docker cannot be installed due to various networking constraints. {{% /alert %}} The default Docker setup provides out of the box functionality with the following containers and configuration: @@ -23,16 +23,16 @@ The default Docker setup provides out of the box functionality with the followin - A Zipkin container for diagnostics and tracing. - A default Dapr configuration and components installed in `$HOME/.dapr/` (Mac/Linux) or `%USERPROFILE%\.dapr\` (Windows). -The `dapr-placement` service is responsible for managing the actor distribution scheme and key range settings. This service is not launched as a container and is only required if you are using Dapr actors. For more information on the actor `Placement` service read [actor overview]({{< ref "actors-overview.md" >}}). +The `dapr-placement` service is responsible for managing the actor distribution scheme and key range settings. This service is not launched as a container and is only required if you are using Dapr actors. For more information on the actor `Placement` service read [actor overview]({{% ref "actors-overview.md" %}}). Diagram of Dapr in self-hosted Docker mode ## Launching applications with Dapr -You can use the [`dapr run` CLI command]({{< ref dapr-run.md >}}) to a Dapr sidecar process along with your application. Additional arguments and flags can be found [here]({{< ref arguments-annotations-overview.md >}}). +You can use the [`dapr run` CLI command]({{% ref dapr-run.md %}}) to a Dapr sidecar process along with your application. Additional arguments and flags can be found [here]({{% ref arguments-annotations-overview.md %}}). ## Name resolution -Dapr uses a [name resolution component]({{< ref supported-name-resolution >}}) for service discovery within the [service invocation]({{< ref service-invocation >}}) building block. By default Dapr uses mDNS when in self-hosted mode. +Dapr uses a [name resolution component]({{% ref supported-name-resolution %}}) for service discovery within the [service invocation]({{% ref service-invocation %}}) building block. By default Dapr uses mDNS when in self-hosted mode. -If you are running Dapr on virtual machines or where mDNS is not available, then you can use the [HashiCorp Consul]({{< ref setup-nr-consul.md >}}) component for name resolution. +If you are running Dapr on virtual machines or where mDNS is not available, then you can use the [HashiCorp Consul]({{% ref setup-nr-consul.md %}}) component for name resolution. diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-persisting-scheduler.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-persisting-scheduler.md index 5bcc8745f20..c23172b54af 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-persisting-scheduler.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-persisting-scheduler.md @@ -6,7 +6,7 @@ weight: 50000 description: "Configure Scheduler to persist its database to make it resilient to restarts" --- -The [Scheduler]({{< ref scheduler.md >}}) service is responsible for writing jobs to its embedded database and scheduling them for execution. +The [Scheduler]({{% ref scheduler.md %}}) service is responsible for writing jobs to its embedded database and scheduling them for execution. By default, the Scheduler service database writes this data to the local volume `dapr_scheduler`, meaning that **this data is persisted across restarts**. The host file location for this local volume is typically located at either `/var/lib/docker/volumes/dapr_scheduler/_data` or `~/.local/share/containers/storage/volumes/dapr_scheduler/_data`, depending on your container runtime. @@ -19,7 +19,7 @@ docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh The Scheduler persistent volume can be modified with a custom volume that is pre-existing, or is created by Dapr. {{% alert title="Note" color="primary" %}} -By default `dapr init` creates a local persistent volume on your drive called `dapr_scheduler`. If Dapr is already installed, the control plane needs to be completely [uninstalled]({{< ref dapr-uninstall.md >}}) in order for the Scheduler container to be recreated with the new persistent volume. +By default `dapr init` creates a local persistent volume on your drive called `dapr_scheduler`. If Dapr is already installed, the control plane needs to be completely [uninstalled]({{% ref dapr-uninstall.md %}}) in order for the Scheduler container to be recreated with the new persistent volume. {{% /alert %}} ```bash 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 f3b33d1de32..487d14732f5 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 @@ -17,7 +17,7 @@ description: "Follow these steps to upgrade Dapr in self-hosted mode and ensure dapr uninstall --all ``` -1. Download and install the latest CLI by visiting [this guide]({{< ref install-dapr-cli.md >}}). +1. Download and install the latest CLI by visiting [this guide]({{% ref install-dapr-cli.md %}}). 1. Initialize the Dapr runtime: diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-docker.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-docker.md index 7aa42196f71..5cbf01f148c 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-docker.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-docker.md @@ -10,7 +10,7 @@ This article provides guidance on running Dapr with Docker on a Windows/Linux/ma ## Prerequisites -- [Dapr CLI]({{< ref install-dapr-cli.md >}}) +- [Dapr CLI]({{% ref install-dapr-cli.md %}}) - [Docker](https://docs.docker.com/get-docker/) - [Docker-Compose](https://docs.docker.com/compose/install/) (optional) @@ -24,7 +24,7 @@ dapr init ## Run both app and sidecar as a process -The [`dapr run` CLI command]({{< ref dapr-run.md >}}) can be used to launch a Dapr sidecar along with your application: +The [`dapr run` CLI command]({{% ref dapr-run.md %}}) can be used to launch a Dapr sidecar along with your application: ```bash dapr run --app-id myapp --app-port 5000 -- dotnet run @@ -162,11 +162,11 @@ The above example also includes a scheduler definition that uses a non-persisten ## Run on Kubernetes If your deployment target is Kubernetes please use Dapr's first-class integration. Refer to the -[Dapr on Kubernetes docs]({{< ref "kubernetes-overview.md" >}}). +[Dapr on Kubernetes docs]({{% ref "kubernetes-overview.md" %}}). ## Name resolution -Dapr by default uses mDNS as the name resolution component in self-hosted mode for service invocation. If you are running Dapr on virtual machines or where mDNS is not available, then you can use the [HashiCorp Consul]({{< ref setup-nr-consul.md >}}) component for name resolution. +Dapr by default uses mDNS as the name resolution component in self-hosted mode for service invocation. If you are running Dapr on virtual machines or where mDNS is not available, then you can use the [HashiCorp Consul]({{% ref setup-nr-consul.md %}}) component for name resolution. ## Docker images diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-podman.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-podman.md index bbb1184e878..82ccbb9a9a5 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-podman.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-with-podman.md @@ -10,7 +10,7 @@ This article provides guidance on running Dapr with Podman on a Windows/Linux/ma ## Prerequisites -- [Dapr CLI]({{< ref install-dapr-cli.md >}}) +- [Dapr CLI]({{% ref install-dapr-cli.md %}}) - [Podman](https://podman-desktop.io/downloads) ## Initialize Dapr environment @@ -23,7 +23,7 @@ dapr init --container-runtime podman ## Run both app and sidecar as a process -The [`dapr run` CLI command]({{< ref dapr-run.md >}}) can be used to launch a Dapr sidecar along with your application: +The [`dapr run` CLI command]({{% ref dapr-run.md %}}) can be used to launch a Dapr sidecar along with your application: ```bash dapr run --app-id myapp --app-port 5000 -- dotnet run diff --git a/daprdocs/content/en/operations/observability/_index.md b/daprdocs/content/en/operations/observability/_index.md index 4fc85c257fb..edc2efd843a 100644 --- a/daprdocs/content/en/operations/observability/_index.md +++ b/daprdocs/content/en/operations/observability/_index.md @@ -12,7 +12,7 @@ description: See and measure the message calls to components and between network {{% alert title="More about Dapr Observability" color="primary" %}} Learn more about how to use Dapr Observability: - - Explore observability via any of the supporting [Dapr SDKs]({{< ref sdks >}}). - - Review the [Observability API reference documentation]({{< ref health_api.md >}}). - - Read the [general overview of the observability concept]({{< ref observability-concept >}}) in Dapr. + - Explore observability via any of the supporting [Dapr SDKs]({{% ref sdks %}}). + - Review the [Observability API reference documentation]({{% ref health_api.md %}}). + - Read the [general overview of the observability concept]({{% ref observability-concept %}}) in Dapr. {{% /alert %}} diff --git a/daprdocs/content/en/operations/observability/logging/fluentd.md b/daprdocs/content/en/operations/observability/logging/fluentd.md index b456b8d953e..c678cda1e27 100644 --- a/daprdocs/content/en/operations/observability/logging/fluentd.md +++ b/daprdocs/content/en/operations/observability/logging/fluentd.md @@ -186,4 +186,4 @@ description: "How to install Fluentd, Elastic Search, and Kibana to search logs * [Elastic search helm chart](https://github.com/elastic/helm-charts/tree/master/elasticsearch) * [Kibana helm chart](https://github.com/elastic/helm-charts/tree/master/kibana) * [Kibana Query Language](https://www.elastic.co/guide/en/kibana/current/kuery-query.html) -* [Troubleshooting using Logs]({{< ref "logs-troubleshooting.md" >}}) +* [Troubleshooting using Logs]({{% ref "logs-troubleshooting.md" %}}) diff --git a/daprdocs/content/en/operations/observability/logging/logs.md b/daprdocs/content/en/operations/observability/logging/logs.md index a3b18c6cd24..2272f5ec052 100644 --- a/daprdocs/content/en/operations/observability/logging/logs.md +++ b/daprdocs/content/en/operations/observability/logging/logs.md @@ -27,7 +27,7 @@ Dapr produces logs based on the following schema: | app_id | Dapr App ID | `dapr-app` | | ver | Dapr Runtime Version | `1.9.0` | -API logging may add other structured fields, as described in the [documentation for API logging]({{< ref "api-logs-troubleshooting.md" >}}). +API logging may add other structured fields, as described in the [documentation for API logging]({{% ref "api-logs-troubleshooting.md" %}}). ## Plain text and JSON formatted logs @@ -111,23 +111,23 @@ spec: API logging enables you to see the API calls your application makes to the Dapr sidecar, to debug issues or monitor the behavior of your application. You can combine both Dapr API logging with Dapr log events. -See [configure and view Dapr Logs]({{< ref "logs-troubleshooting.md" >}}) and [configure and view Dapr API Logs]({{< ref "api-logs-troubleshooting.md" >}}) for more information. +See [configure and view Dapr Logs]({{% ref "logs-troubleshooting.md" %}}) and [configure and view Dapr API Logs]({{% ref "api-logs-troubleshooting.md" %}}) for more information. ## Log collectors -If you run Dapr in a Kubernetes cluster, [Fluentd](https://www.fluentd.org/) is a popular container log collector. You can use Fluentd with a [JSON parser plugin](https://docs.fluentd.org/parser/json) to parse Dapr JSON-formatted logs. This [how-to]({{< ref fluentd.md >}}) shows how to configure Fluentd in your cluster. +If you run Dapr in a Kubernetes cluster, [Fluentd](https://www.fluentd.org/) is a popular container log collector. You can use Fluentd with a [JSON parser plugin](https://docs.fluentd.org/parser/json) to parse Dapr JSON-formatted logs. This [how-to]({{% ref fluentd.md %}}) shows how to configure Fluentd in your cluster. If you are using Azure Kubernetes Service, you can use the built-in agent to collect logs with Azure Monitor without needing to install Fluentd. ## Search engines -If you use [Fluentd](https://www.fluentd.org/), we recommend using Elastic Search and Kibana. This [how-to]({{< ref fluentd.md >}}) shows how to set up Elastic Search and Kibana in your Kubernetes cluster. +If you use [Fluentd](https://www.fluentd.org/), we recommend using Elastic Search and Kibana. This [how-to]({{% ref fluentd.md %}}) shows how to set up Elastic Search and Kibana in your Kubernetes cluster. If you are using the Azure Kubernetes Service, you can use [Azure Monitor for containers](https://docs.microsoft.com/azure/azure-monitor/insights/container-insights-overview) without installing any additional monitoring tools. Also read [How to enable Azure Monitor for containers](https://docs.microsoft.com/azure/azure-monitor/insights/container-insights-onboard) ## References -- [How-to: Set up Fluentd, Elastic search, and Kibana]({{< ref fluentd.md >}}) -- [How-to: Set up Azure Monitor in Azure Kubernetes Service]({{< ref azure-monitor.md >}}) -- [Configure and view Dapr Logs]({{< ref "logs-troubleshooting.md" >}}) -- [Configure and view Dapr API Logs]({{< ref "api-logs-troubleshooting.md" >}}) +- [How-to: Set up Fluentd, Elastic search, and Kibana]({{% ref fluentd.md %}}) +- [How-to: Set up Azure Monitor in Azure Kubernetes Service]({{% ref azure-monitor.md %}}) +- [Configure and view Dapr Logs]({{% ref "logs-troubleshooting.md" %}}) +- [Configure and view Dapr API Logs]({{% ref "api-logs-troubleshooting.md" %}}) diff --git a/daprdocs/content/en/operations/observability/metrics/grafana.md b/daprdocs/content/en/operations/observability/metrics/grafana.md index 5d3949552ed..d37291e9010 100644 --- a/daprdocs/content/en/operations/observability/metrics/grafana.md +++ b/daprdocs/content/en/operations/observability/metrics/grafana.md @@ -8,31 +8,31 @@ description: "How to view Dapr metrics in a Grafana dashboard." ## Available dashboards -{{< tabs "System Service" "Sidecars" "Actors" >}} +{{% tabpane "System Service" "Sidecars" "Actors" %}} -{{% codetab %}} +{{% tab %}} The `grafana-system-services-dashboard.json` template shows Dapr system component status, dapr-operator, dapr-sidecar-injector, dapr-sentry, and dapr-placement: Screenshot of the system service dashboard -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `grafana-sidecar-dashboard.json` template shows Dapr sidecar status, including sidecar health/resources, throughput/latency of HTTP and gRPC, Actor, mTLS, etc.: Screenshot of the sidecar dashboard -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The `grafana-actor-dashboard.json` template shows Dapr Sidecar status, actor invocation throughput/latency, timer/reminder triggers, and turn-based concurrnecy: Screenshot of the actor dashboard -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Pre-requisites -- [Setup Prometheus]({{}}) +- [Setup Prometheus]({{%ref prometheus.md%}}) ## Setup on Kubernetes @@ -169,7 +169,7 @@ First you need to connect Prometheus as a data source to Grafana. ## References -* [Dapr Observability]({{}}) +* [Dapr Observability]({{%ref observability-concept.md %}}) * [Prometheus Installation](https://github.com/prometheus-community/helm-charts) * [Prometheus on Kubernetes](https://github.com/coreos/kube-prometheus) * [Prometheus Query Language](https://prometheus.io/docs/prometheus/latest/querying/basics/) diff --git a/daprdocs/content/en/operations/observability/metrics/metrics-overview.md b/daprdocs/content/en/operations/observability/metrics/metrics-overview.md index 1df663ab705..8519078e209 100644 --- a/daprdocs/content/en/operations/observability/metrics/metrics-overview.md +++ b/daprdocs/content/en/operations/observability/metrics/metrics-overview.md @@ -72,7 +72,7 @@ spec: ## Configuring metrics for error codes -You can enable additional metrics for [Dapr API error codes](https://docs.dapr.io/reference/api/error_codes/) by setting `spec.metrics.recordErrorCodes` to `true`. Dapr APIs which communicate back to their caller may return standardized error codes. [A new metric called `error_code_total` is recorded]({{< ref errors-overview.md >}}), which allows monitoring of error codes triggered by application, code, and category. See [the `errorcodes` package](https://github.com/dapr/dapr/blob/master/pkg/messages/errorcodes/errorcodes.go) for specific codes and categories. +You can enable additional metrics for [Dapr API error codes](https://docs.dapr.io/reference/api/error_codes/) by setting `spec.metrics.recordErrorCodes` to `true`. Dapr APIs which communicate back to their caller may return standardized error codes. [A new metric called `error_code_total` is recorded]({{% ref errors-overview.md %}}), which allows monitoring of error codes triggered by application, code, and category. See [the `errorcodes` package](https://github.com/dapr/dapr/blob/master/pkg/messages/errorcodes/errorcodes.go) for specific codes and categories. Example configuration: ```yaml @@ -106,7 +106,7 @@ Example metric: When invoking Dapr using HTTP, metrics are created for each requested method by default. This can result in a high number of metrics, known as high cardinality, which can impact memory usage and CPU. -Path matching allows you to manage and control the cardinality of HTTP metrics in Dapr. This is an aggregation of metrics, so rather than having a metric for each event, you can reduce the number of metrics events and report an overall number. [Learn more about how to set the cardinality in configuration]({{< ref "configuration-overview.md#metrics" >}}). +Path matching allows you to manage and control the cardinality of HTTP metrics in Dapr. This is an aggregation of metrics, so rather than having a metric for each event, you can reduce the number of metrics events and report an overall number. [Learn more about how to set the cardinality in configuration]({{% ref "configuration-overview.md#metrics" %}}). This configuration is opt-in and is enabled via the Dapr configuration `spec.metrics.http.pathMatching`. When defined, it enables path matching, which standardizes specified paths for both metrics paths. This reduces the number of unique metrics paths, making metrics more manageable and reducing resource consumption in a controlled way. @@ -266,7 +266,7 @@ It is recommended to keep the number of latency buckets set to the default value Take note of the default latency values your applications are producing before configuring the number buckets. ### Customizing latency buckets to your scenario -Tailor the latency buckets to your needs, by modifying the `spec.metrics.latencyDistributionBuckets` field in the [Dapr configuration spec]({{< ref configuration-schema.md >}}) for your application(s). +Tailor the latency buckets to your needs, by modifying the `spec.metrics.latencyDistributionBuckets` field in the [Dapr configuration spec]({{% ref configuration-schema.md %}}) for your application(s). For example, if you aren't interested in extremely low latency values (1-10ms), you can group them in a single 10ms bucket. Similarly, you can group the high values in a single bucket (1000-5000ms), while keeping more detail in the middle range of values that you are most interested in. @@ -313,5 +313,5 @@ Using regular expressions to reduce metrics cardinality is considered legacy. We ## References -* [Howto: Run Prometheus locally]({{< ref prometheus.md >}}) -* [Howto: Set up Prometheus and Grafana for metrics]({{< ref grafana.md >}}) \ No newline at end of file +* [Howto: Run Prometheus locally]({{% ref prometheus.md %}}) +* [Howto: Set up Prometheus and Grafana for metrics]({{% ref grafana.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/observability/tracing/datadog.md b/daprdocs/content/en/operations/observability/tracing/datadog.md index 3742cf408f0..42e3325ceb0 100644 --- a/daprdocs/content/en/operations/observability/tracing/datadog.md +++ b/daprdocs/content/en/operations/observability/tracing/datadog.md @@ -12,7 +12,7 @@ Dapr captures metrics and traces that can be sent directly to Datadog through th Using the OpenTelemetry Collector Datadog exporter, you can configure Dapr to create traces for each application in your Kubernetes cluster and collect them in Datadog. -> Before you begin, [set up the OpenTelemetry Collector]({{< ref "open-telemetry-collector.md#setting-opentelemetry-collector" >}}). +> Before you begin, [set up the OpenTelemetry Collector]({{% ref "open-telemetry-collector.md#setting-opentelemetry-collector" %}}). 1. Add your Datadog API key to the `./deploy/opentelemetry-collector-generic-datadog.yaml` file in the `datadog` exporter configuration section: ```yaml diff --git a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-appinsights.md b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-appinsights.md index 008cfdbbb37..d736c14696f 100644 --- a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-appinsights.md +++ b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-appinsights.md @@ -10,7 +10,7 @@ Dapr integrates with [OpenTelemetry (OTEL) Collector](https://github.com/open-te ## Prerequisites -- [Install Dapr on Kubernetes]({{< ref kubernetes >}}) +- [Install Dapr on Kubernetes]({{% ref kubernetes %}}) - [Create an Application Insights resource](https://learn.microsoft.com/azure/azure-monitor/app/create-workspace-resource) and make note of your Application Insights connection string. ## Set up OTEL Collector to push to your App Insights instance @@ -80,4 +80,4 @@ Only operations going through Dapr API exposed by Dapr sidecar (for example, ser ## Related links - Try out the [observability quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/observability/README.md) -- Learn how to set [tracing configuration options]({{< ref "configuration-overview.md#tracing" >}}) +- Learn how to set [tracing configuration options]({{% ref "configuration-overview.md#tracing" %}}) diff --git a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-jaeger.md b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-jaeger.md index 98248d75502..6da25757ff3 100644 --- a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-jaeger.md +++ b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector-jaeger.md @@ -7,9 +7,9 @@ description: "How to push trace events to Jaeger distributed tracing platform, u --- While Dapr supports writing traces using OpenTelemetry (OTLP) and Zipkin protocols, Zipkin support for Jaeger has been deprecated in favor of OTLP. Although Jaeger supports OTLP directly, the recommended approach for production is to use the OpenTelemetry Collector to collect traces from Dapr and send them to Jaeger, allowing your application to quickly offload data and take advantage of features like retries, batching, and encryption. For more information, read the Open Telemetry Collector [documentation](https://opentelemetry.io/docs/collector/#when-to-use-a-collector). -{{< tabs Self-hosted Kubernetes >}} +{{% tabpane Self-hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} ## Configure Jaeger in self-hosted mode @@ -54,9 +54,9 @@ dapr run --app-id myapp --app-port 3000 node app.js --config config.yaml ### View traces To view traces in your browser, go to `http://localhost:16686` to see the Jaeger UI. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ## Configure Jaeger on Kubernetes with the OpenTelemetry Collector @@ -64,7 +64,7 @@ The following steps show you how to configure Dapr to send distributed tracing d ### Prerequisites -- [Install Dapr on Kubernetes]({{< ref kubernetes >}}) +- [Install Dapr on Kubernetes]({{% ref kubernetes %}}) - [Set up Jaeger](https://www.jaegertracing.io/docs/1.49/operator/) using the Jaeger Kubernetes Operator ### Set up OpenTelemetry Collector to push to Jaeger @@ -131,9 +131,9 @@ kubectl port-forward svc/jaeger-query 16686 -n observability In your browser, go to `http://localhost:16686` and you will see the Jaeger UI. ![jaeger](/images/jaeger_ui.png) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## References - [Jaeger Getting Started](https://www.jaegertracing.io/docs/1.49/getting-started/) diff --git a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector.md b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector.md index 51c75123c01..e812600d8a4 100644 --- a/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector.md +++ b/daprdocs/content/en/operations/observability/tracing/otel-collector/open-telemetry-collector.md @@ -14,7 +14,7 @@ Dapr can also write traces using the Zipkin protocol. Prior to supporting the OT ## Prerequisites -- [Install Dapr on Kubernetes]({{< ref kubernetes >}}) +- [Install Dapr on Kubernetes]({{% ref kubernetes %}}) - Verify your trace backends are already set up to receive traces - Review your OTEL Collector exporter's required parameters: - [`opentelemetry-collector-contrib/exporter`](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter) @@ -25,7 +25,7 @@ Dapr can also write traces using the Zipkin protocol. Prior to supporting the OT 1. Check out the [`open-telemetry-collector-generic.yaml`](/docs/open-telemetry-collector/open-telemetry-collector-generic.yaml). 1. Replace the `` section with the correct settings for your trace exporter. - - Refer to the OTEL Collector links in the [prerequisites section]({{< ref "#prerequisites.md" >}}) to determine the correct settings. + - Refer to the OTEL Collector links in the [prerequisites section]({{% ref "#prerequisites.md" %}}) to determine the correct settings. 1. Apply the configuration with: @@ -80,4 +80,4 @@ Deploy and run some applications. Wait for the trace to propagate to your tracin ## Related links - Try out the [observability quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/observability/README.md) -- Learn how to set [tracing configuration options]({{< ref "configuration-overview.md#tracing" >}}) \ No newline at end of file +- Learn how to set [tracing configuration options]({{% ref "configuration-overview.md#tracing" %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/observability/tracing/setup-tracing.md b/daprdocs/content/en/operations/observability/tracing/setup-tracing.md index 9a04f6bc90d..af67a7fcbf5 100644 --- a/daprdocs/content/en/operations/observability/tracing/setup-tracing.md +++ b/daprdocs/content/en/operations/observability/tracing/setup-tracing.md @@ -73,8 +73,8 @@ turns on tracing for the sidecar. ## Next steps Learn how to set up tracing with one of the following tools: -- [OTEL Collector]({{< ref otel-collector >}}) -- [New Relic]({{< ref newrelic.md >}}) -- [Jaeger]({{< ref open-telemetry-collector-jaeger.md >}}) -- [Zipkin]({{< ref zipkin.md >}}) -- [Datadog]({{< ref datadog.md >}}) \ No newline at end of file +- [OTEL Collector]({{% ref otel-collector %}}) +- [New Relic]({{% ref newrelic.md %}}) +- [Jaeger]({{% ref open-telemetry-collector-jaeger.md %}}) +- [Zipkin]({{% ref zipkin.md %}}) +- [Datadog]({{% ref datadog.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/observability/tracing/tracing-overview.md b/daprdocs/content/en/operations/observability/tracing/tracing-overview.md index a5194a73086..1f134c7baef 100644 --- a/daprdocs/content/en/operations/observability/tracing/tracing-overview.md +++ b/daprdocs/content/en/operations/observability/tracing/tracing-overview.md @@ -59,7 +59,7 @@ For example, `from a gateway service to a Dapr-enabled service A`. An external gateway ingress calls Dapr, which generates the trace headers and calls `service A`. `Service A` then calls `service B` and further Dapr-enabled services. -You must propagate the headers from `service A` to `service B`. For example: `Ingress -> service A -> propagate trace headers -> service B`. This is similar to [case 2]({{< ref "tracing-overview.md#multiple-sequential-service-invocation-calls" >}}). +You must propagate the headers from `service A` to `service B`. For example: `Ingress -> service A -> propagate trace headers -> service B`. This is similar to [case 2]({{% ref "tracing-overview.md#multiple-sequential-service-invocation-calls" %}}). ##### Pub/sub messages @@ -108,11 +108,11 @@ If you decide to generate trace headers yourself, there are three ways this can You can handcraft a trace context following [W3C trace context specifications](https://www.w3.org/TR/trace-context/) and pass them to a Dapr-enabled service. - Read [the trace context overview]({{< ref w3c-tracing-overview >}}) for more background and examples on W3C trace context and headers. + Read [the trace context overview]({{% ref w3c-tracing-overview %}}) for more background and examples on W3C trace context and headers. ## Related Links -- [Observability concepts]({{< ref observability-concept.md >}}) -- [W3C Trace Context for distributed tracing]({{< ref w3c-tracing-overview >}}) +- [Observability concepts]({{% ref observability-concept.md %}}) +- [W3C Trace Context for distributed tracing]({{% ref w3c-tracing-overview %}}) - [W3C Trace Context specification](https://www.w3.org/TR/trace-context/) - [Observability quickstart](https://github.com/dapr/quickstarts/tree/master/tutorials/observability) diff --git a/daprdocs/content/en/operations/observability/tracing/w3c-tracing-overview.md b/daprdocs/content/en/operations/observability/tracing/w3c-tracing-overview.md index 52eccbef4d5..1b6b49725ab 100644 --- a/daprdocs/content/en/operations/observability/tracing/w3c-tracing-overview.md +++ b/daprdocs/content/en/operations/observability/tracing/w3c-tracing-overview.md @@ -47,9 +47,9 @@ When a request arrives without a trace ID, Dapr creates a new one. Otherwise, it ### W3C trace headers These are the specific trace context headers that are generated and propagated by Dapr for HTTP and gRPC. -{{< tabs "HTTP" "gRPC" >}} +{{% tabpane "HTTP" "gRPC" %}} -{{% codetab %}} +{{% tab %}} Copy these headers when propagating a trace context header from an HTTP response to an HTTP request: @@ -73,18 +73,18 @@ tracestate: congo=t61rcWkgMzE [Learn more about the tracestate fields details](https://www.w3.org/TR/trace-context/#tracestate-header). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In the gRPC API calls, trace context is passed through `grpc-trace-bin` header. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related Links -- [Learn more about distributed tracing in Dapr]({{< ref tracing-overview.md >}}) +- [Learn more about distributed tracing in Dapr]({{% ref tracing-overview.md %}}) - [W3C Trace Context specification](https://www.w3.org/TR/trace-context/) diff --git a/daprdocs/content/en/operations/performance-and-scalability/perf-actors-activation.md b/daprdocs/content/en/operations/performance-and-scalability/perf-actors-activation.md index ddc604142fa..e463ae6c8bf 100644 --- a/daprdocs/content/en/operations/performance-and-scalability/perf-actors-activation.md +++ b/daprdocs/content/en/operations/performance-and-scalability/perf-actors-activation.md @@ -25,7 +25,7 @@ The actors API in Dapr sidecar will identify which hosts are registered for a gi This test uses invokes actors via Dapr's HTTP API directly. -For more information see [actors overview]({{< ref actors-overview.md >}}). +For more information see [actors overview]({{% ref actors-overview.md %}}). ### Kubernetes performance test setup @@ -53,4 +53,4 @@ Test parameters: * No sidecar restarts ## Related links -* For more information see [overview of Dapr on Kubernetes]({{< ref kubernetes-overview.md >}}) \ No newline at end of file +* For more information see [overview of Dapr on Kubernetes]({{% ref kubernetes-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/performance-and-scalability/perf-service-invocation.md b/daprdocs/content/en/operations/performance-and-scalability/perf-service-invocation.md index 3b201e56ecd..fc0816e8620 100644 --- a/daprdocs/content/en/operations/performance-and-scalability/perf-service-invocation.md +++ b/daprdocs/content/en/operations/performance-and-scalability/perf-service-invocation.md @@ -17,7 +17,7 @@ Dapr consists of a data plane, the sidecar that runs next to your app, and a con * Sentry (optional, control plane) * Placement (optional, control plane) -For more information see [overview of Dapr in self-hosted mode]({{< ref self-hosted-overview.md >}}). +For more information see [overview of Dapr in self-hosted mode]({{% ref self-hosted-overview.md %}}). ### Kubernetes components @@ -27,7 +27,7 @@ For more information see [overview of Dapr in self-hosted mode]({{< ref self-hos * Operator (control plane) * Sidecar Injector (control plane) -For more information see [overview of Dapr on Kubernetes]({{< ref kubernetes-overview.md >}}). +For more information see [overview of Dapr on Kubernetes]({{% ref kubernetes-overview.md %}}). ## Performance summary for Dapr v1.0 @@ -35,7 +35,7 @@ The service invocation API is a reverse proxy with built-in service discovery to Using service invocation you can call from HTTP to HTTP, HTTP to gRPC, gRPC to HTTP, and gRPC to gRPC. Dapr does not use HTTP for the communication between sidecars, always using gRPC, while carrying over the semantics of the protocol used when called from the app. Service invocation is the underlying mechanism of communicating with Dapr Actors. -For more information see [service invocation overview]({{< ref service-invocation-overview.md >}}). +For more information see [service invocation overview]({{% ref service-invocation-overview.md %}}). ### Kubernetes performance test setup @@ -76,7 +76,7 @@ There are a number of variants that affect the CPU and memory consumption for ea ### Data plane performance The Dapr sidecar uses 0.48 vCPU and 23Mb per 1000 requests per second. -End-to-end, the Dapr sidecars (client and server) add ~1.40 ms to the 90th percentile latency, and ~2.10 ms to the 99th percentile latency. End-to-end here is a call from one app to another app receiving a response. This is shown by steps 1-7 in [this diagram]({{< ref service-invocation-overview.md >}}). +End-to-end, the Dapr sidecars (client and server) add ~1.40 ms to the 90th percentile latency, and ~2.10 ms to the 99th percentile latency. End-to-end here is a call from one app to another app receiving a response. This is shown by steps 1-7 in [this diagram]({{% ref service-invocation-overview.md %}}). This performance is on par or better than commonly used service meshes. diff --git a/daprdocs/content/en/operations/resiliency/health-checks/app-health.md b/daprdocs/content/en/operations/resiliency/health-checks/app-health.md index cf7dacf3884..c288b46b512 100644 --- a/daprdocs/content/en/operations/resiliency/health-checks/app-health.md +++ b/daprdocs/content/en/operations/resiliency/health-checks/app-health.md @@ -59,18 +59,18 @@ The full list of options are listed in this table: | CLI flags | Kubernetes deployment annotation | Description | Default value | | ----------------------------- | ----------------------------------- | ----------- | ------------- | | `--enable-app-health-check` | `dapr.io/enable-app-health-check` | Boolean that enables the health checks | Disabled | -| [`--app-health-check-path`]({{< ref "app-health.md#health-check-paths" >}}) | `dapr.io/app-health-check-path` | Path that Dapr invokes for health probes when the app channel is HTTP (this value is ignored if the app channel is using gRPC) | `/healthz` | -| [`--app-health-probe-interval`]({{< ref "app-health.md#intervals-timeouts-and-thresholds" >}}) | `dapr.io/app-health-probe-interval` | Number of *seconds* between each health probe | `5` | -| [`--app-health-probe-timeout`]({{< ref "app-health.md#intervals-timeouts-and-thresholds" >}}) | `dapr.io/app-health-probe-timeout` | Timeout in *milliseconds* for health probe requests | `500` | -| [`--app-health-threshold`]({{< ref "app-health.md#intervals-timeouts-and-thresholds" >}}) | `dapr.io/app-health-threshold` | Max number of consecutive failures before the app is considered unhealthy | `3` | +| [`--app-health-check-path`]({{% ref "app-health.md#health-check-paths" %}}) | `dapr.io/app-health-check-path` | Path that Dapr invokes for health probes when the app channel is HTTP (this value is ignored if the app channel is using gRPC) | `/healthz` | +| [`--app-health-probe-interval`]({{% ref "app-health.md#intervals-timeouts-and-thresholds" %}}) | `dapr.io/app-health-probe-interval` | Number of *seconds* between each health probe | `5` | +| [`--app-health-probe-timeout`]({{% ref "app-health.md#intervals-timeouts-and-thresholds" %}}) | `dapr.io/app-health-probe-timeout` | Timeout in *milliseconds* for health probe requests | `500` | +| [`--app-health-threshold`]({{% ref "app-health.md#intervals-timeouts-and-thresholds" %}}) | `dapr.io/app-health-threshold` | Max number of consecutive failures before the app is considered unhealthy | `3` | -> See the [full Dapr arguments and annotations reference]({{< ref arguments-annotations-overview >}}) for all options and how to enable them. +> See the [full Dapr arguments and annotations reference]({{% ref arguments-annotations-overview %}}) for all options and how to enable them. Additionally, app health checks are impacted by the protocol used for the app channel, which is configured with the following flag or annotation: | CLI flag | Kubernetes deployment annotation | Description | Default value | | ----------------------------- | ----------------------------------- | ----------- | ------------- | -| [`--app-protocol`]({{< ref "app-health.md#health-check-paths" >}}) | `dapr.io/app-protocol` | Protocol used for the app channel. supported values are `http`, `grpc`, `https`, `grpcs`, and `h2c` (HTTP/2 Cleartext). | `http` | +| [`--app-protocol`]({{% ref "app-health.md#health-check-paths" %}}) | `dapr.io/app-protocol` | Protocol used for the app channel. supported values are `http`, `grpc`, `https`, `grpcs`, and `h2c` (HTTP/2 Cleartext). | `http` | {{% alert title="Note" color="primary" %}} A low app health probe timeout value can classify an application as unhealthy if it experiences a sudden high load, causing the response time to degrade. If this happens, increase the `dapr.io/app-health-probe-timeout` value. @@ -109,9 +109,9 @@ Thresholds only apply to failures. A single successful response is enough for Da ## Example -{{< tabs "Self-Hosted (CLI)" Kubernetes >}} +{{% tabpane "Self-Hosted (CLI)" Kubernetes %}} -{{% codetab %}} +{{% tab %}} Use the CLI flags with the `dapr run` command to enable app health checks: @@ -129,9 +129,9 @@ dapr run \ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To enable app health checks in Kubernetes, add the relevant annotations to your Deployment: @@ -159,9 +159,9 @@ spec: dapr.io/app-health-threshold: "2" ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Demo diff --git a/daprdocs/content/en/operations/resiliency/health-checks/sidecar-health.md b/daprdocs/content/en/operations/resiliency/health-checks/sidecar-health.md index 250c4befcc8..906ba622fdc 100644 --- a/daprdocs/content/en/operations/resiliency/health-checks/sidecar-health.md +++ b/daprdocs/content/en/operations/resiliency/health-checks/sidecar-health.md @@ -6,7 +6,7 @@ weight: 200 description: Dapr sidecar health checks --- -Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: +Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{% ref health_api.md %}}). With this endpoint, the *daprd* process, or sidecar, can be: - Probed for its overall health - Probed for Dapr sidecar readiness during initialization @@ -15,7 +15,7 @@ Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]( In this guide, you learn how the Dapr `/healthz` endpoint integrates with health probes from the application hosting platform (for example, Kubernetes) as well as the Dapr SDKs. {{% alert title="Note" color="primary" %}} -Dapr actors also have a health API endpoint where Dapr probes the application for a response to a signal from Dapr that the actor application is healthy and running. See [actor health API]({{< ref "actors_api.md#health-check" >}}). +Dapr actors also have a health API endpoint where Dapr probes the application for a response to a signal from Dapr that the actor application is healthy and running. See [actor health API]({{% ref "actors_api.md#health-check" %}}). {{% /alert %}} The following diagram shows the steps when a Dapr sidecar starts, the healthz endpoint and when the app channel is initialized. @@ -38,15 +38,15 @@ On the other hand, as shown by the green boundary lines in the diagram above, th - The Dapr HTTP port is available; _but,_ - The app channel is not yet established. -In the Dapr SDKs, the `waitForSidecar`/`wait_until_ready` method (depending on [which SDK you use]({{< ref "#sdks-supporting-outbound-health-endpoint" >}})) is used for this specific check with the `v1.0/healthz/outbound` endpoint. Using this behavior, instead of waiting for the app channel to be available (see: red boundary lines) with the `v1.0/healthz/` endpoint, Dapr waits for a successful response from `v1.0/healthz/outbound`. This approach enables your application to perform calls on the Dapr sidecar APIs before the app channel is initalized - for example, reading secrets with the secrets API. +In the Dapr SDKs, the `waitForSidecar`/`wait_until_ready` method (depending on [which SDK you use]({{% ref "#sdks-supporting-outbound-health-endpoint" %}})) is used for this specific check with the `v1.0/healthz/outbound` endpoint. Using this behavior, instead of waiting for the app channel to be available (see: red boundary lines) with the `v1.0/healthz/` endpoint, Dapr waits for a successful response from `v1.0/healthz/outbound`. This approach enables your application to perform calls on the Dapr sidecar APIs before the app channel is initalized - for example, reading secrets with the secrets API. If you are using the `waitForSidecar`/`wait_until_ready` method on the SDKs, then the correct initialization is performed. Otherwise, you can call the `v1.0/healthz/outbound` endpoint during initalization, and if successesful, you can call the Dapr sidecar APIs. ### SDKs supporting outbound health endpoint Currently, the `v1.0/healthz/outbound` endpoint is supported in the: -- [.NET SDK]({{< ref "dotnet-client.md#wait-for-sidecar" >}}) -- [Java SDK]({{< ref "java-client.md#wait-for-sidecar" >}}) -- [Python SDK]({{< ref "python-client.md#health-timeout" >}}) +- [.NET SDK]({{% ref "dotnet-client.md#wait-for-sidecar" %}}) +- [Java SDK]({{% ref "java-client.md#wait-for-sidecar" %}}) +- [Python SDK]({{% ref "python-client.md#health-timeout" %}}) - [JavaScript SDK](https://github.com/dapr/js-sdk/blob/4189a3d2ad6897406abd766f4ccbf2300c8f8852/src/interfaces/Client/IClientHealth.ts#L14) @@ -128,7 +128,7 @@ Dapr has its HTTP health endpoint `/v1.0/healthz` on port 3500. This can be used ## Delay graceful shutdown -Dapr accepts a [`dapr.io/block-shutdown-duration` annotation or `--dapr-block-shutdown-duration` CLI flag]({{< ref arguments-annotations-overview.md >}}), which delays the full shutdown procedure for the specified duration, or until the app reports as unhealthy, whichever is sooner. +Dapr accepts a [`dapr.io/block-shutdown-duration` annotation or `--dapr-block-shutdown-duration` CLI flag]({{% ref arguments-annotations-overview.md %}}), which delays the full shutdown procedure for the specified duration, or until the app reports as unhealthy, whichever is sooner. During this period, all subscriptions and input bindings are closed. This is useful for applications that need to use the Dapr APIs as part of their own shutdown procedure. @@ -139,10 +139,10 @@ Applicable annotations or CLI flags include: - `--dapr-graceful-shutdown-seconds`/`dapr.io/graceful-shutdown-seconds` - `--dapr-block-shutdown-duration`/`dapr.io/block-shutdown-duration` -Learn more about these and how to use them in the [Annotations and arguments guide.]({{< ref arguments-annotations-overview.md >}}) +Learn more about these and how to use them in the [Annotations and arguments guide.]({{% ref arguments-annotations-overview.md %}}) ## Related links -- [Endpoint health API]({{< ref health_api.md >}}) -- [Actor health API]({{< ref "actors_api.md#health-check" >}}) +- [Endpoint health API]({{% ref health_api.md %}}) +- [Actor health API]({{% ref "actors_api.md#health-check" %}}) - [Kubernetes probe configuration parameters](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) diff --git a/daprdocs/content/en/operations/resiliency/policies/_index.md b/daprdocs/content/en/operations/resiliency/policies/_index.md index 40cbd084b26..c46eee75cef 100644 --- a/daprdocs/content/en/operations/resiliency/policies/_index.md +++ b/daprdocs/content/en/operations/resiliency/policies/_index.md @@ -6,4 +6,4 @@ weight: 200 description: "Configure resiliency policies for timeouts, retries, and circuit breakers" --- -Define timeouts, retries, and circuit breaker policies under `policies`. Each policy is given a name so you can refer to them from the [`targets` section in the resiliency spec]({{< ref targets.md >}}). +Define timeouts, retries, and circuit breaker policies under `policies`. Each policy is given a name so you can refer to them from the [`targets` section in the resiliency spec]({{% ref targets.md %}}). diff --git a/daprdocs/content/en/operations/resiliency/policies/circuit-breakers.md b/daprdocs/content/en/operations/resiliency/policies/circuit-breakers.md index afa4168126f..e207cf2a674 100644 --- a/daprdocs/content/en/operations/resiliency/policies/circuit-breakers.md +++ b/daprdocs/content/en/operations/resiliency/policies/circuit-breakers.md @@ -37,13 +37,13 @@ spec: | `trip` | A [Common Expression Language (CEL)](https://github.com/google/cel-spec) statement that is evaluated by the circuit breaker. When the statement evaluates to true, the circuit breaker trips and becomes open. Defaults to `consecutiveFailures > 5`. Other possible values are `requests` and `totalFailures` where `requests` represents the number of either successful or failed calls before the circuit opens and `totalFailures` represents the total (not necessarily consecutive) number of failed attempts before the circuit opens. Example: `requests > 5` and `totalFailures >3`.| ## Next steps -- [Learn more about default resiliency policies]({{< ref default-policies.md >}}) +- [Learn more about default resiliency policies]({{% ref default-policies.md %}}) - Learn more about: - - [Retry policies]({{< ref retries-overview.md >}}) - - [Timeout policies]({{< ref timeouts.md >}}) + - [Retry policies]({{% ref retries-overview.md %}}) + - [Timeout policies]({{% ref timeouts.md %}}) ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) diff --git a/daprdocs/content/en/operations/resiliency/policies/default-policies.md b/daprdocs/content/en/operations/resiliency/policies/default-policies.md index 2d8f622f11b..837abf8f6a6 100644 --- a/daprdocs/content/en/operations/resiliency/policies/default-policies.md +++ b/daprdocs/content/en/operations/resiliency/policies/default-policies.md @@ -40,7 +40,7 @@ If none exists, the policies are applied from most specific to most broad. ## How default policies and built-in retries work together -In the case of the [built-in retries]({{< ref override-default-retries.md >}}), default policies do not stop the built-in retry policies from running. Both are used together but only under specific circumstances. +In the case of the [built-in retries]({{% ref override-default-retries.md %}}), default policies do not stop the built-in retry policies from running. Both are used together but only under specific circumstances. For service and actor invocation, the built-in retries deal specifically with issues connecting to the remote sidecar (when needed). As these are important to the stability of the Dapr runtime, they are not disabled **unless** a named policy is specifically referenced for an operation. In some instances, there may be additional retries from both the built-in retry and the default retry policy, but this prevents an overly weak default policy from reducing the sidecar's availability/success rate. @@ -164,10 +164,10 @@ The table below is a break down of which policies are applied when attempting to ## Next steps -[Learn how to override default retry policies.]({{< ref override-default-retries.md >}}) +[Learn how to override default retry policies.]({{% ref override-default-retries.md %}}) ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) \ No newline at end of file +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/resiliency/policies/retries/override-default-retries.md b/daprdocs/content/en/operations/resiliency/policies/retries/override-default-retries.md index 949c251f01d..a2ca0da38d4 100644 --- a/daprdocs/content/en/operations/resiliency/policies/retries/override-default-retries.md +++ b/daprdocs/content/en/operations/resiliency/policies/retries/override-default-retries.md @@ -6,7 +6,7 @@ weight: 20 description: "Learn how to override the default retry resiliency policies for specific APIs" --- -Dapr provides [default retries]({{< ref default-policies.md >}}) for any unsuccessful request, such as failures and transient errors. Within a resiliency spec, you have the option to override Dapr's default retry logic by defining policies with reserved, named keywords. For example, defining a policy with the name `DaprBuiltInServiceRetries`, overrides the default retries for failures between sidecars via service-to-service requests. Policy overrides are not applied to specific targets. +Dapr provides [default retries]({{% ref default-policies.md %}}) for any unsuccessful request, such as failures and transient errors. Within a resiliency spec, you have the option to override Dapr's default retry logic by defining policies with reserved, named keywords. For example, defining a policy with the name `DaprBuiltInServiceRetries`, overrides the default retries for failures between sidecars via service-to-service requests. Policy overrides are not applied to specific targets. > Note: Although you can override default values with more robust retries, you cannot override with lesser values than the provided default value, or completely remove default retries. This prevents unexpected downtime. @@ -47,5 +47,5 @@ spec: ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) diff --git a/daprdocs/content/en/operations/resiliency/policies/retries/retries-overview.md b/daprdocs/content/en/operations/resiliency/policies/retries/retries-overview.md index 121f5ba027c..bf5ca57eb62 100644 --- a/daprdocs/content/en/operations/resiliency/policies/retries/retries-overview.md +++ b/daprdocs/content/en/operations/resiliency/policies/retries/retries-overview.md @@ -14,10 +14,10 @@ In these cases, configuring `retries` can either: Retries and timeouts work together, with timeouts ensuring your system fails fast when needed, and retries recovering from temporary glitches. -Dapr provides [default resiliency policies]({{< ref default-policies.md >}}), which you can [overwrite with user-defined retry policies.]({{< ref override-default-retries.md >}}) +Dapr provides [default resiliency policies]({{% ref default-policies.md %}}), which you can [overwrite with user-defined retry policies.]({{% ref override-default-retries.md %}}) {{% alert title="Important" color="warning" %}} -Each [pub/sub component]({{< ref supported-pubsub >}}) has its own built-in retry behaviors. Explicity applying a Dapr resiliency policy doesn't override these implicit retry policies. Rather, the resiliency policy augments the built-in retry, which can cause repetitive clustering of messages. +Each [pub/sub component]({{% ref supported-pubsub %}}) has its own built-in retry behaviors. Explicity applying a Dapr resiliency policy doesn't override these implicit retry policies. Rather, the resiliency policy augments the built-in retry, which can cause repetitive clustering of messages. {{% /alert %}} ## Retry policy format @@ -141,13 +141,13 @@ Watch a demo presented during [Diagrid's Dapr v1.15 celebration](https://www.dia ## Next steps - [Learn how to override default retry policies for specific APIs.]({[< ref override-default-retries.md >]}) -- [Learn how to target your retry policies from the resiliency spec.]({{< ref targets.md >}}) +- [Learn how to target your retry policies from the resiliency spec.]({{% ref targets.md %}}) - Learn more about: - - [Timeout policies]({{< ref timeouts.md >}}) - - [Circuit breaker policies]({{< ref circuit-breakers.md >}}) + - [Timeout policies]({{% ref timeouts.md %}}) + - [Circuit breaker policies]({{% ref circuit-breakers.md %}}) ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) diff --git a/daprdocs/content/en/operations/resiliency/policies/timeouts.md b/daprdocs/content/en/operations/resiliency/policies/timeouts.md index 619be3db553..a24d38cc559 100644 --- a/daprdocs/content/en/operations/resiliency/policies/timeouts.md +++ b/daprdocs/content/en/operations/resiliency/policies/timeouts.md @@ -38,13 +38,13 @@ spec: ## Next steps -- [Learn more about default resiliency policies]({{< ref default-policies.md >}}) +- [Learn more about default resiliency policies]({{% ref default-policies.md %}}) - Learn more about: - - [Retry policies]({{< ref retries-overview.md >}}) - - [Circuit breaker policies]({{< ref circuit-breakers.md >}}) + - [Retry policies]({{% ref retries-overview.md %}}) + - [Circuit breaker policies]({{% ref circuit-breakers.md %}}) ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) diff --git a/daprdocs/content/en/operations/resiliency/resiliency-overview.md b/daprdocs/content/en/operations/resiliency/resiliency-overview.md index c92a2c94fff..1d6b7a702f7 100644 --- a/daprdocs/content/en/operations/resiliency/resiliency-overview.md +++ b/daprdocs/content/en/operations/resiliency/resiliency-overview.md @@ -6,7 +6,7 @@ weight: 100 description: "Configure Dapr retries, timeouts, and circuit breakers" --- -Dapr provides the capability for defining and applying fault tolerance resiliency policies via a [resiliency spec]({{< ref "resiliency-overview.md#complete-example-policy" >}}). Resiliency specs are saved in the same location as components specs and are applied when the Dapr sidecar starts. The sidecar determines how to apply resiliency policies to your Dapr API calls. +Dapr provides the capability for defining and applying fault tolerance resiliency policies via a [resiliency spec]({{% ref "resiliency-overview.md#complete-example-policy" %}}). Resiliency specs are saved in the same location as components specs and are applied when the Dapr sidecar starts. The sidecar determines how to apply resiliency policies to your Dapr API calls. - **In self-hosted mode:** The resiliency spec must be named `resiliency.yaml`. - **In Kubernetes:** Dapr finds the named resiliency specs used by your application. @@ -15,13 +15,13 @@ Dapr provides the capability for defining and applying fault tolerance resilienc You can configure Dapr resiliency policies with the following parts: - Metadata defining where the policy applies (like namespace and scope) - Policies specifying the resiliency name and behaviors, like: - - [Timeouts]({{< ref timeouts.md >}}) - - [Retries]({{< ref retries-overview.md >}}) - - [Circuit breakers]({{< ref circuit-breakers.md >}}) + - [Timeouts]({{% ref timeouts.md %}}) + - [Retries]({{% ref retries-overview.md %}}) + - [Circuit breakers]({{% ref circuit-breakers.md %}}) - Targets determining which interactions these policies act on, including: - - [Apps]({{< ref "targets.md#apps" >}}) via service invocation - - [Components]({{< ref "targets.md#components" >}}) - - [Actors]({{< ref "targets.md#actors" >}}) + - [Apps]({{% ref "targets.md#apps" %}}) via service invocation + - [Components]({{% ref "targets.md#components" %}}) + - [Actors]({{% ref "targets.md#actors" %}}) Once defined, you can apply this configuration to your local Dapr components directory, or to your Kubernetes cluster using: @@ -29,7 +29,7 @@ Once defined, you can apply this configuration to your local Dapr components dir kubectl apply -f .yaml ``` -Additionally, you can scope resiliency policies [to specific apps]({{< ref "component-scopes.md#application-access-to-components-with-scopes" >}}). +Additionally, you can scope resiliency policies [to specific apps]({{% ref "component-scopes.md#application-access-to-components-with-scopes" %}}). > See [known limitations](#limitations). @@ -193,12 +193,12 @@ Learn more about [how to write resilient microservices with Dapr](https://youtu. ## Next steps Learn more about resiliency policies and targets: - Policies - - [Timeouts]({{< ref "timeouts.md" >}}) - - [Retries]({{< ref "retries-overview.md" >}}) - - [Circuit breakers]({{< ref circuit-breakers.md >}}) - - [Targets]({{< ref "targets.md" >}}) + - [Timeouts]({{% ref "timeouts.md" %}}) + - [Retries]({{% ref "retries-overview.md" %}}) + - [Circuit breakers]({{% ref circuit-breakers.md %}}) + - [Targets]({{% ref "targets.md" %}}) ## Related links Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) \ No newline at end of file +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/resiliency/targets.md b/daprdocs/content/en/operations/resiliency/targets.md index 15090b2e0ba..ff85300ddc9 100644 --- a/daprdocs/content/en/operations/resiliency/targets.md +++ b/daprdocs/content/en/operations/resiliency/targets.md @@ -17,7 +17,7 @@ Named policies are applied to targets. Dapr supports three target types that app With the `apps` target, you can apply `retry`, `timeout`, and `circuitBreaker` policies to service invocation calls between Dapr apps. Under `targets/apps`, policies are applied to each target service's `app-id`. The policies are invoked when a failure occurs in communication between sidecars, as shown in the diagram below. -> Dapr provides [built-in service invocation retries]({{< ref "service-invocation-overview.md#retries" >}}), so any applied `retry` policies are additional. +> Dapr provides [built-in service invocation retries]({{% ref "service-invocation-overview.md#retries" %}}), so any applied `retry` policies are additional. Diagram showing service invocation resiliency @@ -133,5 +133,5 @@ spec: ## Next steps Try out one of the Resiliency quickstarts: -- [Resiliency: Service-to-service]({{< ref resiliency-serviceinvo-quickstart.md >}}) -- [Resiliency: State Management]({{< ref resiliency-state-quickstart.md >}}) \ No newline at end of file +- [Resiliency: Service-to-service]({{% ref resiliency-serviceinvo-quickstart.md %}}) +- [Resiliency: State Management]({{% ref resiliency-state-quickstart.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/security/api-token.md b/daprdocs/content/en/operations/security/api-token.md index 2722f67a5fc..d91a1490fd6 100644 --- a/daprdocs/content/en/operations/security/api-token.md +++ b/daprdocs/content/en/operations/security/api-token.md @@ -90,7 +90,7 @@ kubectl rollout restart deployment/ --namespace **Note:** The Dapr SDKs read the [DAPR_API_TOKEN]({{< ref environment >}}) environment variable and set it for you by default. +> **Note:** The Dapr SDKs read the [DAPR_API_TOKEN]({{% ref environment %}}) environment variable and set it for you by default. @@ -143,5 +143,5 @@ export DAPR_API_TOKEN= ## Related Links -- Learn about [Dapr security concepts]({{< ref security-concept.md >}}) -- Learn [HowTo authenticate requests from Dapr using token authentication]({{< ref app-api-token.md >}}) +- Learn about [Dapr security concepts]({{% ref security-concept.md %}}) +- Learn [HowTo authenticate requests from Dapr using token authentication]({{% ref app-api-token.md %}}) diff --git a/daprdocs/content/en/operations/security/app-api-token.md b/daprdocs/content/en/operations/security/app-api-token.md index 9a9264ed267..9c6739907c0 100644 --- a/daprdocs/content/en/operations/security/app-api-token.md +++ b/daprdocs/content/en/operations/security/app-api-token.md @@ -135,5 +135,5 @@ export APP_API_TOKEN= ## Related Links -- Learn about [Dapr security concepts]({{< ref security-concept.md >}}) -- Learn [HowTo Enable API token authentication in Dapr]({{< ref api-token.md >}}) +- Learn about [Dapr security concepts]({{% ref security-concept.md %}}) +- Learn [HowTo Enable API token authentication in Dapr]({{% ref api-token.md %}}) diff --git a/daprdocs/content/en/operations/security/mtls.md b/daprdocs/content/en/operations/security/mtls.md index 2bd7ec2c386..1882adfd718 100644 --- a/daprdocs/content/en/operations/security/mtls.md +++ b/daprdocs/content/en/operations/security/mtls.md @@ -10,7 +10,7 @@ Dapr supports in-transit encryption of communication between Dapr instances usin Dapr allows operators and developers to bring in their own certificates, or instead let Dapr automatically create and persist self-signed root and issuer certificates. -For detailed information on mTLS, read the [security concepts section]({{< ref "security-concept.md" >}}). +For detailed information on mTLS, read the [security concepts section]({{% ref "security-concept.md" %}}). If custom certificates have not been provided, Dapr automatically creates and persist self-signed certs valid for one year. In Kubernetes, the certs are persisted to a secret that resides in the namespace of the Dapr system pods, accessible only to them. @@ -385,9 +385,9 @@ spec: In addition to the Dapr configuration, you also need to provide the TLS certificates to each Dapr sidecar instance. You can do so by setting the following environment variables before running the Dapr instance: -{{< tabs "Linux/MacOS" Windows >}} +{{% tabpane "Linux/MacOS" Windows %}} -{{% codetab %}} +{{% tab %}} ```bash export DAPR_TRUST_ANCHORS=`cat $HOME/.dapr/certs/ca.crt` export DAPR_CERT_CHAIN=`cat $HOME/.dapr/certs/issuer.crt` @@ -395,9 +395,9 @@ export DAPR_CERT_KEY=`cat $HOME/.dapr/certs/issuer.key` export NAMESPACE=default ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```powershell $env:DAPR_TRUST_ANCHORS=$(Get-Content -raw $env:USERPROFILE\.dapr\certs\ca.crt) $env:DAPR_CERT_CHAIN=$(Get-Content -raw $env:USERPROFILE\.dapr\certs\issuer.crt) @@ -405,9 +405,9 @@ $env:DAPR_CERT_KEY=$(Get-Content -raw $env:USERPROFILE\.dapr\certs\issuer.key) $env:NAMESPACE="default" ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} If using the Dapr CLI, point Dapr to the config file above to run the Dapr instance with mTLS enabled: diff --git a/daprdocs/content/en/operations/security/oauth.md b/daprdocs/content/en/operations/security/oauth.md index ab29634ceaf..3708c7aaa89 100644 --- a/daprdocs/content/en/operations/security/oauth.md +++ b/daprdocs/content/en/operations/security/oauth.md @@ -6,7 +6,7 @@ weight: 2000 description: "Enable OAuth authorization on application endpoints for your web APIs" --- -Dapr OAuth 2.0 [middleware]({{< ref "middleware.md" >}}) allows you to enable [OAuth](https://oauth.net/2/) authorization on Dapr endpoints for your web APIs using the [Authorization Code Grant flow](https://tools.ietf.org/html/rfc6749#section-4.1). +Dapr OAuth 2.0 [middleware]({{% ref "middleware.md" %}}) allows you to enable [OAuth](https://oauth.net/2/) authorization on Dapr endpoints for your web APIs using the [Authorization Code Grant flow](https://tools.ietf.org/html/rfc6749#section-4.1). You can also inject authorization tokens into your endpoint APIs which can be used for authorization towards external APIs called by your APIs using the [Client Credentials Grant flow](https://tools.ietf.org/html/rfc6749#section-4.4). When the middleware is enabled any method invocation through Dapr needs to be authorized before getting passed to the user code. @@ -83,8 +83,8 @@ spec: ### Define a custom pipeline for an Authorization Code Grant -To use the OAuth middleware (Authorization Code), you should create a [custom pipeline]({{< ref "middleware.md" >}}) -using [Dapr configuration]({{< ref "configuration-overview" >}}), as shown in the following sample: +To use the OAuth middleware (Authorization Code), you should create a [custom pipeline]({{% ref "middleware.md" %}}) +using [Dapr configuration]({{% ref "configuration-overview" %}}), as shown in the following sample: ```yaml apiVersion: dapr.io/v1alpha1 @@ -141,8 +141,8 @@ spec: ### Define a custom pipeline for a Client Credentials Grant -To use the OAuth middleware (Client Credentials), you should create a [custom pipeline]({{< ref "middleware.md" >}}) -using [Dapr configuration]({{< ref "configuration-overview.md" >}}), as shown in the following sample: +To use the OAuth middleware (Client Credentials), you should create a [custom pipeline]({{% ref "middleware.md" %}}) +using [Dapr configuration]({{% ref "configuration-overview.md" %}}), as shown in the following sample: ```yaml apiVersion: dapr.io/v1alpha1 diff --git a/daprdocs/content/en/operations/support/alpha-beta-apis.md b/daprdocs/content/en/operations/support/alpha-beta-apis.md index 7516bfc47d5..f8dd6e3ce11 100644 --- a/daprdocs/content/en/operations/support/alpha-beta-apis.md +++ b/daprdocs/content/en/operations/support/alpha-beta-apis.md @@ -10,13 +10,13 @@ description: "List of current alpha and beta APIs" | Building block/API | gRPC | HTTP | Description | Documentation | Version introduced | | ------------------ | ---- | ---- | ----------- | ------------- | ------------------ | -| Query State | [Query State proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L44) | `v1.0-alpha1/state/statestore/query` | The state query API enables you to retrieve, filter, and sort the key/value data stored in state store components. | [Query State API]({{< ref "howto-state-query-api.md" >}}) | v1.5 | -| Distributed Lock | [Lock proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L112) | `/v1.0-alpha1/lock` | The distributed lock API enables you to take a lock on a resource. | [Distributed Lock API]({{< ref "distributed-lock-api-overview.md" >}}) | v1.8 | -| Bulk Publish | [Bulk publish proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L59) | `v1.0-alpha1/publish/bulk` | The bulk publish API allows you to publish multiple messages to a topic in a single request. | [Bulk Publish and Subscribe API]({{< ref "pubsub-bulk.md" >}}) | v1.10 | -| Bulk Subscribe | [Bulk subscribe proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/appcallback.proto#L57) | N/A | The bulk subscribe application callback receives multiple messages from a topic in a single call. | [Bulk Publish and Subscribe API]({{< ref "pubsub-bulk.md" >}}) | v1.10 | -| Cryptography | [Crypto proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L118) | `v1.0-alpha1/crypto` | The cryptography API enables you to perform **high level** cryptography operations for encrypting and decrypting messages. | [Cryptography API]({{< ref "cryptography-overview.md" >}}) | v1.11 | -| Jobs | [Jobs proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L212-219) | `v1.0-alpha1/jobs` | The jobs API enables you to schedule and orchestrate jobs. | [Jobs API]({{< ref "jobs-overview.md" >}}) | v1.14 | -| Conversation | [Conversation proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L221-222) | `v1.0-alpha1/conversation` | Converse between different large language models using the conversation API. | [Conversation API]({{< ref "conversation-overview.md" >}}) | v1.15 | +| Query State | [Query State proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L44) | `v1.0-alpha1/state/statestore/query` | The state query API enables you to retrieve, filter, and sort the key/value data stored in state store components. | [Query State API]({{% ref "howto-state-query-api.md" %}}) | v1.5 | +| Distributed Lock | [Lock proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L112) | `/v1.0-alpha1/lock` | The distributed lock API enables you to take a lock on a resource. | [Distributed Lock API]({{% ref "distributed-lock-api-overview.md" %}}) | v1.8 | +| Bulk Publish | [Bulk publish proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L59) | `v1.0-alpha1/publish/bulk` | The bulk publish API allows you to publish multiple messages to a topic in a single request. | [Bulk Publish and Subscribe API]({{% ref "pubsub-bulk.md" %}}) | v1.10 | +| Bulk Subscribe | [Bulk subscribe proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/appcallback.proto#L57) | N/A | The bulk subscribe application callback receives multiple messages from a topic in a single call. | [Bulk Publish and Subscribe API]({{% ref "pubsub-bulk.md" %}}) | v1.10 | +| Cryptography | [Crypto proto](https://github.com/dapr/dapr/blob/5aba3c9aa4ea9b3f388df125f9c66495b43c5c9e/dapr/proto/runtime/v1/dapr.proto#L118) | `v1.0-alpha1/crypto` | The cryptography API enables you to perform **high level** cryptography operations for encrypting and decrypting messages. | [Cryptography API]({{% ref "cryptography-overview.md" %}}) | v1.11 | +| Jobs | [Jobs proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L212-219) | `v1.0-alpha1/jobs` | The jobs API enables you to schedule and orchestrate jobs. | [Jobs API]({{% ref "jobs-overview.md" %}}) | v1.14 | +| Conversation | [Conversation proto](https://github.com/dapr/dapr/blob/master/dapr/proto/runtime/v1/dapr.proto#L221-222) | `v1.0-alpha1/conversation` | Converse between different large language models using the conversation API. | [Conversation API]({{% ref "conversation-overview.md" %}}) | v1.15 | ## Beta APIs @@ -25,4 +25,4 @@ No current beta APIs. ## Related links -[Learn more about the Alpha, Beta, and Stable lifecycle stages.]({{< ref "certification-lifecycle.md#certification-levels" >}}) \ No newline at end of file +[Learn more about the Alpha, Beta, and Stable lifecycle stages.]({{% ref "certification-lifecycle.md#certification-levels" %}}) \ No newline at end of file diff --git a/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md b/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md index 995f622878a..a0895537cc3 100644 --- a/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md +++ b/daprdocs/content/en/operations/support/breaking-changes-and-deprecations.md @@ -60,10 +60,10 @@ After announcing a future breaking change, the change will happen in 2 releases | Feature | Deprecation announcement | Removal | |-----------------------|-----------------------|------------------------- | -| GET /v1.0/shutdown API (Users should use [POST API]({{< ref kubernetes-job.md >}}) instead) | 1.2.0 | 1.4.0 | +| GET /v1.0/shutdown API (Users should use [POST API]({{% ref kubernetes-job.md %}}) instead) | 1.2.0 | 1.4.0 | | Java domain builder classes deprecated (Users should use [setters](https://github.com/dapr/java-sdk/issues/587) instead) | Java SDK 1.3.0 | Java SDK 1.5.0 | -| Service invocation will no longer provide a default content type header of `application/json` when no content-type is specified. You must explicitly [set a content-type header]({{< ref "service_invocation_api.md#request-contents" >}}) for service invocation if your invoked apps rely on this header. | 1.7.0 | 1.9.0 | -| gRPC service invocation using `invoke` method is deprecated. Use proxy mode service invocation instead. See [How-To: Invoke services using gRPC ]({{< ref howto-invoke-services-grpc.md >}}) to use the proxy mode.| 1.9.0 | 1.10.0 | +| Service invocation will no longer provide a default content type header of `application/json` when no content-type is specified. You must explicitly [set a content-type header]({{% ref "service_invocation_api.md#request-contents" %}}) for service invocation if your invoked apps rely on this header. | 1.7.0 | 1.9.0 | +| gRPC service invocation using `invoke` method is deprecated. Use proxy mode service invocation instead. See [How-To: Invoke services using gRPC ]({{% ref howto-invoke-services-grpc.md %}}) to use the proxy mode.| 1.9.0 | 1.10.0 | | The CLI flag `--app-ssl` (in both the Dapr CLI and daprd) has been deprecated in favor of using `--app-protocol` with values `https` or `grpcs`. [daprd:6158](https://github.com/dapr/dapr/issues/6158) [cli:1267](https://github.com/dapr/cli/issues/1267)| 1.11.0 | 1.13.0 | | Hazelcast PubSub Component | 1.9.0 | 1.11.0 | | Twitter Binding Component | 1.10.0 | 1.11.0 | @@ -72,5 +72,5 @@ After announcing a future breaking change, the change will happen in 2 releases ## Related links -- Read the [Versioning Policy]({{< ref support-versioning.md >}}) -- Read the [Supported Releases]({{< ref support-release-policy.md >}}) +- Read the [Versioning Policy]({{% ref support-versioning.md %}}) +- Read the [Supported Releases]({{% ref support-release-policy.md %}}) diff --git a/daprdocs/content/en/operations/support/support-preview-features.md b/daprdocs/content/en/operations/support/support-preview-features.md index 1eaf253c393..73139b9cd41 100644 --- a/daprdocs/content/en/operations/support/support-preview-features.md +++ b/daprdocs/content/en/operations/support/support-preview-features.md @@ -7,7 +7,7 @@ description: "List of current preview features" --- Preview features in Dapr are considered experimental when they are first released. -Runtime preview features require explicit opt-in in order to be used. The runtime opt-in is specified in a preview setting feature in Dapr's application configuration. See [How-To: Enable preview features]({{}}) for more information. +Runtime preview features require explicit opt-in in order to be used. The runtime opt-in is specified in a preview setting feature in Dapr's application configuration. See [How-To: Enable preview features]({{%ref preview-features%}}) for more information. For CLI there is no explicit opt-in, just the version that this was first made available. @@ -15,10 +15,10 @@ For CLI there is no explicit opt-in, just the version that this was first made a | Feature | Description | Setting | Documentation | Version introduced | | --- | --- | --- | --- | --- | -| **Pluggable components** | Allows creating self-hosted gRPC-based components written in any language that supports gRPC. The following component APIs are supported: State stores, Pub/sub, Bindings | N/A | [Pluggable components concept]({{}})| v1.9 | -| **Multi-App Run for Kubernetes** | Configure multiple Dapr applications from a single configuration file and run from a single command on Kubernetes | `dapr run -k -f` | [Multi-App Run]({{< ref multi-app-dapr-run.md >}}) | v1.12 | -| **Cryptography** | Encrypt or decrypt data without having to manage secrets keys | N/A | [Cryptography concept]({{< ref "components-concept#cryptography" >}})| v1.11 | -| **Actor State TTL** | Allow actors to save records to state stores with Time To Live (TTL) set to automatically clean up old data. In its current implementation, actor state with TTL may not be reflected correctly by clients, read [Actor State Transactions]({{< ref actors_api.md >}}) for more information. | `ActorStateTTL` | [Actor State Transactions]({{< ref actors_api.md >}}) | v1.11 | -| **Component Hot Reloading** | Allows for Dapr-loaded components to be "hot reloaded". A component spec is reloaded when it is created/updated/deleted in Kubernetes or on file when running in self-hosted mode. Ignores changes to actor state stores and workflow backends. | `HotReload`| [Hot Reloading]({{< ref components-concept.md >}}) | v1.13 | -| **Subscription Hot Reloading** | Allows for declarative subscriptions to be "hot reloaded". A subscription is reloaded either when it is created/updated/deleted in Kubernetes, or on file in self-hosted mode. In-flight messages are unaffected when reloading. | `HotReload`| [Hot Reloading]({{< ref "subscription-methods.md#declarative-subscriptions" >}}) | v1.14 | -| **Scheduler Actor Reminders** | Scheduler actor reminders are actor reminders stored in the Scheduler control plane service, as opposed to the Placement control plane service actor reminder system. The `SchedulerReminders` preview feature defaults to `true`, but you can disable Scheduler actor reminders by setting it to `false`. | `SchedulerReminders`| [Scheduler actor reminders]({{< ref "scheduler.md#actor-reminders" >}}) | v1.14 | \ No newline at end of file +| **Pluggable components** | Allows creating self-hosted gRPC-based components written in any language that supports gRPC. The following component APIs are supported: State stores, Pub/sub, Bindings | N/A | [Pluggable components concept]({{%ref "components-concept#pluggable-components" %}})| v1.9 | +| **Multi-App Run for Kubernetes** | Configure multiple Dapr applications from a single configuration file and run from a single command on Kubernetes | `dapr run -k -f` | [Multi-App Run]({{% ref multi-app-dapr-run.md %}}) | v1.12 | +| **Cryptography** | Encrypt or decrypt data without having to manage secrets keys | N/A | [Cryptography concept]({{% ref "components-concept#cryptography" %}})| v1.11 | +| **Actor State TTL** | Allow actors to save records to state stores with Time To Live (TTL) set to automatically clean up old data. In its current implementation, actor state with TTL may not be reflected correctly by clients, read [Actor State Transactions]({{% ref actors_api.md %}}) for more information. | `ActorStateTTL` | [Actor State Transactions]({{% ref actors_api.md %}}) | v1.11 | +| **Component Hot Reloading** | Allows for Dapr-loaded components to be "hot reloaded". A component spec is reloaded when it is created/updated/deleted in Kubernetes or on file when running in self-hosted mode. Ignores changes to actor state stores and workflow backends. | `HotReload`| [Hot Reloading]({{% ref components-concept.md %}}) | v1.13 | +| **Subscription Hot Reloading** | Allows for declarative subscriptions to be "hot reloaded". A subscription is reloaded either when it is created/updated/deleted in Kubernetes, or on file in self-hosted mode. In-flight messages are unaffected when reloading. | `HotReload`| [Hot Reloading]({{% ref "subscription-methods.md#declarative-subscriptions" %}}) | v1.14 | +| **Scheduler Actor Reminders** | Scheduler actor reminders are actor reminders stored in the Scheduler control plane service, as opposed to the Placement control plane service actor reminder system. The `SchedulerReminders` preview feature defaults to `true`, but you can disable Scheduler actor reminders by setting it to `false`. | `SchedulerReminders`| [Scheduler actor reminders]({{% ref "scheduler.md#actor-reminders" %}}) | v1.14 | \ No newline at end of file diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index ab0a3adf1f2..03dcf61dc8e 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -35,9 +35,9 @@ The Dapr's sidecar image is published to both [GitHub Container Registry](https: * Default sidecar images: `daprio/daprd:` or `ghcr.io/dapr/daprd:` (for example `ghcr.io/dapr/daprd:1.11.1`) * Sidecar images for stable components: `daprio/daprd:-stablecomponents` or `ghcr.io/dapr/daprd:-stablecomponents` (for example `ghcr.io/dapr/daprd:1.11.1-stablecomponents`) -On Kubernetes, the sidecar image can be overwritten for the application Deployment resource with the `dapr.io/sidecar-image` annotation. See more about [Dapr's arguments and annotations]({{< ref "arguments-annotations-overview.md" >}}). The default 'daprio/daprd:latest' image is used if not specified. +On Kubernetes, the sidecar image can be overwritten for the application Deployment resource with the `dapr.io/sidecar-image` annotation. See more about [Dapr's arguments and annotations]({{% ref "arguments-annotations-overview.md" %}}). The default 'daprio/daprd:latest' image is used if not specified. -Learn more about [Dapr components' certification lifecycle]({{< ref "certification-lifecycle.md" >}}). +Learn more about [Dapr components' certification lifecycle]({{% ref "certification-lifecycle.md" %}}). ## Supported versions @@ -126,7 +126,7 @@ Dapr only has a seamless guarantee when upgrading patch versions in a single min The table below shows the tested upgrade paths for the Dapr runtime. Any other combinations of upgrades have not been tested. -General guidance on upgrading can be found for [self hosted mode]({{< ref self-hosted-upgrade >}}) and [Kubernetes]({{< ref kubernetes-upgrade >}}) deployments. It is best to review the target version release notes for specific guidance. +General guidance on upgrading can be found for [self hosted mode]({{% ref self-hosted-upgrade %}}) and [Kubernetes]({{% ref kubernetes-upgrade %}}) deployments. It is best to review the target version release notes for specific guidance. | Current Runtime version | Must upgrade through | Target Runtime version | |--------------------------|-----------------------|------------------------- | @@ -154,7 +154,7 @@ General guidance on upgrading can be found for [self hosted mode]({{< ref self-h ## Upgrade on Hosting platforms -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 >}}) +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 %}}) ### Supported versions of dependencies @@ -168,5 +168,5 @@ Below is a list of software that the latest version of Dapr (v{{% dapr-latest-ve ## Related links -- Read the [Versioning Policy]({{< ref support-versioning.md >}}) -- Read the [Breaking Changes and Deprecation Policy]({{< ref breaking-changes-and-deprecations.md >}}) +- Read the [Versioning Policy]({{% ref support-versioning.md %}}) +- Read the [Breaking Changes and Deprecation Policy]({{% ref breaking-changes-and-deprecations.md %}}) diff --git a/daprdocs/content/en/operations/support/support-security-issues.md b/daprdocs/content/en/operations/support/support-security-issues.md index 6e7b24a2d2b..405e9790c38 100644 --- a/daprdocs/content/en/operations/support/support-security-issues.md +++ b/daprdocs/content/en/operations/support/support-security-issues.md @@ -6,7 +6,7 @@ weight: 3000 description: "How to report a security concern or vulnerability to the Dapr maintainers." --- -The Dapr project and maintainers make security a central focus of how we operate and design our software. From the Dapr binaries to the GitHub release processes, we take numerous steps to ensure user applications and data is secure. For more information on Dapr security features, visit the [security page]({{< ref security-concept.md >}}). +The Dapr project and maintainers make security a central focus of how we operate and design our software. From the Dapr binaries to the GitHub release processes, we take numerous steps to ensure user applications and data is secure. For more information on Dapr security features, visit the [security page]({{% ref security-concept.md %}}). ## Repositories and issues covered diff --git a/daprdocs/content/en/operations/support/support-versioning.md b/daprdocs/content/en/operations/support/support-versioning.md index 132cfa382eb..d14a1e882ef 100644 --- a/daprdocs/content/en/operations/support/support-versioning.md +++ b/daprdocs/content/en/operations/support/support-versioning.md @@ -12,7 +12,7 @@ Dapr is designed for future changes in the runtime, APIs and components with ver ## Versioning Versioning is the process of assigning either unique version names or unique version numbers to unique states of computer software. - Versioning provides compatibility, explicit change control and handling changes, in particular breaking changes. -- Dapr strives to be backwards compatible. If a breaking change is needed it’ll be [announced in advance]({{< ref "support-release-policy#feature-and-deprecations" >}}). +- Dapr strives to be backwards compatible. If a breaking change is needed it’ll be [announced in advance]({{% ref "support-release-policy#feature-and-deprecations" %}}). - Deprecated features are done over multiple releases with both new and deprecated features working side-by-side. @@ -38,13 +38,13 @@ The definition of a breaking change to the API can be viewed [here](https://gith - Experimental APIs include an “alpha” suffix to denote for their alpha status. For example v1.0alpha, v2.0alpha, etc. ## Dapr runtime -Dapr releases use `MAJOR.MINOR.PATCH` versioning. For example 1.0.0. Read [Supported releases]({{< ref support-release-policy.md >}}) for more on the versioning of releases. +Dapr releases use `MAJOR.MINOR.PATCH` versioning. For example 1.0.0. Read [Supported releases]({{% ref support-release-policy.md %}}) for more on the versioning of releases. ## Helm Charts -Helm charts in the [helm-charts repo](https://github.com/dapr/helm-charts) are versioned with the Dapr runtime. The Helm charts are used in the [Kubernetes deployment]({{< ref "kubernetes-deploy#install-with-helm-advanced" >}}) +Helm charts in the [helm-charts repo](https://github.com/dapr/helm-charts) are versioned with the Dapr runtime. The Helm charts are used in the [Kubernetes deployment]({{% ref "kubernetes-deploy#install-with-helm-advanced" %}}) ## Language SDKs, CLI and dashboard -The Dapr language SDKs, CLI and dashboard are versioned independently from the Dapr runtime and can be released at different schedules. See this [table]({{< ref "support-release-policy#supported-versions" >}}) to show the compatibility between versions of the SDKs, CLI, dashboard and runtime. Each new release on the runtime lists the corresponding supported SDKs, CLI and Dashboard. +The Dapr language SDKs, CLI and dashboard are versioned independently from the Dapr runtime and can be released at different schedules. See this [table]({{% ref "support-release-policy#supported-versions" %}}) to show the compatibility between versions of the SDKs, CLI, dashboard and runtime. Each new release on the runtime lists the corresponding supported SDKs, CLI and Dashboard. SDKs, CLIs and Dashboard are versioning follows a `MAJOR.MINOR.PATCH` format. A major version is incremented when there’s a non-backwards compatible change in an SDK (for example, changing a parameter on a client method. A minor version is updated for new features and bug fixes and the patch version is incremented in case of bug or security hot fixes. @@ -56,14 +56,14 @@ Components are implemented in the components-contrib repository and follow a `MA The [components-contrib](https://github.com/dapr/components-contrib/) repo release is a flat version across all components inside. That is, a version for the components-contrib repo release is made up of all the schemas for the components inside it. A new version of Dapr does not mean there is a new release of components-contrib if there are no component changes. Note: Components have a production usage lifecycle status: Alpha, Beta and Stable. These statuses are not related to their versioning. The tables of supported components shows both their versions and their status. -* List of [state store components]({{< ref supported-state-stores.md >}}) -* List of [pub/sub components]({{< ref supported-pubsub.md >}}) -* List of [binding components]({{< ref supported-bindings.md >}}) -* List of [secret store components]({{< ref supported-secret-stores.md >}}) -* List of [configuration store components]({{< ref supported-configuration-stores.md >}}) -* List of [lock components]({{< ref supported-locks.md >}}) -* List of [crytpography components]({{< ref supported-cryptography.md >}}) -* List of [middleware components]({{< ref supported-middleware.md >}}) +* List of [state store components]({{% ref supported-state-stores.md %}}) +* List of [pub/sub components]({{% ref supported-pubsub.md %}}) +* List of [binding components]({{% ref supported-bindings.md %}}) +* List of [secret store components]({{% ref supported-secret-stores.md %}}) +* List of [configuration store components]({{% ref supported-configuration-stores.md %}}) +* List of [lock components]({{% ref supported-locks.md %}}) +* List of [crytpography components]({{% ref supported-cryptography.md %}}) +* List of [middleware components]({{% ref supported-middleware.md %}}) For more information on component versioning read [Version 2 and beyond of a component](https://github.com/dapr/components-contrib/blob/master/docs/developing-component.md#version-2-and-beyond-of-a-component) @@ -108,5 +108,5 @@ Quickstarts in the [Quickstarts repo](https://github.com/dapr/quickstarts) are v Samples in the [Samples repo](https://github.com/dapr/samples) are each versioned on a case by case basis depending on the sample maintainer. Samples that become very out of date with the runtime releases (many versions behind) or have not been maintained for more than 1 year will be removed. ## Related links -* Read the [Supported releases]({{< ref support-release-policy.md >}}) -* Read the [Breaking Changes and Deprecation Policy]({{< ref breaking-changes-and-deprecations.md >}}) +* Read the [Supported releases]({{% ref support-release-policy.md %}}) +* Read the [Breaking Changes and Deprecation Policy]({{% ref breaking-changes-and-deprecations.md %}}) diff --git a/daprdocs/content/en/operations/troubleshooting/api-logs-troubleshooting.md b/daprdocs/content/en/operations/troubleshooting/api-logs-troubleshooting.md index f8b4af585c9..0810c71067e 100644 --- a/daprdocs/content/en/operations/troubleshooting/api-logs-troubleshooting.md +++ b/daprdocs/content/en/operations/troubleshooting/api-logs-troubleshooting.md @@ -6,7 +6,7 @@ weight: 3000 description: "Understand how API logging works in Dapr and how to view logs" --- -API logging enables you to see the API calls your application makes to the Dapr sidecar. This is useful to monitor your application's behavior or for other debugging purposes. You can also combine Dapr API logging with Dapr log events (see [configure and view Dapr Logs]({{< ref "logs-troubleshooting.md" >}}) into the output if you want to use the logging capabilities together. +API logging enables you to see the API calls your application makes to the Dapr sidecar. This is useful to monitor your application's behavior or for other debugging purposes. You can also combine Dapr API logging with Dapr log events (see [configure and view Dapr Logs]({{% ref "logs-troubleshooting.md" %}}) into the output if you want to use the logging capabilities together. ## Overview @@ -80,7 +80,7 @@ time="2022-03-16T18:32:03.359097916Z" level=info msg="HTTP API Called" method="P ## API logging configuration -Using the [Dapr Configuration spec]({{< ref "configuration-overview.md" >}}#sidecar-configuration), you can configure the default behavior of API logging in Dapr runtimes. +Using the [Dapr Configuration spec]({{% ref "configuration-overview.md" %}}#sidecar-configuration), you can configure the default behavior of API logging in Dapr runtimes. ### Enable API logging by default diff --git a/daprdocs/content/en/operations/troubleshooting/common_issues.md b/daprdocs/content/en/operations/troubleshooting/common_issues.md index 8d6294f6b4d..038ba1fec55 100644 --- a/daprdocs/content/en/operations/troubleshooting/common_issues.md +++ b/daprdocs/content/en/operations/troubleshooting/common_issues.md @@ -19,7 +19,7 @@ When installing and initializing the Dapr CLI, if you see the following error me Troubleshoot the error by ensuring: -1. [The correct containers are running.]({{< ref "install-dapr-selfhost.md#step-4-verify-containers-are-running" >}}) +1. [The correct containers are running.]({{% ref "install-dapr-selfhost.md#step-4-verify-containers-are-running" %}}) 1. In Docker Desktop, verify the **Allow the default Docker socket to be used (requires password)** option is selected. @@ -74,7 +74,7 @@ There are some known cases where this might not properly work: 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 >}}). +- 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: @@ -144,9 +144,9 @@ The most common cause of this failure is that a component (such as a state store To diagnose the root cause: -- Significantly increase the liveness probe delay - [link]({{< ref "arguments-annotations-overview.md" >}}) -- Set the log level of the sidecar to debug - [link]({{< ref "logs-troubleshooting.md#setting-the-sidecar-log-level" >}}) -- Watch the logs for meaningful information - [link]({{< ref "logs-troubleshooting.md#viewing-logs-on-kubernetes" >}}) +- Significantly increase the liveness probe delay - [link]({{% ref "arguments-annotations-overview.md" %}}) +- Set the log level of the sidecar to debug - [link]({{% ref "logs-troubleshooting.md#setting-the-sidecar-log-level" %}}) +- Watch the logs for meaningful information - [link]({{% ref "logs-troubleshooting.md#viewing-logs-on-kubernetes" %}}) > Remember to configure the liveness check delay and log level back to your desired values after solving the problem. @@ -161,7 +161,7 @@ kubectl get components ``` If there isn't a state store component, it means you need to set one up. -Visit [here]({{< ref "state-management" >}}) for more details. +Visit [here]({{% ref "state-management" %}}) for more details. If everything's set up correctly, make sure you got the credentials right. Search the Dapr runtime logs and look for any state store errors: @@ -181,7 +181,7 @@ kubectl get components ``` If there isn't a pub/sub component, it means you need to set one up. -Visit [here]({{< ref "pubsub" >}}) for more details. +Visit [here]({{% ref "pubsub" %}}) for more details. If everything is set up correctly, make sure you got the credentials right. Search the Dapr runtime logs and look for any pub/sub errors: @@ -202,7 +202,7 @@ kubectl logs daprd ## I'm getting 404 Not Found responses when calling Dapr This means you're trying to call an Dapr API endpoint that either doesn't exist or the URL is malformed. -Look at the Dapr API reference [here]({{< ref "api" >}}) and make sure you're calling the right endpoint. +Look at the Dapr API reference [here]({{% ref "api" %}}) and make sure you're calling the right endpoint. ## I don't see any incoming events or calls from other services @@ -221,7 +221,7 @@ If using Dapr Standalone and the Dapr CLI, make sure you pass the `--app-port` f ## My Dapr-enabled app isn't behaving correctly The first thing to do is inspect the HTTP error code returned from the Dapr API, if any. -If you still can't find the issue, try enabling `debug` log levels for the Dapr runtime. See [here]({{< ref "logs.md" >}}) how to do so. +If you still can't find the issue, try enabling `debug` log levels for the Dapr runtime. See [here]({{% ref "logs.md" %}}) how to do so. You might also want to look at error logs from your own process. If running on Kubernetes, find the pod containing your app, and execute the following: @@ -251,9 +251,9 @@ export DAPR_HOST_IP=127.0.0.1 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 `--resources-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" >}}). +- 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 `--resources-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" %}}). ## Service invocation is failing and my Dapr service is missing an appId (macOS) diff --git a/daprdocs/content/en/operations/troubleshooting/logs-troubleshooting.md b/daprdocs/content/en/operations/troubleshooting/logs-troubleshooting.md index 14eb822c194..8a9b522e9f7 100644 --- a/daprdocs/content/en/operations/troubleshooting/logs-troubleshooting.md +++ b/daprdocs/content/en/operations/troubleshooting/logs-troubleshooting.md @@ -73,7 +73,7 @@ dapr run node myapp.js ## Logs in Kubernetes mode -> [Learn how to debug `daprd` on Kubernetes.]({{< ref "debug-daprd.md" >}}) +> [Learn how to debug `daprd` on Kubernetes.]({{% ref "debug-daprd.md" %}}) You can set the log level individually for every sidecar by providing the following annotation in your pod spec template: @@ -201,4 +201,4 @@ The examples above are specific specific to Kubernetes, but the principal is the ## References -* [How to setup logging in Dapr]({{< ref "logging.md" >}}) +* [How to setup logging in Dapr]({{% ref "logging.md" %}}) diff --git a/daprdocs/content/en/reference/api/actors_api.md b/daprdocs/content/en/reference/api/actors_api.md index b5dd2c62659..870593708d2 100644 --- a/daprdocs/content/en/reference/api/actors_api.md +++ b/daprdocs/content/en/reference/api/actors_api.md @@ -7,7 +7,7 @@ weight: 600 --- Dapr provides native, cross-platform, and cross-language virtual actor capabilities. -Besides the [language specific SDKs]({{}}), a developer can invoke an actor using the API endpoints below. +Besides the [language specific SDKs]({{%ref sdks%}}), a developer can invoke an actor using the API endpoints below. ## User service code calling Dapr @@ -77,8 +77,8 @@ Persists the change to the state for an actor as a multi-item transaction. #### TTL -With the [`ActorStateTTL` feature enabled]({{< ref -"support-preview-features.md" >}}), actor clients can set the `ttlInSeconds` +With the [`ActorStateTTL` feature enabled]({{% ref +"support-preview-features.md" %}}), actor clients can set the `ttlInSeconds` field in the transaction metadata to have the state expire after that many seconds. If the `ttlInSeconds` field is not set, the state will not expire. @@ -114,7 +114,7 @@ Parameter | Description #### Examples -> Note, the following example uses the `ttlInSeconds` field, which requires the [`ActorStateTTL` feature enabled]({{< ref "support-preview-features.md" >}}). +> Note, the following example uses the `ttlInSeconds` field, which requires the [`ActorStateTTL` feature enabled]({{% ref "support-preview-features.md" %}}). ```shell curl -X POST http://localhost:3500/v1.0/actors/stormtrooper/50/state \ @@ -384,7 +384,7 @@ POST/PUT http://localhost:/v1.0/actors///timers/}}). For example: +The format for the timer request body is the same as for [actor reminders]({{% ref "#reminder-request-body" %}}). For example: The following specifies a `dueTime` of 3 seconds and a period of 7 seconds. diff --git a/daprdocs/content/en/reference/api/bindings_api.md b/daprdocs/content/en/reference/api/bindings_api.md index 4d113c4f990..81e13eecca7 100644 --- a/daprdocs/content/en/reference/api/bindings_api.md +++ b/daprdocs/content/en/reference/api/bindings_api.md @@ -35,7 +35,7 @@ If running self hosted locally, place this file in your `components` folder next If running on kubernetes apply the component to your cluster. -> **Note:** In production never place passwords or secrets within Dapr component files. For information on securely storing and retrieving secrets using secret stores refer to [Setup Secret Store]({{< ref setup-secret-store >}}) +> **Note:** In production never place passwords or secrets within Dapr component files. For information on securely storing and retrieving secrets using secret stores refer to [Setup Secret Store]({{% ref setup-secret-store %}}) ### Binding direction (optional) @@ -203,7 +203,7 @@ If `concurrency` is not set, it is sent out sequential (the example below shows This endpoint lets you invoke a Dapr output binding. Dapr bindings support various operations, such as `create`. -See the [different specs]({{< ref supported-bindings >}}) on each binding to see the list of supported operations. +See the [different specs]({{% ref supported-bindings %}}) on each binding to see the list of supported operations. ### HTTP Request diff --git a/daprdocs/content/en/reference/api/configuration_api.md b/daprdocs/content/en/reference/api/configuration_api.md index bfb7339029c..ef28fc42a8f 100644 --- a/daprdocs/content/en/reference/api/configuration_api.md +++ b/daprdocs/content/en/reference/api/configuration_api.md @@ -21,7 +21,7 @@ GET http://localhost:/v1.0/configuration/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component spec]({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component spec]({{% ref component-schema.md%}}) #### Query Parameters @@ -87,7 +87,7 @@ GET http://localhost:/v1.0/configuration//subscribe Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component spec]({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component spec]({{% ref component-schema.md%}}) #### Query Parameters @@ -153,7 +153,7 @@ GET http://localhost:/v1.0/configuration// Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component spec]({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component spec]({{% ref component-schema.md%}}) `subscription-id` | The value from the `id` field returned from the response of the subscribe endpoint #### Query Parameters @@ -223,7 +223,7 @@ POST http://localhost:/configuration// Parameter | Description --------- | ----------- `appPort` | The application port -`storename` | The `metadata.name` field component file. Refer to the [component spec]({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component spec]({{% ref component-schema.md%}}) `key` | The key subscribed to #### Request Body @@ -257,5 +257,5 @@ A list of configuration items for a given subscription id. Configuration items c ## Next Steps -- [Configuration API overview]({{< ref configuration-api-overview.md >}}) -- [How-To: Manage configuration from a store]({{< ref howto-manage-configuration.md >}}) +- [Configuration API overview]({{% ref configuration-api-overview.md %}}) +- [How-To: Manage configuration from a store]({{% ref howto-manage-configuration.md %}}) diff --git a/daprdocs/content/en/reference/api/conversation_api.md b/daprdocs/content/en/reference/api/conversation_api.md index 415bd4faa7e..1a4e006b348 100644 --- a/daprdocs/content/en/reference/api/conversation_api.md +++ b/daprdocs/content/en/reference/api/conversation_api.md @@ -7,7 +7,7 @@ weight: 1400 --- {{% alert title="Alpha" color="primary" %}} -The conversation API is currently in [alpha]({{< ref "certification-lifecycle.md#certification-levels" >}}). +The conversation API is currently in [alpha]({{% ref "certification-lifecycle.md#certification-levels" %}}). {{% /alert %}} Dapr provides an API to interact with Large Language Models (LLMs) and enables critical performance and security functionality with features like prompt caching and PII data obfuscation. @@ -24,7 +24,7 @@ POST http://localhost:/v1.0-alpha1/conversation//converse | Parameter | Description | | --------- | ----------- | -| `llm-name` | The name of the LLM component. [See a list of all available conversation components.]({{< ref supported-conversation >}}) +| `llm-name` | The name of the LLM component. [See a list of all available conversation components.]({{% ref supported-conversation %}}) ### Request body @@ -88,5 +88,5 @@ RESPONSE = { ## Next steps -- [Conversation API overview]({{< ref conversation-overview.md >}}) -- [Supported conversation components]({{< ref supported-conversation >}}) +- [Conversation API overview]({{% ref conversation-overview.md %}}) +- [Supported conversation components]({{% ref supported-conversation %}}) diff --git a/daprdocs/content/en/reference/api/cryptography_api.md b/daprdocs/content/en/reference/api/cryptography_api.md index c0c4824277b..163abe1d77a 100644 --- a/daprdocs/content/en/reference/api/cryptography_api.md +++ b/daprdocs/content/en/reference/api/cryptography_api.md @@ -7,7 +7,7 @@ weight: 1300 --- Dapr provides cross-platform and cross-language support for encryption and decryption support via the -cryptography building block. Besides the [language specific SDKs]({{}}), a developer can invoke these capabilities using +cryptography building block. Besides the [language specific SDKs]({{%ref sdks%}}), a developer can invoke these capabilities using the HTTP API endpoints below. > The HTTP APIs are intended for development and testing only. For production scenarios, the use of the SDKs is strongly diff --git a/daprdocs/content/en/reference/api/distributed_lock_api.md b/daprdocs/content/en/reference/api/distributed_lock_api.md index 56f4739d6c7..92914a03768 100644 --- a/daprdocs/content/en/reference/api/distributed_lock_api.md +++ b/daprdocs/content/en/reference/api/distributed_lock_api.md @@ -21,7 +21,7 @@ POST http://localhost:/v1.0-alpha1/lock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{% ref component-schema.md %}}) #### Query Parameters @@ -95,7 +95,7 @@ POST http://localhost:/v1.0-alpha1/unlock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{% ref component-schema.md %}}) #### Query Parameters diff --git a/daprdocs/content/en/reference/api/health_api.md b/daprdocs/content/en/reference/api/health_api.md index 5f9c5dad90a..164e2dd6d0b 100644 --- a/daprdocs/content/en/reference/api/health_api.md +++ b/daprdocs/content/en/reference/api/health_api.md @@ -47,12 +47,12 @@ curl -i http://localhost:3500/v1.0/healthz Wait for all components to be initialized, the Dapr HTTP port to be available, however the app channel is not yet established. This endpoint enables your application to perform calls on the Dapr sidecar APIs before the app channel is initalized, for example reading secrets with the secrets API. For example used in the Dapr SDKs `waitForSidecar` method (for example .NET and Java SDKs) to check sidecar is initialized correctly ready for any calls. -For example, the [Java SDK]({{< ref "java-client.md#wait-for-sidecar" >}}) and [the .NET SDK]({{< ref "dotnet-client.md#wait-for-sidecar" >}}) uses this endpoint for initialization. +For example, the [Java SDK]({{% ref "java-client.md#wait-for-sidecar" %}}) and [the .NET SDK]({{% ref "dotnet-client.md#wait-for-sidecar" %}}) uses this endpoint for initialization. Currently, the `v1.0/healthz/outbound` endpoint is supported in the: -- [.NET SDK]({{< ref "dotnet-client.md#wait-for-sidecar" >}}) -- [Java SDK]({{< ref "java-client.md#wait-for-sidecar" >}}) -- [Python SDK]({{< ref "python-client.md#health-timeout" >}}) +- [.NET SDK]({{% ref "dotnet-client.md#wait-for-sidecar" %}}) +- [Java SDK]({{% ref "java-client.md#wait-for-sidecar" %}}) +- [Python SDK]({{% ref "python-client.md#health-timeout" %}}) - [JavaScript SDK](https://github.com/dapr/js-sdk/blob/4189a3d2ad6897406abd766f4ccbf2300c8f8852/src/interfaces/Client/IClientHealth.ts#L14) #### HTTP Request @@ -82,5 +82,5 @@ curl -i http://localhost:3500/v1.0/healthz/outbound ## Related articles -- [Sidecar health]({{< ref "sidecar-health.md" >}}) -- [App health]({{< ref "app-health.md" >}}) +- [Sidecar health]({{% ref "sidecar-health.md" %}}) +- [App health]({{% ref "app-health.md" %}}) diff --git a/daprdocs/content/en/reference/api/jobs_api.md b/daprdocs/content/en/reference/api/jobs_api.md index 316974e9471..a02dcf164ac 100644 --- a/daprdocs/content/en/reference/api/jobs_api.md +++ b/daprdocs/content/en/reference/api/jobs_api.md @@ -166,4 +166,4 @@ $ curl -X DELETE http://localhost:3500/v1.0-alpha1/jobs/jobforjabba -H "Content- ## Next steps -[Jobs API overview]({{< ref jobs-overview.md >}}) +[Jobs API overview]({{% ref jobs-overview.md %}}) diff --git a/daprdocs/content/en/reference/api/metadata_api.md b/daprdocs/content/en/reference/api/metadata_api.md index af0e8ebb12c..b129d85928c 100644 --- a/daprdocs/content/en/reference/api/metadata_api.md +++ b/daprdocs/content/en/reference/api/metadata_api.md @@ -18,7 +18,7 @@ Dapr has a metadata API that returns information about the sidecar allowing runt ### Components Each loaded component provides its name, type and version and also information about supported features in the form of component capabilities. -These features are available for the [state store]({{< ref supported-state-stores.md >}}) and [binding]({{< ref supported-bindings.md >}}) component types. The table below shows the component type and the list of capabilities for a given version. This list might grow in future and only represents the capabilities of the loaded components. +These features are available for the [state store]({{% ref supported-state-stores.md %}}) and [binding]({{% ref supported-bindings.md %}}) component types. The table below shows the component type and the list of capabilities for a given version. This list might grow in future and only represents the capabilities of the loaded components. Component type | Capabilities ---------------| ------------ diff --git a/daprdocs/content/en/reference/api/placement_api.md b/daprdocs/content/en/reference/api/placement_api.md index dde238edf12..de216c1f156 100644 --- a/daprdocs/content/en/reference/api/placement_api.md +++ b/daprdocs/content/en/reference/api/placement_api.md @@ -8,10 +8,10 @@ weight: 1200 Dapr has an HTTP API `/placement/state` for Placement service that exposes placement table information. The API is exposed on the sidecar on the same port as the healthz. This is an unauthenticated endpoint, and is disabled by default. -To enable the placement metadata in self-hosted mode you can either set`DAPR_PLACEMENT_METADATA_ENABLED` environment variable or `metadata-enabled` command line args on the Placement service to `true` to. See [how to run the Placement service in self-hosted mode]({{< ref "self-hosted-no-docker.md#enable-actors" >}}). +To enable the placement metadata in self-hosted mode you can either set`DAPR_PLACEMENT_METADATA_ENABLED` environment variable or `metadata-enabled` command line args on the Placement service to `true` to. See [how to run the Placement service in self-hosted mode]({{% ref "self-hosted-no-docker.md#enable-actors" %}}). {{% alert title="Important" color="warning" %}} -When running placement in [multi-tenant mode]({{< ref namespaced-actors.md >}}), disable the `metadata-enabled` command line args to prevent different namespaces from seeing each other's data. +When running placement in [multi-tenant mode]({{% ref namespaced-actors.md %}}), disable the `metadata-enabled` command line args to prevent different namespaces from seeing each other's data. {{% /alert %}} If you are using Helm for deployment of the Placement service on Kubernetes then to enable the placement metadata, set `dapr_placement.metadataEnabled` to `true`. diff --git a/daprdocs/content/en/reference/api/pubsub_api.md b/daprdocs/content/en/reference/api/pubsub_api.md index 8fbf0f615ba..d2cc67ab03e 100644 --- a/daprdocs/content/en/reference/api/pubsub_api.md +++ b/daprdocs/content/en/reference/api/pubsub_api.md @@ -59,8 +59,8 @@ Metadata can be sent via query parameters in the request's URL. It must be prefi Parameter | Description --------- | ----------- -`metadata.ttlInSeconds` | The number of seconds for the message to expire, as [described here]({{< ref pubsub-message-ttl.md >}}) -`metadata.rawPayload` | Boolean to determine if Dapr should publish the event without wrapping it as CloudEvent, as [described here]({{< ref pubsub-raw.md >}}) +`metadata.ttlInSeconds` | The number of seconds for the message to expire, as [described here]({{% ref pubsub-message-ttl.md %}}) +`metadata.rawPayload` | Boolean to determine if Dapr should publish the event without wrapping it as CloudEvent, as [described here]({{% ref pubsub-raw.md %}}) > Additional metadata parameters are available based on each pubsub component. @@ -113,7 +113,7 @@ The `Content-Type` header should always be set to `application/json` since the r |`daprPort`|The Dapr port| |`pubsubname`|The name of pub/sub component| |`topic`|The name of the topic| -|`metadata`|Query parameters for [metadata]({{< ref "pubsub_api.md#metadata" >}})| +|`metadata`|Query parameters for [metadata]({{% ref "pubsub_api.md#metadata" %}})| ### Metadata @@ -201,11 +201,11 @@ Optionally, metadata can be sent via the request body. Parameter | Description --------- | ----------- -`rawPayload` | boolean to subscribe to events that do not comply with CloudEvent specification, as [described here]({{< ref pubsub-raw.md >}}) +`rawPayload` | boolean to subscribe to events that do not comply with CloudEvent specification, as [described here]({{% ref pubsub-raw.md %}}) ### Provide route(s) for Dapr to deliver topic events -In order to deliver topic events, a `POST` call will be made to user code with the route specified in the subscription response. Under `routes`, you can provide [rules that match a certain condition to a specific path when a message topic is received.]({{< ref "howto-route-messages.md" >}}) You can also provide a default route for any rules that do not have a specific match. +In order to deliver topic events, a `POST` call will be made to user code with the route specified in the subscription response. Under `routes`, you can provide [rules that match a certain condition to a specific path when a message topic is received.]({{% ref "howto-route-messages.md" %}}) You can also provide a default route for any rules that do not have a specific match. The following example illustrates this point, considering a subscription for topic `newOrder` with route `orders` on port 3000: `POST http://localhost:3000/orders` @@ -261,7 +261,7 @@ In order to receive messages in a bulk manner for a topic subscription, the appl - Needs to opt for `bulkSubscribe` while sending list of topics to be subscribed to - Optionally, can configure `maxMessagesCount` and/or `maxAwaitDurationMs` -Refer to the [Send and receive messages in bulk]({{< ref pubsub-bulk.md >}}) guide for more details on how to opt-in. +Refer to the [Send and receive messages in bulk]({{% ref pubsub-bulk.md %}}) guide for more details on how to opt-in. #### Expected HTTP Response for Bulk Subscribe @@ -306,5 +306,5 @@ Dapr pub/sub adheres to [version 1.0 of CloudEvents](https://github.com/cloudeve ## Related links -* [How to publish to and consume topics]({{< ref howto-publish-subscribe.md >}}) +* [How to publish to and consume topics]({{% ref howto-publish-subscribe.md %}}) * [Sample for pub/sub](https://github.com/dapr/quickstarts/tree/master/tutorials/pub-sub) diff --git a/daprdocs/content/en/reference/api/secrets_api.md b/daprdocs/content/en/reference/api/secrets_api.md index 13d0d799133..752736f5fe4 100644 --- a/daprdocs/content/en/reference/api/secrets_api.md +++ b/daprdocs/content/en/reference/api/secrets_api.md @@ -38,7 +38,7 @@ Observe that not all secret stores support the same set of parameters. For examp - Hashicorp Vault, GCP Secret Manager and AWS Secret Manager support the `version_id` parameter - Only AWS Secret Manager supports the `version_stage` parameter - Only Kubernetes Secrets supports the `namespace` parameter -Check each [secret store's documentation]({{< ref supported-secret-stores.md >}}) for the list of supported parameters. +Check each [secret store's documentation]({{% ref supported-secret-stores.md %}}) for the list of supported parameters. @@ -51,7 +51,7 @@ If a secret store has support for multiple key-values in a secret, a JSON payloa In case of a secret store that only has name/value semantics, a JSON payload is returned with the name of the secret as the field and the value of the secret as the value. -[See the classification of secret stores]({{< ref supported-secret-stores.md >}}) that support multiple keys in a secret and name/value semantics. +[See the classification of secret stores]({{% ref supported-secret-stores.md %}}) that support multiple keys in a secret and name/value semantics. ##### Response with multiple keys in a secret (eg. Kubernetes): @@ -105,7 +105,7 @@ curl http://localhost:3500/v1.0/secrets/myAwsSecretStore/db-secret?metadata.vers ## Get Bulk Secret This endpoint lets you get all the secrets in a secret store. -It's recommended to use [token authentication]({{}}) for Dapr if configuring a secret store. +It's recommended to use [token authentication]({{%ref "api-token.md"%}}) for Dapr if configuring a secret store. ### HTTP Request diff --git a/daprdocs/content/en/reference/api/service_invocation_api.md b/daprdocs/content/en/reference/api/service_invocation_api.md index 8ecd243ef36..85519511055 100644 --- a/daprdocs/content/en/reference/api/service_invocation_api.md +++ b/daprdocs/content/en/reference/api/service_invocation_api.md @@ -149,4 +149,4 @@ curl http://localhost:3500/v1.0/invoke/http://mathServiceURL.com/method/add \ ``` ## Next Steps -- [How-To: Invoke and discover services]({{< ref howto-invoke-discover-services.md >}}) +- [How-To: Invoke and discover services]({{% ref howto-invoke-discover-services.md %}}) diff --git a/daprdocs/content/en/reference/api/state_api.md b/daprdocs/content/en/reference/api/state_api.md index b3ad0ab7a4e..53654cf38a9 100644 --- a/daprdocs/content/en/reference/api/state_api.md +++ b/daprdocs/content/en/reference/api/state_api.md @@ -91,9 +91,9 @@ Metadata can be sent via query parameters in the request's URL. It must be prefi Parameter | Description --------- | ----------- -`metadata.ttlInSeconds` | The number of seconds for the message to expire, as [described here]({{< ref state-store-ttl.md >}}) +`metadata.ttlInSeconds` | The number of seconds for the message to expire, as [described here]({{% ref state-store-ttl.md %}}) -> **TTL:** Only certain state stores support the TTL option, according the [supported state stores]({{< ref supported-state-stores.md >}}). +> **TTL:** Only certain state stores support the TTL option, according the [supported state stores]({{% ref supported-state-stores.md %}}). ### HTTP Response @@ -456,11 +456,11 @@ POST http://localhost:3500/v1.0-alpha1/state/myStore/query?metadata.partitionKey ## State transactions -Persists the changes to the state store as a [transactional operation]({{< ref "state-management-overview.md#transactional-operations" >}}). +Persists the changes to the state store as a [transactional operation]({{% ref "state-management-overview.md#transactional-operations" %}}). > This API depends on a state store component that supports transactions. -Refer to the [state store component spec]({{< ref "supported-state-stores.md" >}}) for a full, current list of state stores that support transactions. +Refer to the [state store component spec]({{% ref "supported-state-stores.md" %}}) for a full, current list of state stores that support transactions. #### HTTP Request @@ -544,7 +544,7 @@ curl -X POST http://localhost:3500/v1.0/state/starwars/transaction \ ## Configuring state store for actors -Actors don't support multiple state stores and require a transactional state store to be used with Dapr. [View which services currently implement the transactional state store interface]({{< ref "supported-state-stores.md" >}}). +Actors don't support multiple state stores and require a transactional state store to be used with Dapr. [View which services currently implement the transactional state store interface]({{% ref "supported-state-stores.md" %}}). Specify which state store to be used for actors with a `true` value for the property `actorStateStore` in the metadata section of the `statestore.yaml` component file. For example, the following components yaml will configure Redis to be used as the state store for Actors. @@ -704,5 +704,5 @@ The following is an example walk-through of an ETag usage when *setting*/*deleti ## Next Steps -- [State management overview]({{< ref state-management-overview.md >}}) -- [How-To: Save & get state]({{< ref howto-get-save-state.md >}}) +- [State management overview]({{% ref state-management-overview.md %}}) +- [How-To: Save & get state]({{% ref howto-get-save-state.md %}}) diff --git a/daprdocs/content/en/reference/api/workflow_api.md b/daprdocs/content/en/reference/api/workflow_api.md index 3d667d8421d..85ee207162d 100644 --- a/daprdocs/content/en/reference/api/workflow_api.md +++ b/daprdocs/content/en/reference/api/workflow_api.md @@ -246,5 +246,5 @@ Parameter | Description ## Next Steps -- [Workflow API overview]({{< ref workflow-overview.md >}}) -- [Route user to workflow patterns ]({{< ref workflow-patterns.md >}}) +- [Workflow API overview]({{% ref workflow-overview.md %}}) +- [Route user to workflow patterns ]({{% ref workflow-patterns.md %}}) diff --git a/daprdocs/content/en/reference/arguments-annotations-overview.md b/daprdocs/content/en/reference/arguments-annotations-overview.md index a8976efd500..ac79da463f0 100644 --- a/daprdocs/content/en/reference/arguments-annotations-overview.md +++ b/daprdocs/content/en/reference/arguments-annotations-overview.md @@ -8,7 +8,7 @@ aliases: - "/operations/hosting/kubernetes/kubernetes-annotations/" --- -This table is meant to help users understand the equivalent options for running Dapr sidecars in different contexts: via the [CLI]({{< ref cli-overview.md >}}) directly, via daprd, or on [Kubernetes]({{< ref kubernetes-overview.md >}}) via annotations. +This table is meant to help users understand the equivalent options for running Dapr sidecars in different contexts: via the [CLI]({{% ref cli-overview.md %}}) directly, via daprd, or on [Kubernetes]({{% ref kubernetes-overview.md %}}) via annotations. | daprd | Dapr CLI | CLI shorthand | Kubernetes annotations | Description| |----- | ------- | -----------| ----------| ------------ | @@ -25,36 +25,36 @@ This table is meant to help users understand the equivalent options for running | `--max-body-size` | not supported | | `dapr.io/max-body-size` | Inreasing the request max body size to handle large file uploads using http and grpc protocols. Set the value using size units (e.g., `16Mi` for 16MB). The default is `4Mi` | | `--dapr-http-read-buffer-size` | `--dapr-http-read-buffer-size` | | `dapr.io/http-read-buffer-size` | **Deprecated** in favor of `--read-buffer-size`. Increasing max size of http header read buffer in KB to to support larger header values, for example `16` to support headers up to 16KB . Default is `16` for 16KB | | `--read-buffer-size` | not supported | | `dapr.io/read-buffer-size` | Increasing max size of http header read buffer in KB to to support larger header values. Set the value using size units, for example `32Ki` will support headers up to 32KB . Default is `4Ki` for 4KB | -| not supported | `--image` | | `dapr.io/sidecar-image` | Dapr sidecar image. Default is daprio/daprd:latest. The Dapr sidecar uses this image instead of the latest default image. Use this when building your own custom image of Dapr and or [using an alternative stable Dapr image]({{< ref "support-release-policy.md#build-variations" >}}) | +| not supported | `--image` | | `dapr.io/sidecar-image` | Dapr sidecar image. Default is daprio/daprd:latest. The Dapr sidecar uses this image instead of the latest default image. Use this when building your own custom image of Dapr and or [using an alternative stable Dapr image]({{% ref "support-release-policy.md#build-variations" %}}) | | `--internal-grpc-port` | not supported | | `dapr.io/internal-grpc-port` | Sets the internal Dapr gRPC port (default `50002`); all cluster services must use the same port for communication | -| `--enable-metrics` | not supported | | configuration spec | Enable [prometheus metric]({{< ref prometheus >}}) (default true) | +| `--enable-metrics` | not supported | | configuration spec | Enable [prometheus metric]({{% ref prometheus %}}) (default true) | | `--enable-mtls` | not supported | | configuration spec | Enables automatic mTLS for daprd to daprd communication channels | -| `--enable-profiling` | `--enable-profiling` | | `dapr.io/enable-profiling` | [Enable profiling]({{< ref profiling-debugging >}}) | +| `--enable-profiling` | `--enable-profiling` | | `dapr.io/enable-profiling` | [Enable profiling]({{% ref profiling-debugging %}}) | | `--unix-domain-socket` | `--unix-domain-socket` | `-u` | `dapr.io/unix-domain-socket-path` | The parent directory of socket file. On Linux, when communicating with the Dapr sidecar, use unix domain sockets for lower latency and greater throughput compared to TCP ports. Not available on Windows OS. | -| `--log-as-json` | not supported | | `dapr.io/log-as-json` | Setting this parameter to `true` outputs [logs in JSON format]({{< ref logs >}}). Default is `false` | -| `--log-level` | `--log-level` | | `dapr.io/log-level` | Sets the [log level]({{< ref logs-troubleshooting >}}) for the Dapr sidecar. Allowed values are `debug`, `info`, `warn`, `error`. Default is `info` | -| `--enable-api-logging` | `--enable-api-logging` | | `dapr.io/enable-api-logging` | [Enables API logging]({{< ref "api-logs-troubleshooting.md#configuring-api-logging-in-kubernetes" >}}) for the Dapr sidecar | -| `--app-max-concurrency` | `--app-max-concurrency` | | `dapr.io/app-max-concurrency` | Limit the [concurrency of your application]({{< ref "control-concurrency.md#setting-app-max-concurrency" >}}). A valid value is any number larger than `0`. Default value: `-1`, meaning no concurrency. | +| `--log-as-json` | not supported | | `dapr.io/log-as-json` | Setting this parameter to `true` outputs [logs in JSON format]({{% ref logs %}}). Default is `false` | +| `--log-level` | `--log-level` | | `dapr.io/log-level` | Sets the [log level]({{% ref logs-troubleshooting %}}) for the Dapr sidecar. Allowed values are `debug`, `info`, `warn`, `error`. Default is `info` | +| `--enable-api-logging` | `--enable-api-logging` | | `dapr.io/enable-api-logging` | [Enables API logging]({{% ref "api-logs-troubleshooting.md#configuring-api-logging-in-kubernetes" %}}) for the Dapr sidecar | +| `--app-max-concurrency` | `--app-max-concurrency` | | `dapr.io/app-max-concurrency` | Limit the [concurrency of your application]({{% ref "control-concurrency.md#setting-app-max-concurrency" %}}). A valid value is any number larger than `0`. Default value: `-1`, meaning no concurrency. | | `--metrics-port` | `--metrics-port` | | `dapr.io/metrics-port` | Sets the port for the sidecar metrics server. Default is `9090` | -| `--mode` | not supported | | not supported | Runtime hosting option mode for Dapr, either `"standalone"` or `"kubernetes"` (default `"standalone"`). [Learn more.]({{< ref hosting >}}) | +| `--mode` | not supported | | not supported | Runtime hosting option mode for Dapr, either `"standalone"` or `"kubernetes"` (default `"standalone"`). [Learn more.]({{% ref hosting %}}) | | `--placement-host-address` | `--placement-host-address` | | `dapr.io/placement-host-address` | Comma separated list of addresses for Dapr Actor Placement servers.

When no annotation is set, the default value is set by the Sidecar Injector.

When the annotation is set and the value is a single space (`' '`), or "empty", the sidecar does not connect to Placement server. This can be used when there are no actors running in the sidecar.

When the annotation is set and the value is not empty, the sidecar connects to the configured address. For example: `127.0.0.1:50057,127.0.0.1:50058` | | `--scheduler-host-address` | `--scheduler-host-address` | | `dapr.io/scheduler-host-address` | Comma separated list of addresses for Dapr Scheduler servers.

When no annotation is set, the default value is set by the Sidecar Injector.

When the annotation is set and the value is a single space (`' '`), or "empty", the sidecar does not connect to Scheduler server.

When the annotation is set and the value is not empty, the sidecar connects to the configured address. For example: `127.0.0.1:50055,127.0.0.1:50056` | | `--actors-service` | not supported | | not supported | Configuration for the service that offers actor placement information. The format is `:
`. For example, setting this value to `placement:127.0.0.1:50057,127.0.0.1:50058` is an alternative to using the `--placement-host-address` flag. | | `--reminders-service` | not supported | | not supported | Configuration for the service that enables actor reminders. The format is `[:
]`. Currently, the only supported value is `"default"` (which is also the default value), which uses the built-in reminders subsystem in the Dapr sidecar. | | `--profiling-port` | `--profiling-port` | | not supported | The port for the profile server (default `7777`) | | `--app-protocol` | `--app-protocol` | `-P` | `dapr.io/app-protocol` | Configures the protocol Dapr uses to communicate with your app. Valid options are `http`, `grpc`, `https` (HTTP with TLS), `grpcs` (gRPC with TLS), `h2c` (HTTP/2 Cleartext). Note that Dapr does not validate TLS certificates presented by the app. Default is `http` | -| `--enable-app-health-check` | `--enable-app-health-check` | | `dapr.io/enable-app-health-check` | Boolean that enables the [health checks]({{< ref "app-health.md#configuring-app-health-checks" >}}). Default is `false`. | -| `--app-health-check-path` | `--app-health-check-path` | | `dapr.io/app-health-check-path` | Path that Dapr invokes for health probes when the app channel is HTTP (this value is ignored if the app channel is using gRPC). Requires [app health checks to be enabled]({{< ref "app-health.md#configuring-app-health-checks" >}}). Default is `/healthz`. | -| `--app-health-probe-interval` | `--app-health-probe-interval` | | `dapr.io/app-health-probe-interval` | Number of *seconds* between each health probe. Requires [app health checks to be enabled]({{< ref "app-health.md#configuring-app-health-checks" >}}). Default is `5` | -| `--app-health-probe-timeout` | `--app-health-probe-timeout` | | `dapr.io/app-health-probe-timeout` | Timeout in *milliseconds* for health probe requests. Requires [app health checks to be enabled]({{< ref "app-health.md#configuring-app-health-checks" >}}). Default is `500` | -| `--app-health-threshold` | `--app-health-threshold` | | `dapr.io/app-health-threshold"` | Max number of consecutive failures before the app is considered unhealthy. Requires [app health checks to be enabled]({{< ref "app-health.md#configuring-app-health-checks" >}}). Default is `3` | -| `--sentry-address` | `--sentry-address` | | not supported | Address for the [Sentry CA service]({{< ref sentry >}}) | +| `--enable-app-health-check` | `--enable-app-health-check` | | `dapr.io/enable-app-health-check` | Boolean that enables the [health checks]({{% ref "app-health.md#configuring-app-health-checks" %}}). Default is `false`. | +| `--app-health-check-path` | `--app-health-check-path` | | `dapr.io/app-health-check-path` | Path that Dapr invokes for health probes when the app channel is HTTP (this value is ignored if the app channel is using gRPC). Requires [app health checks to be enabled]({{% ref "app-health.md#configuring-app-health-checks" %}}). Default is `/healthz`. | +| `--app-health-probe-interval` | `--app-health-probe-interval` | | `dapr.io/app-health-probe-interval` | Number of *seconds* between each health probe. Requires [app health checks to be enabled]({{% ref "app-health.md#configuring-app-health-checks" %}}). Default is `5` | +| `--app-health-probe-timeout` | `--app-health-probe-timeout` | | `dapr.io/app-health-probe-timeout` | Timeout in *milliseconds* for health probe requests. Requires [app health checks to be enabled]({{% ref "app-health.md#configuring-app-health-checks" %}}). Default is `500` | +| `--app-health-threshold` | `--app-health-threshold` | | `dapr.io/app-health-threshold"` | Max number of consecutive failures before the app is considered unhealthy. Requires [app health checks to be enabled]({{% ref "app-health.md#configuring-app-health-checks" %}}). Default is `3` | +| `--sentry-address` | `--sentry-address` | | not supported | Address for the [Sentry CA service]({{% ref sentry %}}) | | `--version` | `--version` | `-v` | not supported | Prints the runtime version | | `--dapr-graceful-shutdown-seconds` | not supported | | `dapr.io/graceful-shutdown-seconds` | Graceful shutdown duration in seconds for Dapr, the maximum duration before forced shutdown when waiting for all in-progress requests to complete. Defaults to `5`. If you are running in Kubernetes mode, this value should not be larger than the Kubernetes termination grace period, who's default value is `30`.| | `--dapr-block-shutdown-duration` | not supported | | `dapr.io/block-shutdown-duration` | Block shutdown duration, if set, blocks the graceful shutdown procedure (as described above) from starting until the given duration has elapsed or the application becomes unhealthy as configured through application health options. This is useful for applications that need to execute Dapr APIs during their own termination procedure. Any new invocations of any Dapr APIs are not available to the application once the block has expired. Accepts [Go duration](https://pkg.go.dev/time#ParseDuration) string. | | not supported | not supported | | `dapr.io/enabled` | Setting this paramater to true injects the Dapr sidecar into the pod | -| not supported | not supported | | `dapr.io/api-token-secret` | Tells Dapr which Kubernetes secret to use for [token-based API authentication]({{< ref api-token >}}). By default this is not set | -| not supported | not supported | | `dapr.io/app-token-secret` | Tells Dapr which Kubernetes secret to use for [token-based application authentication]({{< ref app-api-token >}}). By default, this is not set | +| not supported | not supported | | `dapr.io/api-token-secret` | Tells Dapr which Kubernetes secret to use for [token-based API authentication]({{% ref api-token %}}). By default this is not set | +| not supported | not supported | | `dapr.io/app-token-secret` | Tells Dapr which Kubernetes secret to use for [token-based application authentication]({{% ref app-api-token %}}). By default, this is not set | | `--dapr-listen-addresses` | not supported | | `dapr.io/sidecar-listen-addresses` | Comma separated list of IP addresses that sidecar will listen to. Defaults to all in standalone mode. Defaults to `[::1],127.0.0.1` in Kubernetes. To listen to all IPv4 addresses, use `0.0.0.0`. To listen to all IPv6 addresses, use `[::]`.| | not supported | not supported | | `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| | not supported | not supported | | `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| @@ -70,7 +70,7 @@ This table is meant to help users understand the equivalent options for running | not supported | not supported | | `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`| | not supported | not supported | | `dapr.io/env` | List of environment variable to be injected into the sidecar. Strings consisting of key=value pairs separated by a comma.| | not supported | not supported | | `dapr.io/env-from-secret` | List of environment variables to be injected into the sidecar from secret. Strings consisting of `"key=secret-name:secret-key"` pairs are separated by a comma. | -| not supported | not supported | | `dapr.io/volume-mounts` | List of [pod volumes to be mounted to the sidecar container]({{< ref "kubernetes-volume-mounts" >}}) in read-only mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | -| not supported | not supported | | `dapr.io/volume-mounts-rw` | List of [pod volumes to be mounted to the sidecar container]({{< ref "kubernetes-volume-mounts" >}}) in read-write mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | -| `--disable-builtin-k8s-secret-store` | not supported | | `dapr.io/disable-builtin-k8s-secret-store` | Disables BuiltIn Kubernetes secret store. Default value is false. See [Kubernetes secret store component]({{< ref "kubernetes-secret-store.md" >}}) for details. | +| not supported | not supported | | `dapr.io/volume-mounts` | List of [pod volumes to be mounted to the sidecar container]({{% ref "kubernetes-volume-mounts" %}}) in read-only mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | +| not supported | not supported | | `dapr.io/volume-mounts-rw` | List of [pod volumes to be mounted to the sidecar container]({{% ref "kubernetes-volume-mounts" %}}) in read-write mode. Strings consisting of `volume:path` pairs separated by a comma. Example, `"volume-1:/tmp/mount1,volume-2:/home/root/mount2"`. | +| `--disable-builtin-k8s-secret-store` | not supported | | `dapr.io/disable-builtin-k8s-secret-store` | Disables BuiltIn Kubernetes secret store. Default value is false. See [Kubernetes secret store component]({{% ref "kubernetes-secret-store.md" %}}) for details. | | not supported | not supported | | `dapr.io/sidecar-seccomp-profile-type` | Set the sidecar container's `securityContext.seccompProfile.type` to `Unconfined`, `RuntimeDefault`, or `Localhost`. By default, this annotation is not set on the Dapr sidecar, hence the field is omitted from sidecar container. | diff --git a/daprdocs/content/en/reference/cli/cli-overview.md b/daprdocs/content/en/reference/cli/cli-overview.md index ef9d17e0555..1f1d614eb5c 100644 --- a/daprdocs/content/en/reference/cli/cli-overview.md +++ b/daprdocs/content/en/reference/cli/cli-overview.md @@ -56,25 +56,25 @@ Use "dapr [command] --help" for more information about a command. You can learn more about each Dapr command from the links below. - - [`dapr annotate`]({{< ref dapr-annotate.md >}}) - - [`dapr build-info`]({{< ref dapr-build-info.md >}}) - - [`dapr completion`]({{< ref dapr-completion.md >}}) - - [`dapr components`]({{< ref dapr-components.md >}}) - - [`dapr configurations`]({{< ref dapr-configurations.md >}}) - - [`dapr dashboard`]({{< ref dapr-dashboard.md >}}) - - [`dapr help`]({{< ref dapr-help.md >}}) - - [`dapr init`]({{< ref dapr-init.md >}}) - - [`dapr invoke`]({{< ref dapr-invoke.md >}}) - - [`dapr list`]({{< ref dapr-list.md >}}) - - [`dapr logs`]({{< ref dapr-logs.md >}}) - - [`dapr mtls`]({{< ref dapr-mtls >}}) - - [`dapr publish`]({{< ref dapr-publish.md >}}) - - [`dapr run`]({{< ref dapr-run.md >}}) - - [`dapr status`]({{< ref dapr-status.md >}}) - - [`dapr stop`]({{< ref dapr-stop.md >}}) - - [`dapr uninstall`]({{< ref dapr-uninstall.md >}}) - - [`dapr upgrade`]({{< ref dapr-upgrade.md >}}) - - [`dapr version`]({{< ref dapr-version.md >}}) + - [`dapr annotate`]({{% ref dapr-annotate.md %}}) + - [`dapr build-info`]({{% ref dapr-build-info.md %}}) + - [`dapr completion`]({{% ref dapr-completion.md %}}) + - [`dapr components`]({{% ref dapr-components.md %}}) + - [`dapr configurations`]({{% ref dapr-configurations.md %}}) + - [`dapr dashboard`]({{% ref dapr-dashboard.md %}}) + - [`dapr help`]({{% ref dapr-help.md %}}) + - [`dapr init`]({{% ref dapr-init.md %}}) + - [`dapr invoke`]({{% ref dapr-invoke.md %}}) + - [`dapr list`]({{% ref dapr-list.md %}}) + - [`dapr logs`]({{% ref dapr-logs.md %}}) + - [`dapr mtls`]({{% ref dapr-mtls %}}) + - [`dapr publish`]({{% ref dapr-publish.md %}}) + - [`dapr run`]({{% ref dapr-run.md %}}) + - [`dapr status`]({{% ref dapr-status.md %}}) + - [`dapr stop`]({{% ref dapr-stop.md %}}) + - [`dapr uninstall`]({{% ref dapr-uninstall.md %}}) + - [`dapr upgrade`]({{% ref dapr-upgrade.md %}}) + - [`dapr version`]({{% ref dapr-version.md %}}) ### Environment Variables diff --git a/daprdocs/content/en/reference/cli/dapr-annotate.md b/daprdocs/content/en/reference/cli/dapr-annotate.md index e0e1ba8b90e..c96972a33b5 100644 --- a/daprdocs/content/en/reference/cli/dapr-annotate.md +++ b/daprdocs/content/en/reference/cli/dapr-annotate.md @@ -7,11 +7,11 @@ description: "Add Dapr annotatations to a Kubernetes configuration" ### Description -Add Dapr annotations to a Kubernetes configuration. This enables you to add/change the Dapr annotations on a deployment files. See [Kubernetes annotations]({{< ref arguments-annotations-overview >}}) for a full description of each annotation available in the following list of flags. +Add Dapr annotations to a Kubernetes configuration. This enables you to add/change the Dapr annotations on a deployment files. See [Kubernetes annotations]({{% ref arguments-annotations-overview %}}) for a full description of each annotation available in the following list of flags. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-build-info.md b/daprdocs/content/en/reference/cli/dapr-build-info.md index 7423033794d..f1871e21c01 100644 --- a/daprdocs/content/en/reference/cli/dapr-build-info.md +++ b/daprdocs/content/en/reference/cli/dapr-build-info.md @@ -11,7 +11,7 @@ Get the version and git commit data for `dapr` and `daprd` executables. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-components.md b/daprdocs/content/en/reference/cli/dapr-components.md index db532d724cc..54750ff986d 100644 --- a/daprdocs/content/en/reference/cli/dapr-components.md +++ b/daprdocs/content/en/reference/cli/dapr-components.md @@ -11,7 +11,7 @@ List all Dapr components. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-configurations.md b/daprdocs/content/en/reference/cli/dapr-configurations.md index 07dc0c5278e..5e2c30933fb 100644 --- a/daprdocs/content/en/reference/cli/dapr-configurations.md +++ b/daprdocs/content/en/reference/cli/dapr-configurations.md @@ -11,7 +11,7 @@ List all Dapr configurations. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-dashboard.md b/daprdocs/content/en/reference/cli/dapr-dashboard.md index 6b89de2320d..0822475aa76 100644 --- a/daprdocs/content/en/reference/cli/dapr-dashboard.md +++ b/daprdocs/content/en/reference/cli/dapr-dashboard.md @@ -11,8 +11,8 @@ Start [Dapr dashboard](https://github.com/dapr/dashboard). ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) -- [Kubernetes]({{< ref kubernetes >}}) +- [Self-Hosted]({{% ref self-hosted %}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-init.md b/daprdocs/content/en/reference/cli/dapr-init.md index 3df59f323d5..42fba65e322 100644 --- a/daprdocs/content/en/reference/cli/dapr-init.md +++ b/daprdocs/content/en/reference/cli/dapr-init.md @@ -11,8 +11,8 @@ Install Dapr on supported hosting platforms. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) -- [Kubernetes]({{< ref kubernetes >}}) +- [Self-Hosted]({{% ref self-hosted %}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage @@ -50,9 +50,9 @@ dapr init [flags] ### Examples -{{< tabs "Self-hosted" "Kubernetes" >}} +{{% tabpane "Self-hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} **Install** @@ -64,7 +64,7 @@ Install Dapr by pulling container images for Placement, Scheduler, Redis, and Zi dapr init ``` -Dapr can also run [Slim self-hosted mode]({{< ref self-hosted-no-docker.md >}}), without Docker. +Dapr can also run [Slim self-hosted mode]({{% ref self-hosted-no-docker.md %}}), without Docker. ```bash dapr init -s @@ -82,7 +82,7 @@ dapr init --runtime-version 1.13.4 **Install with image variant** -You can also install Dapr with a particular image variant, for example: [mariner]({{< ref "kubernetes-deploy.md#using-mariner-based-images" >}}). +You can also install Dapr with a particular image variant, for example: [mariner]({{% ref "kubernetes-deploy.md#using-mariner-based-images" %}}). ```bash dapr init --image-variant mariner @@ -157,9 +157,9 @@ Uninstall Dapr from that Docker network. dapr uninstall --all --network mynet ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash dapr init -k @@ -201,6 +201,6 @@ Scenario 2 : dapr image hosted under a new/different directory in private regist dapr init -k --image-registry docker.io/username/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} diff --git a/daprdocs/content/en/reference/cli/dapr-invoke.md b/daprdocs/content/en/reference/cli/dapr-invoke.md index 60bbb550927..1a2a2209c61 100644 --- a/daprdocs/content/en/reference/cli/dapr-invoke.md +++ b/daprdocs/content/en/reference/cli/dapr-invoke.md @@ -11,7 +11,7 @@ Invoke a method on a given Dapr application. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-list.md b/daprdocs/content/en/reference/cli/dapr-list.md index b633bcb3cef..4173eff4dfb 100644 --- a/daprdocs/content/en/reference/cli/dapr-list.md +++ b/daprdocs/content/en/reference/cli/dapr-list.md @@ -11,8 +11,8 @@ List all Dapr instances. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) -- [Kubernetes]({{< ref kubernetes >}}) +- [Self-Hosted]({{% ref self-hosted %}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-logs.md b/daprdocs/content/en/reference/cli/dapr-logs.md index 4c7873e20e8..477a0bbf100 100644 --- a/daprdocs/content/en/reference/cli/dapr-logs.md +++ b/daprdocs/content/en/reference/cli/dapr-logs.md @@ -11,7 +11,7 @@ Get Dapr sidecar logs for an application. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-mtls/_index.md b/daprdocs/content/en/reference/cli/dapr-mtls/_index.md index 1850f2e29e4..47ed1a48ab2 100644 --- a/daprdocs/content/en/reference/cli/dapr-mtls/_index.md +++ b/daprdocs/content/en/reference/cli/dapr-mtls/_index.md @@ -11,7 +11,7 @@ Check if mTLS is enabled. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage @@ -39,9 +39,9 @@ renew-certificate Rotates the existing root Certificate Authority (CA), issuer You can learn more about each sub command from the links below. -- [`dapr mtls expiry`]({{< ref dapr-mtls-expiry.md >}}) -- [`dapr mtls export`]({{< ref dapr-mtls-export.md >}}) -- [`dapr mtls renew-certificate`]({{< ref dapr-mtls-renew-certificate.md >}}) +- [`dapr mtls expiry`]({{% ref dapr-mtls-expiry.md %}}) +- [`dapr mtls export`]({{% ref dapr-mtls-export.md %}}) +- [`dapr mtls renew-certificate`]({{% ref dapr-mtls-renew-certificate.md %}}) ### Examples diff --git a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-expiry.md b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-expiry.md index 31583e187da..0c4d3223aeb 100644 --- a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-expiry.md +++ b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-expiry.md @@ -12,7 +12,7 @@ Checks the expiry of the root Certificate Authority (CA) certificate ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-export.md b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-export.md index dff79fd62b1..ac42e837518 100644 --- a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-export.md +++ b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-export.md @@ -12,7 +12,7 @@ Export the root Certificate Authority (CA), issuer cert and issuer key to local ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-renew-certificate.md b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-renew-certificate.md index 8941c3ea3a7..c1724f9f434 100644 --- a/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-renew-certificate.md +++ b/daprdocs/content/en/reference/cli/dapr-mtls/dapr-mtls-renew-certificate.md @@ -7,11 +7,11 @@ weight: 3000 --- ### Description -This command can be used to renew expiring Dapr certificates. For example the Dapr Sentry service can generate default root and issuer certificates used by applications. For more information see [secure Dapr to Dapr communication]({{< ref "#secure-dapr-to-dapr-communication" >}}) +This command can be used to renew expiring Dapr certificates. For example the Dapr Sentry service can generate default root and issuer certificates used by applications. For more information see [secure Dapr to Dapr communication]({{% ref "#secure-dapr-to-dapr-communication" %}}) ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-publish.md b/daprdocs/content/en/reference/cli/dapr-publish.md index fdf56566ed7..01326cf0ee2 100644 --- a/daprdocs/content/en/reference/cli/dapr-publish.md +++ b/daprdocs/content/en/reference/cli/dapr-publish.md @@ -11,7 +11,7 @@ Publish a pub-sub event. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-run.md b/daprdocs/content/en/reference/cli/dapr-run.md index e29b590ad60..be9d1e86775 100644 --- a/daprdocs/content/en/reference/cli/dapr-run.md +++ b/daprdocs/content/en/reference/cli/dapr-run.md @@ -7,11 +7,11 @@ description: "Detailed information on the run CLI command" ### Description -Run Dapr and (optionally) your application side by side. A full list comparing daprd arguments, CLI arguments, and Kubernetes annotations can be found [here]({{< ref arguments-annotations-overview.md >}}). +Run Dapr and (optionally) your application side by side. A full list comparing daprd arguments, CLI arguments, and Kubernetes annotations can be found [here]({{% ref arguments-annotations-overview.md %}}). ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage @@ -27,7 +27,7 @@ dapr run [flags] [command] | `--app-max-concurrency` | | `unlimited` | The concurrency level of the application; default is unlimited | | `--app-port`, `-p` | `APP_PORT` | | The port your application is listening on | | `--app-protocol`, `-P` | | `http` | The protocol Dapr uses to talk to the application. Valid values are: `http`, `grpc`, `https` (HTTP with TLS), `grpcs` (gRPC with TLS), `h2c` (HTTP/2 Cleartext) | -| `--resources-path`, `-d` | | Linux/Mac: `$HOME/.dapr/components`
Windows: `%USERPROFILE%\.dapr\components` | The path for resources directory. If you've organized your resources into multiple folders (for example, components in one folder, resiliency policies in another), you can define multiple resource paths. See [example]({{< ref "#examples" >}}) below. | +| `--resources-path`, `-d` | | Linux/Mac: `$HOME/.dapr/components`
Windows: `%USERPROFILE%\.dapr\components` | The path for resources directory. If you've organized your resources into multiple folders (for example, components in one folder, resiliency policies in another), you can define multiple resource paths. See [example]({{% ref "#examples" %}}) below. | | `--app-channel-address` | | `127.0.0.1` | The network address the application listens on | | `--runtime-path` | | | Dapr runtime install path | | `--config`, `-c` | | Linux/Mac: `$HOME/.dapr/config.yaml`
Windows: `%USERPROFILE%\.dapr\config.yaml` | Dapr configuration file | @@ -36,7 +36,7 @@ dapr run [flags] [command] | `--dapr-http-port`, `-H` | `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 the help message | -| `--run-file`, `-f` | | Linux/MacOS: `$HOME/.dapr/dapr.yaml` | Run multiple applications at once using a Multi-App Run template file. Currently in [alpha]({{< ref "support-preview-features.md" >}}) and only available in Linux/MacOS | +| `--run-file`, `-f` | | Linux/MacOS: `$HOME/.dapr/dapr.yaml` | Run multiple applications at once using a Multi-App Run template file. Currently in [alpha]({{% ref "support-preview-features.md" %}}) and only available in Linux/MacOS | | `--image` | | | Use a custom Docker image. Format is `repository/image` for Docker Hub, or `example.com/repository/image` for a custom registry. | | `--log-level` | | `info` | The log verbosity. Valid values are: `debug`, `info`, `warn`, `error`, `fatal`, or `panic` | | `--enable-api-logging` | | `false` | Enable the logging of all API calls from application to Dapr | @@ -52,7 +52,7 @@ dapr run [flags] [command] | `--unix-domain-socket`, `-u` | | | Path to a unix domain socket dir mount. If specified, communication with the Dapr sidecar uses unix domain sockets for lower latency and greater throughput when compared to using TCP ports. Not available on Windows. | | `--dapr-http-max-request-size` | | `4` | Max size of the request body in MB. | | `--dapr-http-read-buffer-size` | | `4` | Max size of the HTTP read buffer in KB. This also limits the maximum size of HTTP headers. The default 4 KB | -| `--kubernetes`, `-k` | | | Running Dapr on Kubernetes, and used for [Multi-App Run template files on Kubernetes]({{< ref multi-app-dapr-run >}}). | +| `--kubernetes`, `-k` | | | Running Dapr on Kubernetes, and used for [Multi-App Run template files on Kubernetes]({{% ref multi-app-dapr-run %}}). | | `--components-path`, `-d` | | Linux/Mac: `$HOME/.dapr/components`
Windows: `%USERPROFILE%\.dapr\components` | **Deprecated** in favor of `--resources-path` | ### Examples diff --git a/daprdocs/content/en/reference/cli/dapr-status.md b/daprdocs/content/en/reference/cli/dapr-status.md index 5943be1f323..5e622f1ed27 100644 --- a/daprdocs/content/en/reference/cli/dapr-status.md +++ b/daprdocs/content/en/reference/cli/dapr-status.md @@ -11,7 +11,7 @@ Show the health status of Dapr services. ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-stop.md b/daprdocs/content/en/reference/cli/dapr-stop.md index ef7acd50fb2..c31fcac4066 100644 --- a/daprdocs/content/en/reference/cli/dapr-stop.md +++ b/daprdocs/content/en/reference/cli/dapr-stop.md @@ -11,7 +11,7 @@ Stop Dapr instances and their associated apps. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage @@ -25,7 +25,7 @@ dapr stop [flags] | -------------------- | -------------------- | ------- | -------------------------------- | | `--app-id`, `-a` | `APP_ID` | | The application id to be stopped | | `--help`, `-h` | | | Print this help message | -| `--run-file`, `-f` | | | Stop running multiple applications at once using a Multi-App Run template file. Currently in [alpha]({{< ref "support-preview-features.md" >}}) and only available in Linux/MacOS | +| `--run-file`, `-f` | | | Stop running multiple applications at once using a Multi-App Run template file. Currently in [alpha]({{% ref "support-preview-features.md" %}}) and only available in Linux/MacOS | ### Examples diff --git a/daprdocs/content/en/reference/cli/dapr-uninstall.md b/daprdocs/content/en/reference/cli/dapr-uninstall.md index 8779878206a..42ba6893d13 100644 --- a/daprdocs/content/en/reference/cli/dapr-uninstall.md +++ b/daprdocs/content/en/reference/cli/dapr-uninstall.md @@ -11,8 +11,8 @@ Uninstall Dapr runtime. ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) -- [Kubernetes]({{< ref kubernetes >}}) +- [Self-Hosted]({{% ref self-hosted %}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage diff --git a/daprdocs/content/en/reference/cli/dapr-upgrade.md b/daprdocs/content/en/reference/cli/dapr-upgrade.md index ef55cd11d74..1c98df2829d 100644 --- a/daprdocs/content/en/reference/cli/dapr-upgrade.md +++ b/daprdocs/content/en/reference/cli/dapr-upgrade.md @@ -17,7 +17,7 @@ Prior to downgrading, confirm components are backwards compatible and applicatio ### Supported platforms -- [Kubernetes]({{< ref kubernetes >}}) +- [Kubernetes]({{% ref kubernetes %}}) ### Usage @@ -68,4 +68,4 @@ Please see docs.dapr.io for certificate renewal instructions to avoid service in ### Related links -- [Upgrade Dapr on a Kubernetes cluster]({{< ref kubernetes-upgrade.md >}}) \ No newline at end of file +- [Upgrade Dapr on a Kubernetes cluster]({{% ref kubernetes-upgrade.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/cli/dapr-version.md b/daprdocs/content/en/reference/cli/dapr-version.md index 436f7ae5300..31b86fe4803 100644 --- a/daprdocs/content/en/reference/cli/dapr-version.md +++ b/daprdocs/content/en/reference/cli/dapr-version.md @@ -11,7 +11,7 @@ Print the version for `dapr` CLI and `daprd` executables either in normal or JSO ### Supported platforms -- [Self-Hosted]({{< ref self-hosted >}}) +- [Self-Hosted]({{% ref self-hosted %}}) ### Usage diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md b/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md index f3731af00c6..073d5452f97 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/_index.md @@ -9,10 +9,10 @@ aliases: no_list: true --- -The following table lists input and output bindings supported by the Dapr bindings building block. [Learn how to set up different input and output binding components for Dapr bindings.]({{< ref setup-bindings.md >}}) +The following table lists input and output bindings supported by the Dapr bindings building block. [Learn how to set up different input and output binding components for Dapr bindings.]({{% ref setup-bindings.md %}}) -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} Every binding component has its own set of properties. Click the name link to see the component specification for each binding. -{{< partial "components/bindings.html" >}} +{{% partial "components/bindings.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/alicloud-dingtalk.md b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloud-dingtalk.md index 2d112e2aa98..50ed4cf9238 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/alicloud-dingtalk.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloud-dingtalk.md @@ -6,7 +6,7 @@ description: "Detailed documentation on the Alibaba Cloud DingTalk binding compo --- ## Setup Dapr component -To setup an Alibaba Cloud DingTalk binding create a component of type `bindings.dingtalk.webhook`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) 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. +To setup an Alibaba Cloud DingTalk binding create a component of type `bindings.dingtalk.webhook`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) 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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -28,7 +28,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -80,8 +80,8 @@ curl -X POST http://localhost:3500/v1.0/bindings/myDingTalk \ ``` ## 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 >}}) +- [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/reference/components-reference/supported-bindings/alicloudoss.md b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudoss.md index 0857b6dcbd9..1ec0af323cc 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudoss.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudoss.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Alibaba Cloud Object Storage binding create a component of type `bindings.alicloud.oss`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) 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. +To setup an Alibaba Cloud Object Storage binding create a component of type `bindings.alicloud.oss`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) 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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -68,48 +68,48 @@ By default, a random UUID is auto-generated as the object key. See below for Met **Saving to a random generated UUID file** -{{< tabs "Windows" "Linux/MacOS" >}} +{{% tabpane "Windows" "Linux/MacOS" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}}
**Saving to a specific file** -{{< tabs "Windows" "Linux/MacOS" >}} +{{% tabpane "Windows" "Linux/MacOS" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-key\" } }" http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-key" } }' http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} Windows CMD requires escaping the `"` character. @@ -134,7 +134,7 @@ You can set the key with the following metadata: ## Related links -- [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 >}}) +- [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/reference/components-reference/supported-bindings/alicloudsls.md b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudsls.md index df500758ec2..0fe91a11408 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudsls.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudsls.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Alibaba Cloud SLS binding create a component of type `bindings.alicloud.sls`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an Alibaba Cloud SLS binding create a component of type `bindings.alicloud.sls`. 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 @@ -67,25 +67,25 @@ Note, the value of "project","logstore","topic" and "source" property should #### Example -{{< tabs "Windows" "Linux/MacOS" >}} +{{% tabpane "Windows" "Linux/MacOS" %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST -H "Content-Type: application/json" -d "{\"metadata\":{\"project\":\"project-name\",\"logstore\":\"logstore-name\",\"topic\":\"topic-name\",\"source\":\"source-name\"},\"data\":{\"log-filed\":\"log info\"}" http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST -H "Content-Type: application/json" -d '{"metadata":{"project":"project-name","logstore":"logstore-name","topic":"topic-name","source":"source-name"},"data":{"log-filed":"log info"}' http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}}
@@ -94,7 +94,7 @@ As Alibaba Cloud SLS producer API is asynchronous, there is no response for this ## Related links -- [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 >}}) +- [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/reference/components-reference/supported-bindings/alicloudtablestore.md b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudtablestore.md index 67aa3fc16d1..29c2e49cdad 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudtablestore.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/alicloudtablestore.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Alibaba Cloud Tablestore binding create a component of type `bindings.alicloud.tablestore`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) 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. +To setup an Alibaba Cloud Tablestore binding create a component of type `bindings.alicloud.tablestore`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) 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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -35,7 +35,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -137,6 +137,6 @@ Note the `metadata.primaryKeys` field is mandatory. ## Related links -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Bindings building block]({{% ref bindings %}}) +- [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/reference/components-reference/supported-bindings/apns.md b/daprdocs/content/en/reference/components-reference/supported-bindings/apns.md index a50100d8210..aab3b30499f 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/apns.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/apns.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Apple Push Notifications binding create a component of type `bindings.apns`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Apple Push Notifications binding create a component of type `bindings.apns`. 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 @@ -131,8 +131,8 @@ Besides the `device-token` value, the HTTP headers specified in the [Apple docum ## 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 >}}) +- [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/reference/components-reference/supported-bindings/blobstorage.md b/daprdocs/content/en/reference/components-reference/supported-bindings/blobstorage.md index 008d10a7e27..ec325d2a97a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/blobstorage.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/blobstorage.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Blob Storage binding create a component of type `bindings.azure.blobstorage`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Azure Blob Storage binding create a component of type `bindings.azure.blobstorage`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -35,7 +35,7 @@ spec: # value: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -52,7 +52,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Blob Storage binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Blob Storage binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). ## Binding support @@ -63,7 +63,7 @@ This component supports **output binding** with the following operations: - `delete` : [Delete blob](#delete-blob) - `list`: [List blobs](#list-blobs) -The Blob storage component's **input binding** triggers and pushes events using [Azure Event Grid]({{< ref eventgrid.md >}}). +The Blob storage component's **input binding** triggers and pushes events using [Azure Event Grid]({{% ref eventgrid.md %}}). Refer to the [Reacting to Blob storage events](https://learn.microsoft.com/azure/storage/blobs/storage-blob-event-overview) guide for more set up and more information. @@ -85,42 +85,42 @@ To perform a create blob operation, invoke the Azure Blob Storage binding with a ##### Save text to a random generated UUID blob -{{< tabs Windows Linux >}} - {{% codetab %}} +{{% tabpane Windows Linux %}} + {{% tab %}} On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save text to a specific blob -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"blobName\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "blobName": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save a file to a blob @@ -148,22 +148,22 @@ spec: Then you can upload it as you would normally: -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"blobName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "blobName": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -197,22 +197,22 @@ The metadata parameters are: #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"blobName\": \"myblob\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "blobName": "myblob" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -245,60 +245,60 @@ The metadata parameters are: ##### Delete blob -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"blobName\": \"myblob\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "blobName": "myblob" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Delete blob snapshots only -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"blobName\": \"myblob\", \"deleteSnapshots\": \"only\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "blobName": "myblob", "deleteSnapshots": "only" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Delete blob including snapshots -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"blobName\": \"myblob\", \"deleteSnapshots\": \"include\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "blobName": "myblob", "deleteSnapshots": "include" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -427,8 +427,8 @@ Applications publishing to an Azure Blob Storage output binding should send a me ## 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 >}}) +- [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/reference/components-reference/supported-bindings/cloudflare-queues.md b/daprdocs/content/en/reference/components-reference/supported-bindings/cloudflare-queues.md index 2a1420b6df6..3dc60c2bfef 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/cloudflare-queues.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/cloudflare-queues.md @@ -12,7 +12,7 @@ aliases: This output binding for Dapr allows interacting with [Cloudflare Queues](https://developers.cloudflare.com/queues/) to **publish** new messages. It is currently not possible to consume messages from a Queue using Dapr. -To setup a Cloudflare Queues binding, create a component of type `bindings.cloudflare.queues`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup a Cloudflare Queues binding, create a component of type `bindings.cloudflare.queues`. 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 @@ -49,7 +49,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -99,9 +99,9 @@ Dapr can manage the Worker for you automatically, or you can pre-provision a Wor Use a separate Worker for each Dapr component. Do not use the same Worker script for different Cloudflare Queues bindings, and do not use the same Worker script for different Cloudflare components in Dapr (for example, the Workers KV state store and the Queues binding). {{% /alert %}} -{{< tabs "Let Dapr manage the Worker" "Manually provision the Worker script" >}} +{{% tabpane "Let Dapr manage the Worker" "Manually provision the Worker script" %}} -{{% codetab %}} +{{% tab %}} If you want to let Dapr manage the Worker for you, you will need to provide these 3 metadata options: @@ -117,9 +117,9 @@ If you want to let Dapr manage the Worker for you, you will need to provide thes When Dapr is configured to manage the Worker for you, when a Dapr Runtime is started it checks that the Worker exists and it's up-to-date. If the Worker doesn't exist, or if it's using an outdated version, Dapr creates or upgrades it for you automatically. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} If you'd rather not give Dapr permissions to deploy Worker scripts for you, you can manually provision a Worker for Dapr to use. Note that if you have multiple Dapr components that interact with Cloudflare services via a Worker, you will need to create a separate Worker for each one of them. @@ -175,9 +175,9 @@ Once your Worker has been deployed, you will need to initialize the component wi - **`workerName`**: Name of the Worker script. This is the value you set in the `name` property in the `wrangler.toml` file. - **`workerUrl`**: URL of the deployed Worker. The `npx wrangler command` will show the full URL to you, for example `https://mydaprqueue.mydomain.workers.dev`. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Generate an Ed25519 key pair @@ -189,9 +189,9 @@ All Cloudflare Workers listen on the public Internet, so Dapr needs to use addit To let Dapr issue bearer tokens, and have your Worker validate them, you will need to generate a new Ed25519 key pair. Here are examples of generating the key pair using OpenSSL or the step CLI. -{{< tabs "Generate with OpenSSL" "Generate with the step CLI" >}} +{{% tabpane "Generate with OpenSSL" "Generate with the step CLI" %}} -{{% codetab %}} +{{% tab %}} > Support for generating Ed25519 keys is available since OpenSSL 1.1.0, so the commands below will not work if you're using an older version of OpenSSL. @@ -212,9 +212,9 @@ openssl pkey -in private.pem -pubout -out public.pem > $(brew --prefix)/opt/openssl@3/bin/openssl pkey -in private.pem -pubout -out public.pem > ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} If you don't have the step CLI already, install it following the [official instructions](https://smallstep.com/docs/step-cli/installation). @@ -228,9 +228,9 @@ step crypto keypair \ --insecure --no-password ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Regardless of how you generated your key pair, with the instructions above you'll have two files: @@ -243,8 +243,8 @@ Protect the private part of your key and treat it as a secret value! ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Bindings building block]({{% ref bindings %}}) +- [How-To: Use bindings to interface with external resources]({{% ref howto-bindings.md %}}) +- [Bindings API reference]({{% ref bindings_api.md %}}) - Documentation for [Cloudflare Queues](https://developers.cloudflare.com/queues/) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md b/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md index 90ea8edfbbc..f8444768511 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup commercetools GraphQL binding create a component of type `bindings.commercetools`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup commercetools GraphQL binding create a component of type `bindings.commercetools`. 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 @@ -35,7 +35,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -59,9 +59,9 @@ This component supports **output binding** with the following operations: ## 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 >}}) +- [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 %}}) - [Sample app](https://github.com/dapr/samples/tree/master/commercetools-graphql-sample) that leverages the commercetools binding with sample GraphQL query diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdb.md b/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdb.md index 813166f0265..6f1abe3c6c1 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdb.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Cosmos DB binding create a component of type `bindings.azure.cosmosdb`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Azure Cosmos DB binding create a component of type `bindings.azure.cosmosdb`. 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 @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -50,7 +50,7 @@ For more information see [Azure Cosmos DB resource model](https://docs.microsof ### Microsoft Entra ID authentication -The Azure Cosmos DB binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Cosmos DB binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). You can read additional information for setting up Cosmos DB with Azure AD authentication in the [section below](#setting-up-cosmos-db-for-authenticating-with-azure-ad). @@ -66,7 +66,7 @@ Azure Cosmos DB shares a strict metadata request rate limit across all database Therefore several strategies must be applied to avoid simultaneous new connections to Azure Cosmos DB: -- Ensure sidecars of applications only load the Azure Cosmos DB component when they require it to avoid unnecessary database connections. This can be done by [scoping your components to specific applications]({{< ref component-scopes.md >}}#application-access-to-components-with-scopes). +- Ensure sidecars of applications only load the Azure Cosmos DB component when they require it to avoid unnecessary database connections. This can be done by [scoping your components to specific applications]({{% ref component-scopes.md %}}#application-access-to-components-with-scopes). - Choose deployment strategies that sequentially deploy or start your applications to minimize bursts in new connections to your Azure Cosmos DB accounts. - Avoid reusing the same Azure Cosmos DB account for unrelated databases or systems (even outside of Dapr). Distinct Azure Cosmos DB accounts have distinct rate limits. - Increase the `initTimeout` value to allow the component to retry connecting to Azure Cosmos DB during side car initialization for up to 5 minutes. The default value is `5s` and should be increased. When using Kubernetes, increasing this value may also require an update to your [Readiness and Liveness probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/). @@ -92,7 +92,7 @@ When using the Dapr Cosmos DB binding and authenticating with Azure AD, you ne Prerequisites: -- You need a Service Principal created as per the instructions in the [authenticating to Azure]({{< ref authenticating-azure.md >}}) page. You need the ID of the Service Principal for the commands below (note that this is different from the client ID of your application, or the value you use for `azureClientId` in the metadata). +- You need a Service Principal created as per the instructions in the [authenticating to Azure]({{% ref authenticating-azure.md %}}) page. You need the ID of the Service Principal for the commands below (note that this is different from the client ID of your application, or the value you use for `azureClientId` in the metadata). - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - [jq](https://stedolan.github.io/jq/download/) - The scripts below are optimized for a bash or zsh shell @@ -126,8 +126,8 @@ az cosmosdb sql role assignment 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 >}}) +- [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/reference/components-reference/supported-bindings/cosmosdbgremlinapi.md b/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdbgremlinapi.md index 47aa5b506ec..4b49b1b0a7a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdbgremlinapi.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/cosmosdbgremlinapi.md @@ -7,7 +7,7 @@ description: "Detailed documentation on the Azure Cosmos DB (Gremlin API) bindin ## Component format -To setup an Azure Cosmos DB (Gremlin API) binding create a component of type `bindings.azure.cosmosdb.gremlinapi`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an Azure Cosmos DB (Gremlin API) binding create a component of type `bindings.azure.cosmosdb.gremlinapi`. 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 @@ -27,7 +27,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -59,8 +59,8 @@ This component supports **output binding** with the following operations: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/cron.md b/daprdocs/content/en/reference/components-reference/supported-bindings/cron.md index 72daed2dc5e..e4e5daf9162 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/cron.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/cron.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup cron binding create a component of type `bindings.cron`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup cron binding create a component of type `bindings.cron`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -81,8 +81,8 @@ This component supports **input** binding interface. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/dynamodb.md b/daprdocs/content/en/reference/components-reference/supported-bindings/dynamodb.md index 348d15515c8..00f804a38cc 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/dynamodb.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/dynamodb.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS DynamoDB binding create a component of type `bindings.aws.dynamodb`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup AWS DynamoDB binding create a component of type `bindings.aws.dynamodb`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ```yaml apiVersion: dapr.io/v1alpha1 @@ -35,7 +35,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -61,9 +61,9 @@ This component supports **output binding** with the following operations: ## 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 >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [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 %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md b/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md index f970e8cce2f..47e7e5f783b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Azure Event Grid binding create a component of type `bindings.azure.eventgrid`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an Azure Event Grid binding create a component of type `bindings.azure.eventgrid`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://docs.microsoft.com/azure/event-grid/) for the documentation for Azure Event Grid. @@ -52,7 +52,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -98,12 +98,12 @@ In the following table, you can find the list of Dapr components that can raise | Event sources | Dapr components | | ------------- | --------------- | -| [Azure Blob Storage](https://learn.microsoft.com/azure/storage/blobs/) | [Azure Blob Storage binding]({{< ref blobstorage.md >}})
[Azure Blob Storage state store]({{< ref setup-azure-blobstorage.md >}}) | -| [Azure Cache for Redis](https://learn.microsoft.com/azure/azure-cache-for-redis/cache-overview) | [Redis binding]({{< ref redis.md >}})
[Redis pub/sub]({{< ref setup-redis-pubsub.md >}}) | -| [Azure Event Hubs](https://learn.microsoft.com/azure/event-hubs/event-hubs-about) | [Azure Event Hubs pub/sub]({{< ref setup-azure-eventhubs.md >}})
[Azure Event Hubs binding]({{< ref eventhubs.md >}}) | -| [Azure IoT Hub](https://learn.microsoft.com/azure/iot-hub/iot-concepts-and-iot-hub) | [Azure Event Hubs pub/sub]({{< ref setup-azure-eventhubs.md >}})
[Azure Event Hubs binding]({{< ref eventhubs.md >}}) | -| [Azure Service Bus](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview) | [Azure Service Bus binding]({{< ref servicebusqueues.md >}})
[Azure Service Bus pub/sub topics]({{< ref setup-azure-servicebus-topics.md >}}) and [queues]({{< ref setup-azure-servicebus-queues.md >}}) | -| [Azure SignalR Service](https://learn.microsoft.com/azure/azure-signalr/signalr-overview) | [SignalR binding]({{< ref signalr.md >}}) | +| [Azure Blob Storage](https://learn.microsoft.com/azure/storage/blobs/) | [Azure Blob Storage binding]({{% ref blobstorage.md %}})
[Azure Blob Storage state store]({{% ref setup-azure-blobstorage.md %}}) | +| [Azure Cache for Redis](https://learn.microsoft.com/azure/azure-cache-for-redis/cache-overview) | [Redis binding]({{% ref redis.md %}})
[Redis pub/sub]({{% ref setup-redis-pubsub.md %}}) | +| [Azure Event Hubs](https://learn.microsoft.com/azure/event-hubs/event-hubs-about) | [Azure Event Hubs pub/sub]({{% ref setup-azure-eventhubs.md %}})
[Azure Event Hubs binding]({{% ref eventhubs.md %}}) | +| [Azure IoT Hub](https://learn.microsoft.com/azure/iot-hub/iot-concepts-and-iot-hub) | [Azure Event Hubs pub/sub]({{% ref setup-azure-eventhubs.md %}})
[Azure Event Hubs binding]({{% ref eventhubs.md %}}) | +| [Azure Service Bus](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messaging-overview) | [Azure Service Bus binding]({{% ref servicebusqueues.md %}})
[Azure Service Bus pub/sub topics]({{% ref setup-azure-servicebus-topics.md %}}) and [queues]({{% ref setup-azure-servicebus-queues.md %}}) | +| [Azure SignalR Service](https://learn.microsoft.com/azure/azure-signalr/signalr-overview) | [SignalR binding]({{% ref signalr.md %}}) | ## Microsoft Entra ID credentials @@ -315,8 +315,8 @@ $ kubectl delete pod nginx-nginx-ingress-controller-649df94867-fp6mg ## 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 >}}) +- [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/reference/components-reference/supported-bindings/eventhubs.md b/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md index 08215f0e1d9..989f93ab366 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/eventhubs.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Azure Event Hubs binding, create a component of type `bindings.azure.eventhubs`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an Azure Event Hubs binding, create a component of type `bindings.azure.eventhubs`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://docs.microsoft.com/azure/event-hubs/event-hubs-dotnet-framework-getstarted-send) for instructions on how to set up an Event Hub. @@ -65,7 +65,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -73,8 +73,8 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Binding support | Details | Example | |--------------------|:--------:|------------|-----|---------| | `eventHub` | Y* | Input/Output | The name of the Event Hubs hub ("topic"). Required if using Microsoft Entra ID authentication or if the connection string doesn't contain an `EntityPath` value | `mytopic` | -| `connectionString` | Y* | Input/Output | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{< ref "authenticating-azure.md" >}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` -| `eventHubNamespace` | Y* | Input/Output | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{< ref "authenticating-azure.md" >}}) | `"namespace"` +| `connectionString` | Y* | Input/Output | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` +| `eventHubNamespace` | Y* | Input/Output | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` | `enableEntityManagement` | N | Input/Output | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true"`, `"false"` | `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` | `resourceGroupName` | N | Input/Output | Name of the resource group the Event Hub namespace is part of. Required when entity management is enabled | `"test-rg"` @@ -91,7 +91,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Event Hubs pub/sub component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Event Hubs pub/sub component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). ## Binding support @@ -137,8 +137,8 @@ For example, the headers of a HTTP `Read()` response would contain: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/gcpbucket.md b/daprdocs/content/en/reference/components-reference/supported-bindings/gcpbucket.md index 4aff149d319..efc54ca35f7 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/gcpbucket.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/gcpbucket.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup GCP Storage Bucket binding create a component of type `bindings.gcp.bucket`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup GCP Storage Bucket binding create a component of type `bindings.gcp.bucket`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -50,7 +50,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -104,42 +104,42 @@ The metadata parameters are: #### Examples ##### Save text to a random generated UUID file -{{< tabs Windows Linux >}} - {{% codetab %}} +{{% tabpane Windows Linux %}} + {{% tab %}} On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save text to a specific file -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Upload a file @@ -148,22 +148,22 @@ To upload a file, pass the file contents as the data payload; you may want to en Then you can upload it as you would normally: -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"(YOUR_FILE_CONTENTS)\", \"metadata\": { \"key\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "$(cat my-test-file.jpg)", "metadata": { "key": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response The response body will contain the following JSON: @@ -195,22 +195,22 @@ The metadata parameters are: #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -239,22 +239,22 @@ The metadata parameters are: ##### Delete object -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response An HTTP 204 (No Content) and empty body will be retuned if successful. @@ -323,8 +323,8 @@ The list of objects will be returned as JSON array in the following form: ``` ## 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 >}}) +- [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/reference/components-reference/supported-bindings/gcppubsub.md b/daprdocs/content/en/reference/components-reference/supported-bindings/gcppubsub.md index 0608fa7d9aa..3a4cb18b6b2 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/gcppubsub.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/gcppubsub.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup GCP Pub/Sub binding create a component of type `bindings.gcp.pubsub`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup GCP Pub/Sub binding create a component of type `bindings.gcp.pubsub`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -49,7 +49,7 @@ spec: value: "input, output" ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -80,8 +80,8 @@ This component supports **output binding** with the following operations: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/graghql.md b/daprdocs/content/en/reference/components-reference/supported-bindings/graghql.md index ee13e035470..1d1a56f92f3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/graghql.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/graghql.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup GraphQL binding create a component of type `bindings.graphql`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. To separate normal config settings (e.g. endpoint) from headers, "header:" is used a prefix on the header names. +To setup GraphQL binding create a component of type `bindings.graphql`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. To separate normal config settings (e.g. endpoint) from headers, "header:" is used a prefix on the header names. ```yaml @@ -30,7 +30,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -80,8 +80,8 @@ Metadata: map[string]string{ ## 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 >}}) +- [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/reference/components-reference/supported-bindings/http.md b/daprdocs/content/en/reference/components-reference/supported-bindings/http.md index 1b9ad8fb768..24cd754f9a1 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/http.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/http.md @@ -9,7 +9,7 @@ aliases: ## Alternative -The [service invocation API]({{< ref service_invocation_api.md >}}) allows invoking non-Dapr HTTP endpoints and is the recommended approach. Read ["How-To: Invoke Non-Dapr Endpoints using HTTP"]({{< ref howto-invoke-non-dapr-endpoints.md >}}) for more information. +The [service invocation API]({{% ref service_invocation_api.md %}}) allows invoking non-Dapr HTTP endpoints and is the recommended approach. Read ["How-To: Invoke Non-Dapr Endpoints using HTTP"]({{% ref howto-invoke-non-dapr-endpoints.md %}}) for more information. ## Setup Dapr component @@ -87,7 +87,7 @@ The values for **MTLSRootCA**, **MTLSClientCert** and **MTLSClientKey** can be p {{% alert title="Note" color="primary" %}} Metadata fields **MTLSRootCA**, **MTLSClientCert** and **MTLSClientKey** are used to configure (m)TLS authentication. -To use mTLS authentication, you must provide all three fields. See [mTLS]({{< ref "#using-mtls-or-enabling-client-tls-authentication-along-with-https" >}}) for more details. You can also provide only **MTLSRootCA**, to enable **HTTPS** connection with a certificate signed by a custom CA. See [HTTPS]({{< ref "#install-the-ssl-certificate-in-the-sidecar" >}}) section for more details. +To use mTLS authentication, you must provide all three fields. See [mTLS]({{% ref "#using-mtls-or-enabling-client-tls-authentication-along-with-https" %}}) for more details. You can also provide only **MTLSRootCA**, to enable **HTTPS** connection with a certificate signed by a custom CA. See [HTTPS]({{% ref "#install-the-ssl-certificate-in-the-sidecar" %}}) section for more details. {{% /alert %}} @@ -151,43 +151,43 @@ The response body contains the data returned by the HTTP endpoint. The `data` f **Requesting the base URL** -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d "{ \"operation\": \"get\" }" \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d '{ "operation": "get" }' \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} **Requesting a specific path** -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} -{{% codetab %}} +{{% tab %}} ```sh curl -d "{ \"operation\": \"get\", \"metadata\": { \"path\": \"/things/1234\" } }" \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```sh curl -d '{ "operation": "get", "metadata": { "path": "/things/1234" } }' \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Sending and updating data @@ -213,30 +213,30 @@ For example, the default content type is `application/json; charset=utf-8`. This **Posting a new record** -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} -{{% codetab %}} +{{% tab %}} ```sh curl -d "{ \"operation\": \"post\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"path\": \"/things\" } }" \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```sh curl -d '{ "operation": "post", "data": "YOUR_BASE_64_CONTENT", "metadata": { "path": "/things" } }' \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Using HTTPS The HTTP binding can also be used with HTTPS endpoints by configuring the Dapr sidecar to trust the server's SSL certificate. 1. Update the binding URL to use `https` instead of `http`. -1. If you need to add a custom TLS certificate, refer [How-To: Install certificates in the Dapr sidecar]({{< ref install-certificates >}}), to install the TLS certificates in the sidecar. +1. If you need to add a custom TLS certificate, refer [How-To: Install certificates in the Dapr sidecar]({{% ref install-certificates %}}), to install the TLS certificates in the sidecar. ### Example @@ -258,9 +258,9 @@ spec: #### Install the TLS certificate in the sidecar -{{< tabs Self-Hosted Kubernetes >}} +{{% tabpane Self-Hosted Kubernetes %}} -{{% codetab %}} +{{% tab %}} When the sidecar is not running inside a container, the TLS certificate can be directly installed on the host operating system. Below is an example when the sidecar is running as a container. The SSL certificate is located on the host computer at `/tmp/ssl/cert.pem`. @@ -286,11 +286,11 @@ services: - my-app ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} -The sidecar can read the TLS certificate from a variety of sources. See [How-to: Mount Pod volumes to the Dapr sidecar]({{< ref kubernetes-volume-mounts >}}) for more. In this example, we store the TLS certificate as a Kubernetes secret. +The sidecar can read the TLS certificate from a variety of sources. See [How-to: Mount Pod volumes to the Dapr sidecar]({{% ref kubernetes-volume-mounts %}}) for more. In this example, we store the TLS certificate as a Kubernetes secret. ```bash kubectl create secret generic myapp-cert --from-file /tmp/ssl/cert.pem @@ -329,32 +329,32 @@ spec: ... ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Invoke the binding securely -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d "{ \"operation\": \"get\" }" \ https://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d '{ "operation": "get" }' \ https://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} -HTTPS binding support can also be configured using the **MTLSRootCA** metadata option. This will add the specified certificate to the list of trusted certificates for the binding. There's no specific preference for either method. While the **MTLSRootCA** option is easy to use and doesn't require any changes to the sidecar, it accepts only one certificate. If you need to trust multiple certificates, you need to [install them in the sidecar by following the steps above]({{< ref "#install-the-ssl-certificate-in-the-sidecar" >}}). +HTTPS binding support can also be configured using the **MTLSRootCA** metadata option. This will add the specified certificate to the list of trusted certificates for the binding. There's no specific preference for either method. While the **MTLSRootCA** option is easy to use and doesn't require any changes to the sidecar, it accepts only one certificate. If you need to trust multiple certificates, you need to [install them in the sidecar by following the steps above]({{% ref "#install-the-ssl-certificate-in-the-sidecar" %}}). {{% /alert %}} ## Using mTLS or enabling client TLS authentication along with HTTPS @@ -380,9 +380,9 @@ You can use this when the server with which the HTTP binding is configured to co ## 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 >}}) -- [How-To: Install certificates in the Dapr sidecar]({{< ref install-certificates >}}) +- [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 %}}) +- [How-To: Install certificates in the Dapr sidecar]({{% ref install-certificates %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/huawei-obs.md b/daprdocs/content/en/reference/components-reference/supported-bindings/huawei-obs.md index 41212384c0b..ac8e9f27944 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/huawei-obs.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/huawei-obs.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Huawei Object Storage Service (OBS) (output) binding create a component of type `bindings.huawei.obs`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Huawei Object Storage Service (OBS) (output) binding create a component of type `bindings.huawei.obs`. 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 @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -72,42 +72,42 @@ To perform a create operation, invoke the Huawei OBS binding with a `POST` metho #### Examples ##### Save text to a random generated UUID file -{{< tabs Windows Linux >}} - {{% codetab %}} +{{% tabpane Windows Linux %}} + {{% tab %}} On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save text to a specific file -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -133,23 +133,23 @@ To upload a binary file (for example, _.jpg_, _.zip_), invoke the Huawei OBS bin #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"upload\", \"data\": { \"sourceFile\": \".\my-test-file.jpg\" }, \"metadata\": { \"key\": \"my-test-file.jpg\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "upload", "data": { "sourceFile": "./my-test-file.jpg" }, "metadata": { "key": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -174,22 +174,22 @@ The metadata parameters are: #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -218,22 +218,22 @@ The metadata parameters are: ##### Delete object -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -265,22 +265,22 @@ The data parameters are: #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"list\", \"data\": { \"maxResults\": 5, \"prefix\": \"dapr-\", \"marker\": \"obstest\", \"delimiter\": \"jpg\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "list", "data": { "maxResults": 5, "prefix": "dapr-", "marker": "obstest", "delimiter": "jpg" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -288,8 +288,8 @@ The response body contains the list of found objects. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/influxdb.md b/daprdocs/content/en/reference/components-reference/supported-bindings/influxdb.md index 13d355be930..da33e59ae4b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/influxdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/influxdb.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup InfluxDB binding create a component of type `bindings.influx`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup InfluxDB binding create a component of type `bindings.influx`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -32,7 +32,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -68,8 +68,8 @@ curl -X POST http://localhost:3500/v1.0/bindings/myInfluxBinding \ ## 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 >}}) +- [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/reference/components-reference/supported-bindings/kafka.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kafka.md index 413e1893fe6..acd98b337c7 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kafka.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kafka.md @@ -9,10 +9,10 @@ aliases: ## Component format -To setup Kafka binding create a component of type `bindings.kafka`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. For details on using `secretKeyRef`, see the guide on [how to reference secrets in components]({{< ref component-secrets.md >}}). +To setup Kafka binding create a component of type `bindings.kafka`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. For details on using `secretKeyRef`, see the guide on [how to reference secrets in components]({{% ref component-secrets.md %}}). -All component metadata field values can carry [templated metadata values]({{< ref "component-schema.md#templated-metadata-values" >}}), which are resolved on Dapr sidecar startup. -For example, you can choose to use `{namespace}` as the `consumerGroup`, to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{< ref "howto-namespace.md#with-namespace-consumer-groups">}}). +All component metadata field values can carry [templated metadata values]({{% ref "component-schema.md#templated-metadata-values" %}}), which are resolved on Dapr sidecar startup. +For example, you can choose to use `{namespace}` as the `consumerGroup`, to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{% ref "howto-namespace.md#with-namespace-consumer-groups"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -80,7 +80,7 @@ spec: | `authRequired` | N | *Deprecated* | Enable [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) authentication with the Kafka brokers. | `"true"`, `"false"` | | `authType` | Y | Input/Output | Configure or disable authentication. Supported values: `none`, `password`, `mtls`, or `oidc` | `"password"`, `"none"` | | `saslUsername` | N | Input/Output | The SASL username used for authentication. Only required if `authRequired` is set to `"true"`. | `"adminuser"` | -| `saslPassword` | N | Input/Output | The SASL password used for authentication. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}). Only required if `authRequired` is set to `"true"`. | `""`, `"KeFg23!"` | +| `saslPassword` | N | Input/Output | The SASL password used for authentication. Can be `secretKeyRef` to use a [secret reference]({{% ref component-secrets.md %}}). Only required if `authRequired` is set to `"true"`. | `""`, `"KeFg23!"` | | `saslMechanism` | N | Input/Output | The SASL authentication mechanism you'd like to use. Only required if `authtype` is set to `"password"`. If not provided, defaults to `PLAINTEXT`, which could cause a break for some services, like Amazon Managed Service for Kafka. | `"SHA-512", "SHA-256", "PLAINTEXT"` | | `initialOffset` | N | Input | The initial offset to use if no offset was previously committed. Should be "newest" or "oldest". Defaults to "newest". | `"oldest"` | | `maxMessageBytes` | N | Input/Output | The maximum size in bytes allowed for a single Kafka message. Defaults to 1024. | `"2048"` | @@ -116,7 +116,7 @@ This component supports **output binding** with the following operations: ## Authentication -Kafka supports a variety of authentication schemes and Dapr supports several: SASL password, mTLS, OIDC/OAuth2. [Learn more about Kafka's authentication method for both the Kafka binding and Kafka pub/sub components]({{< ref "setup-apache-kafka.md#authentication" >}}). +Kafka supports a variety of authentication schemes and Dapr supports several: SASL password, mTLS, OIDC/OAuth2. [Learn more about Kafka's authentication method for both the Kafka binding and Kafka pub/sub components]({{% ref "setup-apache-kafka.md#authentication" %}}). ## Specifying a partition key @@ -146,8 +146,8 @@ An HTTP 204 (No Content) and empty body will be returned if successful. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/kinesis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kinesis.md index 656c7ba2291..8b81e7e801d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kinesis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kinesis.md @@ -8,10 +8,10 @@ aliases: --- ## Component format -To setup AWS Kinesis binding create a component of type `bindings.aws.kinesis`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup AWS Kinesis binding create a component of type `bindings.aws.kinesis`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://aws.amazon.com/kinesis/data-streams/getting-started/) for instructions on how to set up an AWS Kinesis data streams -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ```yaml apiVersion: dapr.io/v1alpha1 @@ -40,7 +40,7 @@ spec: value: "input, output" ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -69,9 +69,9 @@ This component supports **output binding** with the following operations: - `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 >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [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 %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kitex.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kitex.md index 0c674f6bf4a..02e47b9ab87 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kitex.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kitex.md @@ -15,7 +15,7 @@ Currently, Kitex only supports Thrift generic calls. The implementation integrat ## Component format -To setup an Kitex binding, create a component of type `bindings.kitex`. See the [How-to: Use output bindings to interface with external resources]({{< ref "howto-bindings.md#1-create-a-binding" >}}) guide on creating and applying a binding configuration. +To setup an Kitex binding, create a component of type `bindings.kitex`. See the [How-to: Use output bindings to interface with external resources]({{% ref "howto-bindings.md#1-create-a-binding" %}}) guide on creating and applying a binding configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -84,8 +84,8 @@ For example, the variable `reqData` needs to be _encoded_ by the Thrift protocol ## 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 >}}) +- [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/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index e5112d2b29a..baeed70dbad 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup KubeMQ binding create a component of type `bindings.kubemq`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup KubeMQ binding create a component of type `bindings.kubemq`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -48,9 +48,9 @@ This component supports both **input and output** binding interfaces. ## Create a KubeMQ broker -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} 1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key @@ -61,9 +61,9 @@ docker run -d -p 8080:8080 -p 50000:50000 -p 9090:9090 -e KUBEMQ_TOKEN= ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Install KubeMQ CLI Go to [KubeMQ CLI](https://github.com/kubemq-io/kubemqctl/releases) and download the latest version of the CLI. ## Browse KubeMQ Dashboard -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} Open a browser and navigate to [http://localhost:8080](http://localhost:8080) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With KubeMQCTL installed, run the following command: ```bash @@ -104,17 +104,17 @@ Or, with kubectl installed, run port-forward command: ```bash kubectl port-forward svc/kubemq-cluster-api -n kubemq 8080:8080 ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## KubeMQ Documentation Visit [KubeMQ Documentation](https://docs.kubemq.io/) for more information. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/kubernetes-binding.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubernetes-binding.md index ee6389e0009..5996d533926 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubernetes-binding.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubernetes-binding.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Kubernetes Events binding create a component of type `bindings.kubernetes`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Kubernetes Events binding create a component of type `bindings.kubernetes`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -118,8 +118,8 @@ roleRef: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/localstorage.md b/daprdocs/content/en/reference/components-reference/supported-bindings/localstorage.md index 233783ff27b..f8e999fcafc 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/localstorage.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/localstorage.md @@ -9,7 +9,7 @@ aliases: ## 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. +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 @@ -58,64 +58,64 @@ To perform a create file operation, invoke the Local Storage binding with a `POS ##### Save text to a random generated UUID file -{{< tabs Windows Linux >}} - {{% codetab %}} +{{% tabpane Windows Linux %}} + {{% tab %}} On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save text to a specific file -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"fileName\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "fileName": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save a binary file To upload a file, encode it as Base64. The binding should automatically detect the Base64 encoding. -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"fileName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "fileName": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -143,22 +143,22 @@ To perform a get file operation, invoke the Local Storage binding with a `POST` #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "fileName": "myfile" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -187,22 +187,22 @@ If you only want to list the files beneath a particular directory below the `roo #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"list\", \"metadata\": { \"fileName\": \"my/cool/directory\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "list", "metadata": { "fileName": "my/cool/directory" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -223,22 +223,22 @@ To perform a delete file operation, invoke the Local Storage binding with a `POS #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "fileName": "myfile" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -260,7 +260,7 @@ By default the Local Storage output binding auto generates a UUID as the file na ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Bindings building block]({{% ref bindings %}}) +- [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/reference/components-reference/supported-bindings/mqtt3.md b/daprdocs/content/en/reference/components-reference/supported-bindings/mqtt3.md index 1bef18dfc5f..095810125ae 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/mqtt3.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/mqtt3.md @@ -10,7 +10,7 @@ aliases: ## Component format -To setup a MQTT3 binding create a component of type `bindings.mqtt3`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup a MQTT3 binding create a component of type `bindings.mqtt3`. 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 @@ -39,7 +39,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -131,7 +131,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} > In this case, the value of the consumer ID is random every time Dapr restarts, so you should set `cleanSession` to `true` as well. @@ -174,8 +174,8 @@ You can override the retain property in component metadata on a per-request basi ## 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 >}}) +- [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/reference/components-reference/supported-bindings/mysql.md b/daprdocs/content/en/reference/components-reference/supported-bindings/mysql.md index 881e8eeb405..490da4335bb 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/mysql.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/mysql.md @@ -11,7 +11,7 @@ aliases: The MySQL binding allows connecting to both MySQL and MariaDB databases. In this document, we refer to "MySQL" to indicate both databases. -To setup a MySQL binding create a component of type `bindings.mysql`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup a MySQL binding create a component of type `bindings.mysql`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. The MySQL binding uses [Go-MySQL-Driver](https://github.com/go-sql-driver/mysql) internally. @@ -39,7 +39,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). Note that you can not use secret just for username/password. If you use secret, it has to be for the complete connection string. {{% /alert %}} @@ -187,7 +187,7 @@ The `close` operation can be used to explicitly close the DB connection and retu ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Bindings building block]({{% ref bindings %}}) +- [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/reference/components-reference/supported-bindings/openai.md b/daprdocs/content/en/reference/components-reference/supported-bindings/openai.md index a5876566764..ffc26d7f198 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/openai.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/openai.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Azure OpenAI binding create a component of type `bindings.azure.openai`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an Azure OpenAI binding create a component of type `bindings.azure.openai`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://learn.microsoft.com/azure/cognitive-services/openai/overview/) for the documentation for Azure OpenAI Service. @@ -28,7 +28,7 @@ spec: value: "https://myopenai.openai.azure.com" ``` {{% alert title="Warning" color="warning" %}} -The above example uses `apiKey` as a plain string. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses `apiKey` as a plain string. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -43,7 +43,7 @@ The above example uses `apiKey` as a plain string. It is recommended to use a s ### Microsoft Entra ID authentication -The Azure OpenAI binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure OpenAI binding component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). #### Example Configuration @@ -102,15 +102,15 @@ The data parameters are: Read more about the importance and usage of these parameters in the [Azure OpenAI API documentation](https://learn.microsoft.com/azure/ai-services/openai/reference). #### Examples -{{< tabs Linux >}} - {{% codetab %}} +{{% tabpane Linux %}} + {{% tab %}} ```bash curl -d '{ "data": {"deploymentId: "my-model" , "prompt": "A dog is ", "maxTokens":15}, "operation": "completion" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -174,9 +174,9 @@ Each message is of the form: #### Example -{{< tabs Linux >}} +{{% tabpane Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "data": { @@ -199,9 +199,9 @@ curl -d '{ }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -251,9 +251,9 @@ The data parameters are: #### Example -{{< tabs Linux >}} +{{% tabpane Linux %}} -{{% codetab %}} +{{% tab %}} ```bash curl -d '{ "data": { @@ -264,9 +264,9 @@ curl -d '{ }' \ http://localhost:/v1.0/bindings/ ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -284,9 +284,9 @@ Watch [the following Community Call presentation](https://youtu.be/rTovKpG0rhY?s ## 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 >}}) +- [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 %}}) - [Azure OpenAI Rest examples](https://learn.microsoft.com/azure/ai-services/openai/reference) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/postgresql.md b/daprdocs/content/en/reference/components-reference/supported-bindings/postgresql.md index a77814b8e1e..26d14e6c8ed 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/postgresql.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/postgresql.md @@ -10,7 +10,7 @@ aliases: ## Component format -To setup PostgreSQL binding create a component of type `bindings.postgresql`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup PostgreSQL binding create a component of type `bindings.postgresql`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -28,7 +28,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -210,8 +210,8 @@ The `close` operation can be used to explicitly close the DB connection and retu ## 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 >}}) +- [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/reference/components-reference/supported-bindings/postmark.md b/daprdocs/content/en/reference/components-reference/supported-bindings/postmark.md index 2dac3847b16..3e6d0025187 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/postmark.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/postmark.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Postmark binding create a component of type `bindings.postmark`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Postmark binding create a component of type `bindings.postmark`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -32,7 +32,7 @@ spec: value: "Hello!" # optional ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -74,8 +74,8 @@ This component supports **output binding** with the following operations: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/rabbitmq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/rabbitmq.md index d18d735e711..a96262c5f8e 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/rabbitmq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/rabbitmq.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup RabbitMQ binding create a component of type `bindings.rabbitmq`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup RabbitMQ binding create a component of type `bindings.rabbitmq`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -54,7 +54,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -97,8 +97,8 @@ The field name is `ttlInSeconds`. Example: -{{< tabs Windows Linux >}} -{{% codetab %}} +{{% tabpane Windows Linux %}} +{{% tab %}} ```shell curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ -H "Content-Type: application/json" \ @@ -112,9 +112,9 @@ curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ \"operation\": \"create\" }" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ -H "Content-Type: application/json" \ @@ -128,8 +128,8 @@ curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ "operation": "create" }' ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} ## Specifying a priority per message @@ -142,8 +142,8 @@ The field name is `priority`. Example: -{{< tabs Windows Linux >}} -{{% codetab %}} +{{% tabpane Windows Linux %}} +{{% tab %}} ```shell curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ -H "Content-Type: application/json" \ @@ -157,9 +157,9 @@ curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ \"operation\": \"create\" }" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```shell curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ -H "Content-Type: application/json" \ @@ -173,13 +173,13 @@ curl -X POST http://localhost:3500/v1.0/bindings/myRabbitMQ \ "operation": "create" }' ``` -{{% /codetab %}} -{{< /tabs >}} +{{% /tab %}} +{{% /tabpane %}} ## 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 >}}) +- [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/reference/components-reference/supported-bindings/redis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md index 4fc8dbb1b47..8da62aea31d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Redis binding create a component of type `bindings.redis`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Redis binding create a component of type `bindings.redis`. 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 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -41,10 +41,10 @@ The above example uses secrets as plain strings. It is recommended to use a secr | `redisHost` | Y | Output | The Redis host address | `"localhost:6379"` | | `redisPassword` | N | Output | The Redis password | `"password"` | | `redisUsername` | N | Output | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `"username"` | -| `useEntraID` | N | Output | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{< ref "#create-a-redis-instance" >}}) | `"true"`, `"false"` | +| `useEntraID` | N | Output | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{% ref "#create-a-redis-instance" %}}) | `"true"`, `"false"` | | `enableTLS` | N | Output | If the Redis instance supports TLS with public certificates it can be configured to enable or disable TLS. Defaults to `"false"` | `"true"`, `"false"` | -| `clientCert` | N | Output | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | -| `clientKey` | N | Output | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | +| `clientCert` | N | Output | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | +| `clientKey` | N | Output | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | | `failover` | N | Output | Property to enabled failover configuration. Needs sentinalMasterName to be set. Defaults to `"false"` | `"true"`, `"false"` | `sentinelMasterName` | N | Output | The sentinel master name. See [Redis Sentinel Documentation](https://redis.io/docs/reference/sentinel-clients/) | `""`, `"127.0.0.1:6379"` | `redeliverInterval` | N | Output | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` @@ -165,14 +165,14 @@ Dapr can use any Redis instance - containerized, running on your local dev machi *Note: Dapr does not support Redis >= 7. It is recommended to use Redis 6* -{{< tabs "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" %}} -{{% codetab %}} +{{% tab %}} The Dapr CLI will automatically create and setup a Redis Streams instance for you. The Redis instance will be installed via Docker when you run `dapr init`, and the component file will be created in default directory. (`$HOME/.dapr/components` directory (Mac/Linux) or `%USERPROFILE%\.dapr\components` on Windows). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). 1. Install Redis into your cluster. @@ -201,13 +201,13 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K - name: redisPassword value: "lhDOkwTlp0" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS Redis](https://aws.amazon.com/redis/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. [Create an Azure Cache for Redis instance using the official Microsoft documentation.](https://docs.microsoft.com/azure/azure-cache-for-redis/quickstart-create-redis) 1. Once your instance is created, grab the Host name (FQDN) and your access key from the Azure portal. @@ -224,7 +224,7 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you saved earlier. - **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + **Note:** In a production-grade application, follow [secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. 1. Enable EntraID support: - Enable Entra ID authentication on your Azure Redis server. This may takes a few minutes. @@ -232,15 +232,15 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set `enableTLS` to `"true"` to support TLS. -> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{< ref "howto-mi.md#set-up-identities-in-your-component" >}}). +> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{% ref "howto-mi.md#set-up-identities-in-your-component" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} @@ -250,7 +250,7 @@ The Dapr CLI automatically deploys a local redis instance in self hosted mode as ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Bindings building block]({{% ref bindings %}}) +- [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/reference/components-reference/supported-bindings/rethinkdb.md b/daprdocs/content/en/reference/components-reference/supported-bindings/rethinkdb.md index e159a7bb774..2a178045cb2 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/rethinkdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/rethinkdb.md @@ -9,11 +9,11 @@ aliases: ## Component format -The [RethinkDB state store]({{}}) supports transactions which means it can be used to support Dapr actors. Dapr persists only the actor's current state which doesn't allow the users to track how actor's state may have changed over time. +The [RethinkDB state store]({{%ref setup-rethinkdb.md%}}) supports transactions which means it can be used to support Dapr actors. Dapr persists only the actor's current state which doesn't allow the users to track how actor's state may have changed over time. To enable users to track change of the state of actors, this binding leverages RethinkDB's built-in capability to monitor RethinkDB table and event on change with both the `old` and `new` state. This binding creates a subscription on the Dapr state table and streams these changes using the Dapr input binding interface. -To setup RethinkDB statechange binding create a component of type `bindings.rethinkdb.statechange`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup RethinkDB statechange binding create a component of type `bindings.rethinkdb.statechange`. 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 @@ -47,8 +47,8 @@ This component only supports **input** binding interface. ## Related links - [Combine this binding with Dapr Pub/Sub](https://github.com/mchmarny/dapr-state-store-change-handler) to stream state changes to a topic -- [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 >}}) +- [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/reference/components-reference/supported-bindings/s3.md b/daprdocs/content/en/reference/components-reference/supported-bindings/s3.md index 0f78f118bc5..cde449d3afe 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/s3.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/s3.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup an AWS S3 binding create a component of type `bindings.aws.s3`. This binding works with other S3-compatible services, such as Minio. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup an AWS S3 binding create a component of type `bindings.aws.s3`. This binding works with other S3-compatible services, such as Minio. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes. +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes. ```yaml apiVersion: dapr.io/v1alpha1 @@ -49,7 +49,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -75,9 +75,9 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet ### S3 Bucket Creation -{{< tabs "Minio" "LocalStack" "AWS" >}} +{{% tabpane "Minio" "LocalStack" "AWS" %}} -{{% codetab %}} +{{% tab %}} ### Using with Minio [Minio](https://min.io/) is a service that exposes local storage as S3-compatible block storage, and it's a popular alternative to S3 especially in development environments. You can use the S3 binding with Minio too, with some configuration tweaks: @@ -86,9 +86,9 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet 3. The value for `region` is not important; you can set it to `us-east-1`. 4. Depending on your environment, you may need to set `disableSSL` to `true` if you're connecting to Minio using a non-secure connection (using the `http://` protocol). If you are using a secure connection (`https://` protocol) but with a self-signed certificate, you may need to set `insecureSSL` to `true`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} For local development, the [LocalStack project](https://github.com/localstack/localstack) is used to integrate AWS S3. Follow [these instructions](https://github.com/localstack/localstack#running) to run LocalStack. To run LocalStack locally from the command line using Docker, use a `docker-compose.yaml` similar to the following: @@ -138,17 +138,17 @@ spec: value: "us-east-1" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To use the S3 component, you need to use an existing bucket. Follow the [AWS documentation for creating a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Binding support @@ -188,23 +188,23 @@ http://localhost:/v1.0/bindings/ To presign an object with a specified time-to-live, use the `presignTTL` metadata key on a `create` request. Valid values for `presignTTL` are [Go duration strings](https://pkg.go.dev/maze.io/x/duration#:~:text=A%20duration%20string%20is%20a,w%22%2C%20%22y%22). -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"presignTTL\": \"15m\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "presignTTL": "15m" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Response @@ -221,42 +221,42 @@ The response body contains the following example JSON: #### Examples ##### Save text to a random generated UUID file -{{< tabs Windows Linux >}} - {{% codetab %}} +{{% tabpane Windows Linux %}} + {{% tab %}} On Windows, utilize cmd prompt (PowerShell has different escaping mechanism) ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\" }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World" }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save text to a specific file -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"Hello World\", \"metadata\": { \"key\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "Hello World", "metadata": { "key": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Save a file to a object @@ -291,42 +291,42 @@ spec: Then you can upload it as you would normally: -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"key\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "key": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Upload from file path To upload a file from a supplied path (relative or absolute), use the `filepath` metadata key on a `create` request that contains empty `data` fields. -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"create\", \"metadata\": { \"filePath\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "metadata": { "filePath": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -344,23 +344,23 @@ The response body will contain the following JSON: To presign an existing S3 object with a specified time-to-live, use the `presignTTL` and `key` metadata keys on a `presign` request. Valid values for `presignTTL` are [Go duration strings](https://pkg.go.dev/maze.io/x/duration#:~:text=A%20duration%20string%20is%20a,w%22%2C%20%22y%22). -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"presign\", \"metadata\": { \"presignTTL\": \"15m\", \"key\": \"my-test-file.txt\" } }" \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "presign", "metadata": { "presignTTL": "15m", "key": "my-test-file.txt" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ##### Response @@ -391,22 +391,22 @@ The metadata parameters are: #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -435,22 +435,22 @@ The metadata parameters are: ##### Delete object -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"key\": \"my-test-file.txt\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "key": "my-test-file.txt" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -517,9 +517,9 @@ The list of objects will be returned as JSON array in the following form: ## 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 >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [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 %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/sendgrid.md b/daprdocs/content/en/reference/components-reference/supported-bindings/sendgrid.md index 3c18f0fe395..2b6dddc6e7a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/sendgrid.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/sendgrid.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Twilio SendGrid binding create a component of type `bindings.twilio.sendgrid`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Twilio SendGrid binding create a component of type `bindings.twilio.sendgrid`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -44,7 +44,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -98,8 +98,8 @@ If a dynamic template is used, a `dynamicTemplateId` needs to be provided and th ## 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 >}}) +- [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/reference/components-reference/supported-bindings/servicebusqueues.md b/daprdocs/content/en/reference/components-reference/supported-bindings/servicebusqueues.md index 9d554794148..9dc5f05b179 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/servicebusqueues.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/servicebusqueues.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Service Bus Queues binding create a component of type `bindings.azure.servicebusqueues`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Azure Service Bus Queues binding create a component of type `bindings.azure.servicebusqueues`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ### Connection String Authentication @@ -60,7 +60,7 @@ spec: # value: "input, output" ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -92,7 +92,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Service Bus Queues binding component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Service Bus Queues binding component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). #### Example Configuration @@ -135,7 +135,7 @@ Azure Service Bus messages extend the Dapr message format with additional contex ### Sending a message with metadata -To set Azure Service Bus metadata when sending a message, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{< ref "bindings_api.md" >}}). +To set Azure Service Bus metadata when sending a message, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{% ref "bindings_api.md" %}}). - `metadata.MessageId` - `metadata.CorrelationId` @@ -178,9 +178,9 @@ Time to live can be defined on a per-queue level (as illustrated above) or at th To set time to live at message level use the `metadata` section in the request body during the binding invocation: the field name is `ttlInSeconds`. -{{< tabs "Linux">}} +{{% tabpane "Linux"%}} -{{% codetab %}} +{{% tab %}} ```shell curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \ @@ -195,9 +195,9 @@ curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \ "operation": "create" }' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Schedule a message @@ -207,9 +207,9 @@ To schedule a message, use the `metadata` section in the request body during the The supported timestamp formats are [RFC1123](https://www.rfc-editor.org/rfc/rfc1123) and [RFC3339](https://www.rfc-editor.org/rfc/rfc3339). -{{< tabs "Linux">}} +{{% tabpane "Linux"%}} -{{% codetab %}} +{{% tab %}} ```shell curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \ @@ -225,14 +225,14 @@ curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \ }' ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## 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 >}}) +- [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/reference/components-reference/supported-bindings/ses.md b/daprdocs/content/en/reference/components-reference/supported-bindings/ses.md index 696dd01b820..85ef4b1ef60 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/ses.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/ses.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS binding create a component of type `bindings.aws.ses`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup AWS binding create a component of type `bindings.aws.ses`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ```yaml apiVersion: dapr.io/v1alpha1 @@ -43,7 +43,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -99,8 +99,8 @@ Example: The `emailTo`, `emailCc` and `emailBcc` fields can contain multiple email addresses separated by a semicolon. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/sftp.md b/daprdocs/content/en/reference/components-reference/supported-bindings/sftp.md index 2b70e456d0b..aa15db1f6ac 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/sftp.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/sftp.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up the SFTP binding, create a component of type `bindings.sftp`. See [this guide]({{< ref bindings-overview.md >}}) on how to create and apply a binding configuration. +To set up the SFTP binding, create a component of type `bindings.sftp`. See [this guide]({{% ref bindings-overview.md %}}) on how to create and apply a binding configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -79,22 +79,22 @@ To perform a create file operation, invoke the SFTP binding with a `POST` method #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d "{ \"operation\": \"create\", \"data\": \"YOUR_BASE_64_CONTENT\", \"metadata\": { \"fileName\": \"my-test-file.jpg\" } }" http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "create", "data": "YOUR_BASE_64_CONTENT", "metadata": { "fileName": "my-test-file.jpg" } }' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -122,22 +122,22 @@ To perform a get file operation, invoke the SFTP binding with a `POST` method an #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"get\", \"metadata\": { \"fileName\": \"filename\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "get", "metadata": { "fileName": "filename" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -166,22 +166,22 @@ If you only want to list the files beneath a particular directory below the `roo #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"list\", \"metadata\": { \"fileName\": \"my/cool/directory\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "list", "metadata": { "fileName": "my/cool/directory" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -202,22 +202,22 @@ To perform a delete file operation, invoke the SFTP binding with a `POST` method #### Example -{{< tabs Windows Linux >}} +{{% tabpane Windows Linux %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ \"operation\": \"delete\", \"metadata\": { \"fileName\": \"myfile\" }}' http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} - {{% codetab %}} + {{% tab %}} ```bash curl -d '{ "operation": "delete", "metadata": { "fileName": "myfile" }}' \ http://localhost:/v1.0/bindings/ ``` - {{% /codetab %}} + {{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} #### Response @@ -225,7 +225,7 @@ An HTTP 204 (No Content) and empty body is returned if successful. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Bindings building block]({{< ref bindings >}}) -- [How-To: Use bindings to interface with external resources]({{< ref howto-bindings.md >}}) -- [Bindings API reference]({{< ref bindings_api.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Bindings building block]({{% ref bindings %}}) +- [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/reference/components-reference/supported-bindings/signalr.md b/daprdocs/content/en/reference/components-reference/supported-bindings/signalr.md index ea29d744a0d..cb3d78e7114 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/signalr.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/signalr.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure SignalR binding create a component of type `bindings.azure.signalr`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Azure SignalR binding create a component of type `bindings.azure.signalr`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -28,7 +28,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -42,7 +42,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure SignalR binding component supports authentication using all Microsoft Entra ID mechanisms. See the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}) to learn more about the relevant component metadata fields based on your choice of Microsoft Entra ID authentication mechanism. +The Azure SignalR binding component supports authentication using all Microsoft Entra ID mechanisms. See the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}) to learn more about the relevant component metadata fields based on your choice of Microsoft Entra ID authentication mechanism. You have two options to authenticate this component with Microsoft Entra ID: @@ -92,8 +92,8 @@ For more information on integration Azure SignalR into a solution check the [doc ## 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 >}}) +- [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/reference/components-reference/supported-bindings/smtp.md b/daprdocs/content/en/reference/components-reference/supported-bindings/smtp.md index 54879886c6d..073a2b85954 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/smtp.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/smtp.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup SMTP binding create a component of type `bindings.smtp`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup SMTP binding create a component of type `bindings.smtp`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -46,7 +46,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The example configuration shown above, contain a username and password as plain-text strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The example configuration shown above, contain a username and password as plain-text strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -103,8 +103,8 @@ Example: The `emailTo`, `emailCC` and `emailBCC` fields can contain multiple email addresses separated by a semicolon. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/sns.md b/daprdocs/content/en/reference/components-reference/supported-bindings/sns.md index 094d763a480..27980a30e36 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/sns.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/sns.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS SNS binding create a component of type `bindings.aws.sns`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup AWS SNS binding create a component of type `bindings.aws.sns`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ```yaml apiVersion: dapr.io/v1alpha1 @@ -37,7 +37,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -63,9 +63,9 @@ This component supports **output binding** with the following operations: ## 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 >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [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 %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/sqs.md b/daprdocs/content/en/reference/components-reference/supported-bindings/sqs.md index 35e67106326..109033ac26d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/sqs.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/sqs.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS SQS binding create a component of type `bindings.aws.sqs`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup AWS SQS binding create a component of type `bindings.aws.sqs`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ```yaml apiVersion: dapr.io/v1alpha1 @@ -37,7 +37,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -66,9 +66,9 @@ This component supports **output binding** with the following operations: ## 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 >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [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 %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md b/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md index 6562364a38b..2e593bdc173 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Storage Queues binding create a component of type `bindings.azure.storagequeues`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Azure Storage Queues binding create a component of type `bindings.azure.storagequeues`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -44,7 +44,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -64,7 +64,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Storage Queue binding component supports authentication using all Microsoft Entra ID mechanisms. See the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}) to learn more about the relevant component metadata fields based on your choice of Microsoft Entra ID authentication mechanism. +The Azure Storage Queue binding component supports authentication using all Microsoft Entra ID mechanisms. See the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}) to learn more about the relevant component metadata fields based on your choice of Microsoft Entra ID authentication mechanism. ## Binding support @@ -100,8 +100,8 @@ curl -X POST http://localhost:3500/v1.0/bindings/myStorageQueue \ ## 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 >}}) +- [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/reference/components-reference/supported-bindings/twilio.md b/daprdocs/content/en/reference/components-reference/supported-bindings/twilio.md index 96c552e82ab..9ce042458c8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/twilio.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/twilio.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Twilio SMS binding create a component of type `bindings.twilio.sms`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Twilio SMS binding create a component of type `bindings.twilio.sms`. 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 @@ -30,7 +30,7 @@ spec: value: "*****************" ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -51,8 +51,8 @@ This component supports **output binding** with the following operations: ## 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 >}}) +- [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/reference/components-reference/supported-bindings/wasm.md b/daprdocs/content/en/reference/components-reference/supported-bindings/wasm.md index c2fb5468be5..e1d45d835b0 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/wasm.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/wasm.md @@ -34,7 +34,7 @@ WASI. Wasm binaries are loaded from a URL. For example, the URL `file://rewrite.wasm` loads `rewrite.wasm` from the current directory of the process. On Kubernetes, -see [How to: Mount Pod volumes to the Dapr sidecar]({{< ref kubernetes-volume-mounts.md >}}) +see [How to: Mount Pod volumes to the Dapr sidecar]({{% ref kubernetes-volume-mounts.md %}}) to configure a filesystem mount that can contain Wasm binaries. It is also possible to fetch the Wasm binary from a remote URL. In this case, the URL must point exactly to one Wasm binary. For example: @@ -53,13 +53,13 @@ You can find example code for making HTTP calls in a variety of languages here: * [TypeScript](https://github.com/dev-wasm/dev-wasm-ts/tree/main/http) {{% alert title="Note" color="primary" %}} -If you just want to make an HTTP call, it is simpler to use the [service invocation API]({{< ref howto-invoke-non-dapr-endpoints.md >}}). However, if you need to add your own logic - for example, filtering or calling to multiple API endpoints - consider using Wasm. +If you just want to make an HTTP call, it is simpler to use the [service invocation API]({{% ref howto-invoke-non-dapr-endpoints.md %}}). However, if you need to add your own logic - for example, filtering or calling to multiple API endpoints - consider using Wasm. {{% /alert %}} ## Component format To configure a Wasm binding, create a component of type -`bindings.wasm`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) +`bindings.wasm`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. ```yaml @@ -131,8 +131,8 @@ $ curl -X POST http://localhost:3500/v1.0/bindings/wasm -d' ## 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 >}}) +- [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/reference/components-reference/supported-bindings/zeebe-command.md b/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-command.md index 76def5a6b42..1ac96337466 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-command.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-command.md @@ -7,7 +7,7 @@ description: "Detailed documentation on the Zeebe command binding component" ## Component format -To setup Zeebe command binding create a component of type `bindings.zeebe.command`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Zeebe command binding create a component of type `bindings.zeebe.command`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://docs.camunda.io/docs/components/zeebe/zeebe-overview/) for Zeebe documentation. @@ -147,9 +147,9 @@ The metadata parameters are: The binding returns a JSON with the following response: -{{< tabs "BPMN" "DMN" >}} +{{% tabpane "BPMN" "DMN" %}} -{{% codetab %}} +{{% tab %}} ```json { @@ -169,9 +169,9 @@ The binding returns a JSON with the following response: } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```json { @@ -204,9 +204,9 @@ The binding returns a JSON with the following response: } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The response values are: @@ -251,9 +251,9 @@ For more information please visit the [official documentation](https://docs.camu To perform a `create-instance` operation, invoke the Zeebe command binding with a `POST` method, and the following JSON body: -{{< tabs "By BPMN process ID" "By process definition key" "Synchronous execution" >}} +{{% tabpane "By BPMN process ID" "By process definition key" "Synchronous execution" %}} -{{% codetab %}} +{{% tab %}} ```json { @@ -269,9 +269,9 @@ To perform a `create-instance` operation, invoke the Zeebe command binding with } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```json { @@ -287,9 +287,9 @@ To perform a `create-instance` operation, invoke the Zeebe command binding with } ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```json { @@ -308,9 +308,9 @@ To perform a `create-instance` operation, invoke the Zeebe command binding with } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} The data parameters are: @@ -703,8 +703,8 @@ The binding does not return a response body. ## 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 >}}) +- [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/reference/components-reference/supported-bindings/zeebe-jobworker.md b/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-jobworker.md index 7b2fba07d7f..a4d0e6aaaea 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-jobworker.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/zeebe-jobworker.md @@ -7,7 +7,7 @@ description: "Detailed documentation on the Zeebe JobWorker binding component" ## Component format -To setup Zeebe JobWorker binding create a component of type `bindings.zeebe.jobworker`. See [this guide]({{< ref "howto-bindings.md#1-create-a-binding" >}}) on how to create and apply a binding configuration. +To setup Zeebe JobWorker binding create a component of type `bindings.zeebe.jobworker`. See [this guide]({{% ref "howto-bindings.md#1-create-a-binding" %}}) on how to create and apply a binding configuration. See [this](https://docs.camunda.io/docs/components/concepts/job-workers/) for Zeebe JobWorker documentation. @@ -128,8 +128,8 @@ original data type so that it can be converted back to the equivalent data type ## 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 >}}) \ No newline at end of file +- [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 %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md index b8e80f12216..a883b926105 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/_index.md @@ -9,6 +9,6 @@ aliases: no_list: true --- -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/configuration-stores.html" >}} +{{% partial "components/configuration-stores.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md index eb591b99e83..3db6a4bba94 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/azure-appconfig-configuration-store.md @@ -45,7 +45,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -63,12 +63,12 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Authenticating with Connection String -Access an App Configuration instance using its connection string, which is available in the Azure portal. Since connection strings contain credential information, you should treat them as secrets and [use a secret store]({{< ref component-secrets.md >}}). +Access an App Configuration instance using its connection string, which is available in the Azure portal. Since connection strings contain credential information, you should treat them as secrets and [use a secret store]({{% ref component-secrets.md %}}). ## Authenticating with Microsoft Entra ID The Azure App Configuration configuration store component also supports authentication with Microsoft Entra ID. Before you enable this component: -- Read the [Authenticating to Azure]({{< ref authenticating-azure.md >}}) document. +- Read the [Authenticating to Azure]({{% ref authenticating-azure.md %}}) document. - Create an Microsoft Entra ID application (also called Service Principal). - Alternatively, create a managed identity for your application platform. @@ -86,7 +86,7 @@ You need an Azure subscription to set up Azure App Configuration. Set the `host` key to `[Endpoint]` or the `connectionString` key to the values you saved earlier. {{% alert title="Note" color="primary" %}} - In a production-grade application, follow [the secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + In a production-grade application, follow [the secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. {{% /alert %}} ## Azure App Configuration request metadata @@ -104,5 +104,5 @@ GET curl http://localhost:/v1.0/configuration/?key=}}) -- [Configuration building block]({{< ref configuration-api-overview >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Configuration building block]({{% ref configuration-api-overview %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/postgresql-configuration-store.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/postgresql-configuration-store.md index ea4868fe34c..0cb9acc5524 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/postgresql-configuration-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/postgresql-configuration-store.md @@ -54,7 +54,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -187,5 +187,5 @@ curl -l 'http://:/configuration/mypostgresql/subscribe?key ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Configuration building block]({{< ref configuration-api-overview >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Configuration building block]({{% ref configuration-api-overview %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md index 28965cb0e7b..90f7b15be4a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Redis configuration store create a component of type `configuration.redis`. See [this guide]({{< ref "howto-manage-configuration.md#configure-a-dapr-configuration-store" >}}) on how to create and apply a configuration store configuration. +To setup Redis configuration store create a component of type `configuration.redis`. See [this guide]({{% ref "howto-manage-configuration.md#configure-a-dapr-configuration-store" %}}) on how to create and apply a configuration store configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} @@ -43,8 +43,8 @@ The above example uses secrets as plain strings. It is recommended to use a secr | redisPassword | N | Output | The Redis password | `"password"` | | redisUsername | N | Output | Username for Redis host. Defaults to empty. Make sure your Redis server version is 6 or above, and have created acl rule correctly. | `"username"` | | enableTLS | N | Output | If the Redis instance supports TLS with public certificates it can be configured to enable or disable TLS. Defaults to `"false"` | `"true"`, `"false"` | -| clientCert | N | Output | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | -| clientKey | N | Output | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | +| clientCert | N | Output | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | +| clientKey | N | Output | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | | failover | N | Output | Property to enabled failover configuration. Needs sentinelMasterName to be set. Defaults to `"false"` | `"true"`, `"false"` | sentinelMasterName | N | Output | The Sentinel master name. See [Redis Sentinel Documentation](https://redis.io/docs/reference/sentinel-clients/) | `""`, `"127.0.0.1:6379"` | redisType | N | Output | The type of Redis. There are two valid values, one is `"node"` for single node mode, the other is `"cluster"` for Redis cluster mode. Defaults to `"node"`. | `"cluster"` @@ -66,13 +66,13 @@ The above example uses secrets as plain strings. It is recommended to use a secr Dapr can use any Redis instance: containerized, running on your local dev machine, or a managed cloud service. -{{< tabs "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" %}} -{{% codetab %}} +{{% tab %}} A Redis instance is automatically created as a Docker container when you run `dapr init` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). 1. Install Redis into your cluster. Note that we're explicitly setting an image tag to get a version greater than 5, which is what Dapr' pub/sub functionality requires. If you're intending on using Redis as just a state store (and not for pub/sub), you do not have to set the image version. @@ -99,13 +99,13 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K - name: redisPassword value: lhDOkwTlp0 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS Redis](https://aws.amazon.com/redis/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. [Create an Azure Cache for Redis instance using the official Microsoft documentation.](https://docs.microsoft.com/azure/azure-cache-for-redis/quickstart-create-redis) @@ -123,7 +123,7 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you saved earlier. - **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + **Note:** In a production-grade application, follow [secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. 1. Enable EntraID support: - Enable Entra ID authentication on your Azure Redis server. This may takes a few minutes. @@ -131,17 +131,17 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set `enableTLS` to `"true"` to support TLS. -> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{< ref "howto-mi.md#set-up-identities-in-your-component" >}}). +> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{% ref "howto-mi.md#set-up-identities-in-your-component" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [How-To: Manage configuration from a store]({{< ref "howto-manage-configuration" >}}) for instructions on how to use Redis as a configuration store. -- [Configuration building block]({{< ref configuration-api-overview >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [How-To: Manage configuration from a store]({{% ref "howto-manage-configuration" %}}) for instructions on how to use Redis as a configuration store. +- [Configuration building block]({{% ref configuration-api-overview %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md b/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md index 179162b3bb2..2936578eaa0 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/_index.md @@ -7,6 +7,6 @@ description: The supported conversation components that interface with Dapr no_list: true --- -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/conversation.html" >}} \ No newline at end of file +{{% partial "components/conversation.html" %}} \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/anthropic.md b/daprdocs/content/en/reference/components-reference/supported-conversation/anthropic.md index 334b7cb9966..8ef75ce9c16 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/anthropic.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/anthropic.md @@ -26,7 +26,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,4 +39,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/aws-bedrock.md b/daprdocs/content/en/reference/components-reference/supported-conversation/aws-bedrock.md index d1b5f2dd128..4ec5a68f1d7 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/aws-bedrock.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/aws-bedrock.md @@ -26,7 +26,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,8 +39,8 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Authenticating AWS -Instead of using a `key` parameter, AWS Bedrock authenticates using Dapr's standard method of IAM or static credentials. [Learn more about authenticating with AWS.]({{< ref authenticating-aws.md >}}) +Instead of using a `key` parameter, AWS Bedrock authenticates using Dapr's standard method of IAM or static credentials. [Learn more about authenticating with AWS.]({{% ref authenticating-aws.md %}}) ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/deepseek.md b/daprdocs/content/en/reference/components-reference/supported-conversation/deepseek.md index e09148dafcc..9dad2bf3c82 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/deepseek.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/deepseek.md @@ -24,7 +24,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -36,4 +36,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/hugging-face.md b/daprdocs/content/en/reference/components-reference/supported-conversation/hugging-face.md index 6429c84e87d..64f7058a0ea 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/hugging-face.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/hugging-face.md @@ -26,7 +26,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,4 +39,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/local-echo.md b/daprdocs/content/en/reference/components-reference/supported-conversation/local-echo.md index e2a2770a3e8..df901fc07b0 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/local-echo.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/local-echo.md @@ -25,4 +25,4 @@ This component is only meant for local validation and testing of a Conversation ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) +- [Conversation API overview]({{% ref conversation-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/mistral.md b/daprdocs/content/en/reference/components-reference/supported-conversation/mistral.md index 57504e56b3f..3085de37617 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/mistral.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/mistral.md @@ -26,7 +26,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,4 +39,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md b/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md index 7148685b1bb..b3990df52d8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md +++ b/daprdocs/content/en/reference/components-reference/supported-conversation/openai.md @@ -26,7 +26,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,4 +39,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -- [Conversation API overview]({{< ref conversation-overview.md >}}) \ No newline at end of file +- [Conversation API overview]({{% ref conversation-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md index c7789d5e4a6..edf3d3afa5d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/_index.md @@ -7,6 +7,6 @@ description: The supported cryptography components that interface with Dapr no_list: true --- -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/cryptography.html" >}} \ No newline at end of file +{{% partial "components/cryptography.html" %}} \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/azure-key-vault.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/azure-key-vault.md index 18f650a07b5..1771a7988bb 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/azure-key-vault.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/azure-key-vault.md @@ -29,25 +29,25 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Authenticating with Microsoft Entra ID The Azure Key Vault cryptography component supports authentication with Microsoft Entra ID only. Before you enable this component: -1. Read the [Authenticating to Azure]({{< ref "authenticating-azure.md" >}}) document. -1. Create an [Microsoft Entra ID application]({{< ref "howto-aad.md" >}}) (also called a Service Principal). -1. Alternatively, create a [managed identity]({{< ref "howto-mi.md" >}}) for your application platform. +1. Read the [Authenticating to Azure]({{% ref "authenticating-azure.md" %}}) document. +1. Create an [Microsoft Entra ID application]({{% ref "howto-aad.md" %}}) (also called a Service Principal). +1. Alternatively, create a [managed identity]({{% ref "howto-mi.md" %}}) for your application platform. ## Spec metadata fields | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | `vaultName` | Y | Azure Key Vault name | `"mykeyvault"` | -| Auth metadata | Y | See [Authenticating to Azure]({{< ref "authenticating-azure.md" >}}) for more information | | +| Auth metadata | Y | See [Authenticating to Azure]({{% ref "authenticating-azure.md" %}}) for more information | | ## Related links -- [Cryptography building block]({{< ref cryptography >}}) -- [Authenticating to Azure]({{< ref azure-authentication >}}) \ No newline at end of file +- [Cryptography building block]({{% ref cryptography %}}) +- [Authenticating to Azure]({{% ref azure-authentication %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/json-web-key-sets.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/json-web-key-sets.md index 1fad9b797a6..d4e47bf29ef 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/json-web-key-sets.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/json-web-key-sets.md @@ -64,7 +64,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -76,4 +76,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr | `minRefreshInterval` | N | Minimum interval to wait before subsequent refreshes of the JWKS document from a HTTP(S) source, as a Go duration. Default: "10m" | `"1h"` ## Related links -[Cryptography building block]({{< ref cryptography >}}) \ No newline at end of file +[Cryptography building block]({{% ref cryptography %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/kubernetes-secrets.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/kubernetes-secrets.md index 0471bd2c143..c4bae5c2e1b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/kubernetes-secrets.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/kubernetes-secrets.md @@ -28,7 +28,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -40,4 +40,4 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Related links -[Cryptography building block]({{< ref cryptography >}}) \ No newline at end of file +[Cryptography building block]({{% ref cryptography %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-cryptography/local-storage.md b/daprdocs/content/en/reference/components-reference/supported-cryptography/local-storage.md index 844e4f367af..6d430678278 100644 --- a/daprdocs/content/en/reference/components-reference/supported-cryptography/local-storage.md +++ b/daprdocs/content/en/reference/components-reference/supported-cryptography/local-storage.md @@ -39,7 +39,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -58,4 +58,4 @@ Let's say you've set `path=/mnt/keys`, which contains the following files: When using the component, you can reference the keys as `mykey1.pm` and `mykey2`. ## Related links -[Cryptography building block]({{< ref cryptography >}}) +[Cryptography building block]({{% ref cryptography %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-locks/_index.md b/daprdocs/content/en/reference/components-reference/supported-locks/_index.md index 134e75360dc..60ceef21ab6 100644 --- a/daprdocs/content/en/reference/components-reference/supported-locks/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-locks/_index.md @@ -7,6 +7,6 @@ description: The supported locks that interface with Dapr no_list: true --- -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/locks.html" >}} +{{% partial "components/locks.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md b/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md index fd499a2c71f..0d08b47eb40 100644 --- a/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md +++ b/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md @@ -7,7 +7,7 @@ description: Detailed information on the Redis lock component ## Component format -To set up the Redis lock, create a component of type `lock.redis`. See [this guide]({{< ref "howto-use-distributed-lock" >}}) on how to create a lock. +To set up the Redis lock, create a component of type `lock.redis`. See [this guide]({{% ref "howto-use-distributed-lock" %}}) on how to create a lock. ```yaml apiVersion: dapr.io/v1alpha1 @@ -73,7 +73,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} @@ -84,7 +84,7 @@ 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 | N | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` | redisUsername | N | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `""`, `"default"` -| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{< ref "#setup-redis" >}}) | `"true"`, `"false"` | +| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{% ref "#setup-redis" %}}) | `"true"`, `"false"` | | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` | maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` | maxRetryBackoff | N | Maximum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` @@ -111,13 +111,13 @@ The above example uses secrets as plain strings. It is recommended to use a secr Dapr can use any Redis instance: containerized, running on your local dev machine, or a managed cloud service. -{{< tabs "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" %}} -{{% codetab %}} +{{% tab %}} A Redis instance is automatically created as a Docker container when you run `dapr init` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). 1. Install Redis into your cluster. Note that we're explicitly setting an image tag to get a version greater than 5, which is what Dapr' pub/sub functionality requires. If you're intending on using Redis as just a state store (and not for pub/sub), you do not have to set the image version. @@ -144,13 +144,13 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K - name: redisPassword value: lhDOkwTlp0 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS Redis](https://aws.amazon.com/redis/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. [Create an Azure Cache for Redis instance using the official Microsoft documentation.](https://docs.microsoft.com/azure/azure-cache-for-redis/quickstart-create-redis) 1. Once your instance is created, grab the Host name (FQDN) and your access key from the Azure portal. @@ -167,7 +167,7 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you saved earlier. - **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + **Note:** In a production-grade application, follow [secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. 1. Enable EntraID support: - Enable Entra ID authentication on your Azure Redis server. This may takes a few minutes. @@ -175,17 +175,17 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set `enableTLS` to `"true"` to support TLS. -> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{< ref "howto-mi.md#set-up-identities-in-your-component" >}}). +> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{% ref "howto-mi.md#set-up-identities-in-your-component" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Distributed lock building block]({{< ref distributed-lock-api-overview >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Distributed lock building block]({{% ref distributed-lock-api-overview %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md b/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md index 35dffff707d..64d460d2d94 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/_index.md @@ -9,8 +9,8 @@ aliases: - /developing-applications/middleware/supported-middleware/ --- -The following table lists middleware components supported by Dapr. [Learn how to customize processing pipelines and set up middleware components.]({{< ref "middleware.md" >}}) +The following table lists middleware components supported by Dapr. [Learn how to customize processing pipelines and set up middleware components.]({{% ref "middleware.md" %}}) -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/middleware.html" >}} +{{% partial "components/middleware.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-bearer.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-bearer.md index eb9689bc5d3..e2f82e6c59a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-bearer.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-bearer.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-bearer/ --- -The bearer [HTTP middleware]({{< ref middleware.md >}}) verifies a [Bearer Token](https://tools.ietf.org/html/rfc6750) using [OpenID Connect](https://openid.net/connect/) on a Web API, without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. +The bearer [HTTP middleware]({{% ref middleware.md %}}) verifies a [Bearer Token](https://tools.ietf.org/html/rfc6750) using [OpenID Connect](https://openid.net/connect/) on a Web API, without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. ## Component format @@ -47,7 +47,7 @@ Common values for `issuer` include: ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -63,6 +63,6 @@ spec: ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2.md index 90e0a3fa1d8..3ce811359d9 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-oauth2/ --- -The OAuth2 [HTTP middleware]({{< ref middleware.md >}}) enables the [OAuth2 Authorization Code flow](https://tools.ietf.org/html/rfc6749#section-4.1) on a Web API without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. +The OAuth2 [HTTP middleware]({{% ref middleware.md %}}) enables the [OAuth2 Authorization Code flow](https://tools.ietf.org/html/rfc6749#section-4.1) on a Web API without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. ## Component format @@ -39,7 +39,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -57,7 +57,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -73,8 +73,8 @@ spec: ## Related links -- [Configure API authorization with OAuth]({{< ref oauth >}}) +- [Configure API authorization with OAuth]({{% ref oauth %}}) - [Middleware OAuth sample (interactive)](https://github.com/dapr/samples/tree/master/middleware-oauth-google) -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2clientcredentials.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2clientcredentials.md index ceba912ef68..1ea9d1246ae 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2clientcredentials.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-oauth2clientcredentials.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-oauth2clientcredentials/ --- -The OAuth2 client credentials [HTTP middleware]({{< ref middleware.md >}}) enables the [OAuth2 Client Credentials flow](https://tools.ietf.org/html/rfc6749#section-4.4) on a Web API without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. +The OAuth2 client credentials [HTTP middleware]({{% ref middleware.md %}}) enables the [OAuth2 Client Credentials flow](https://tools.ietf.org/html/rfc6749#section-4.4) on a Web API without modifying the application. This design separates authentication/authorization concerns from the application, so that application operators can adopt and configure authentication/authorization providers without impacting the application code. ## Component format @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -58,7 +58,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Dapr configuration -To be applied, the middleware must be referenced in a [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in a [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -73,6 +73,6 @@ spec: ``` ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-opa.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-opa.md index a4e6a47bbde..62fabe08d98 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-opa.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-opa.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-opa/ --- -The Open Policy Agent (OPA) [HTTP middleware]({{< ref middleware.md >}}) applies [OPA Policies](https://www.openpolicyagent.org/) to incoming Dapr HTTP requests. This can be used to apply reusable authorization policies to app endpoints. +The Open Policy Agent (OPA) [HTTP middleware]({{% ref middleware.md %}}) applies [OPA Policies](https://www.openpolicyagent.org/) to incoming Dapr HTTP requests. This can be used to apply reusable authorization policies to app endpoints. ## Component format @@ -84,7 +84,7 @@ You can prototype and experiment with policies using the [official OPA playgroun ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -217,6 +217,6 @@ type Result struct { - [Open Policy Agent](https://www.openpolicyagent.org) - [HTTP API example](https://www.openpolicyagent.org/docs/latest/http-api-authorization/) -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-rate-limit.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-rate-limit.md index 59dc11dfb77..3b46e1ac7f7 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-rate-limit.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-rate-limit.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-rate-limit/ --- -The rate limit [HTTP middleware]({{< ref middleware.md >}}) allows restricting the maximum number of allowed HTTP requests per second. Rate limiting can protect your application from Denial of Service (DoS) attacks. DoS attacks can be initiated by malicious 3rd parties but also by bugs in your software (a.k.a. a "friendly fire" DoS attack). +The rate limit [HTTP middleware]({{% ref middleware.md %}}) allows restricting the maximum number of allowed HTTP requests per second. Rate limiting can protect your application from Denial of Service (DoS) attacks. DoS attacks can be initiated by malicious 3rd parties but also by bugs in your software (a.k.a. a "friendly fire" DoS attack). ## Component format @@ -38,11 +38,11 @@ Once the limit is reached, the requests will fail with HTTP Status code *429: To The rate limit is enforced independently in each Dapr sidecar, and not cluster-wide. {{% /alert %}} -Alternatively, the [max concurrency setting]({{< ref control-concurrency.md >}}) can be used to rate-limit applications and applies to all traffic, regardless of remote IP, protocol, or path. +Alternatively, the [max concurrency setting]({{% ref control-concurrency.md %}}) can be used to rate-limit applications and applies to all traffic, regardless of remote IP, protocol, or path. ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -58,7 +58,7 @@ spec: ## Related links -- [Control max concurrently]({{< ref control-concurrency.md >}}) -- [Middleware]({{< ref middleware.md >}}) -- [Dapr configuration]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Control max concurrently]({{% ref control-concurrency.md %}}) +- [Middleware]({{% ref middleware.md %}}) +- [Dapr configuration]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routeralias.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routeralias.md index 62d3083cf8d..e11b5edec53 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routeralias.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routeralias.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-routeralias/ --- -The router alias HTTP [middleware]({{< ref middleware.md >}}) component allows you to convert arbitrary HTTP routes arriving into Dapr to valid Dapr API endpoints. +The router alias HTTP [middleware]({{% ref middleware.md %}}) component allows you to convert arbitrary HTTP routes arriving into Dapr to valid Dapr API endpoints. ## Component format @@ -41,7 +41,7 @@ In the example above, an incoming HTTP request for `/mall/activity/info?id=123` ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -57,6 +57,6 @@ spec: ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routerchecker.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routerchecker.md index 47c275e65ad..85b17d2848d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routerchecker.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-routerchecker.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-routerchecker/ --- -The RouterChecker HTTP [middleware]({{< ref middleware.md >}}) component leverages regexp to check the validity of HTTP request routing to prevent invalid routers from entering the Dapr cluster. In turn, the RouterChecker component filters out bad requests and reduces noise in the telemetry and log data. +The RouterChecker HTTP [middleware]({{% ref middleware.md %}}) component leverages regexp to check the validity of HTTP request routing to prevent invalid routers from entering the Dapr cluster. In turn, the RouterChecker component filters out bad requests and reduces noise in the telemetry and log data. ## Component format @@ -50,7 +50,7 @@ FAIL /v1.0/invoke/demo.default/method/"$(curl ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -66,6 +66,6 @@ spec: ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-sentinel.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-sentinel.md index e93fd9c7381..6fa94cebbb3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-sentinel.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-sentinel.md @@ -9,7 +9,7 @@ aliases: [Sentinel](https://github.com/alibaba/sentinel-golang) is a powerful fault-tolerance component that takes "flow" as the breakthrough point and covers multiple fields including flow control, traffic shaping, concurrency limiting, circuit breaking, and adaptive system protection to guarantee the reliability and resiliency of microservices. -The Sentinel [HTTP middleware]({{< ref middleware.md >}}) enables Dapr to facilitate Sentinel's powerful abilities to protect your application. You can refer to [Sentinel Wiki](https://github.com/alibaba/sentinel-golang/wiki) for more details on Sentinel. +The Sentinel [HTTP middleware]({{% ref middleware.md %}}) enables Dapr to facilitate Sentinel's powerful abilities to protect your application. You can refer to [Sentinel Wiki](https://github.com/alibaba/sentinel-golang/wiki) for more details on Sentinel. ## Component format @@ -60,11 +60,11 @@ Special note to `resource` field in each rule's definition. In Dapr, it follows POST/GET/PUT/DELETE:Dapr HTTP API Request Path ``` -All concrete HTTP API information can be found from [Dapr API Reference]{{< ref "api" >}}. In the above sample config, the `resource` field is set to **POST:/v1.0/invoke/nodeapp/method/neworder**. +All concrete HTTP API information can be found from [Dapr API Reference]{{% ref "api" %}}. In the above sample config, the `resource` field is set to **POST:/v1.0/invoke/nodeapp/method/neworder**. ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -81,6 +81,6 @@ spec: ## Related links - [Sentinel Github](https://github.com/alibaba/sentinel-golang) -- [Middleware]({{< ref middleware.md >}}) -- [Dapr configuration]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Dapr configuration]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-uppercase.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-uppercase.md index a2b38433e27..8952314fc92 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-uppercase.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-uppercase.md @@ -7,7 +7,7 @@ aliases: - /developing-applications/middleware/supported-middleware/middleware-uppercase/ --- -The uppercase [HTTP middleware]({{< ref middleware.md >}}) converts the body of the request to uppercase letters and is used for testing that the pipeline is functioning. It should only be used for local development. +The uppercase [HTTP middleware]({{% ref middleware.md %}}) converts the body of the request to uppercase letters and is used for testing that the pipeline is functioning. It should only be used for local development. ## Component format @@ -27,7 +27,7 @@ This component has no `metadata` to configure. ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -43,6 +43,6 @@ spec: ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md index e1167ad0299..c651ba96513 100644 --- a/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md +++ b/daprdocs/content/en/reference/components-reference/supported-middleware/middleware-wasm.md @@ -11,7 +11,7 @@ WebAssembly is a way to safely run code compiled in other languages. Runtimes execute WebAssembly Modules (Wasm), which are most often binaries with a `.wasm` extension. -The Wasm [HTTP middleware]({{< ref middleware.md >}}) allows you to manipulate +The Wasm [HTTP middleware]({{% ref middleware.md %}}) allows you to manipulate an incoming request or serve a response with custom logic compiled to a Wasm binary. In other words, you can extend Dapr using external files that are not pre-compiled into the `daprd` binary. Dapr embeds [wazero](https://wazero.io) @@ -19,7 +19,7 @@ to accomplish this without CGO. Wasm binaries are loaded from a URL. For example, the URL `file://rewrite.wasm` loads `rewrite.wasm` from the current directory of the process. On Kubernetes, -see [How to: Mount Pod volumes to the Dapr sidecar]({{< ref kubernetes-volume-mounts.md >}}) +see [How to: Mount Pod volumes to the Dapr sidecar]({{% ref kubernetes-volume-mounts.md %}}) to configure a filesystem mount that can contain Wasm modules. It is also possible to fetch the Wasm binary from a remote URL. In this case, the URL must point exactly to one Wasm binary. For example: @@ -55,8 +55,8 @@ How to compile this is described later. ## Dapr configuration -To be applied, the middleware must be referenced in [configuration]({{< ref configuration-concept.md >}}). -See [middleware pipelines]({{< ref "middleware.md#customize-processing-pipeline">}}). +To be applied, the middleware must be referenced in [configuration]({{% ref configuration-concept.md %}}). +See [middleware pipelines]({{% ref "middleware.md#customize-processing-pipeline"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -72,7 +72,7 @@ spec: *Note*: WebAssembly middleware uses more resources than native middleware. This result in a resource constraint faster than the same logic in native code. -Production usage should [Control max concurrency]({{< ref control-concurrency.md >}}). +Production usage should [Control max concurrency]({{% ref control-concurrency.md %}}). ### Generating Wasm @@ -169,7 +169,7 @@ func main() { ## Related links -- [Middleware]({{< ref middleware.md >}}) -- [Configuration concept]({{< ref configuration-concept.md >}}) -- [Configuration overview]({{< ref configuration-overview.md >}}) -- [Control max concurrency]({{< ref control-concurrency.md >}}) +- [Middleware]({{% ref middleware.md %}}) +- [Configuration concept]({{% ref configuration-concept.md %}}) +- [Configuration overview]({{% ref configuration-overview.md %}}) +- [Control max concurrency]({{% ref control-concurrency.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md index 37837d93c35..088618048e6 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/_index.md @@ -9,8 +9,8 @@ no_list: true The following components provide name resolution for the service invocation building block. -Name resolution components are configured via the [configuration]({{< ref configuration-overview.md >}}). +Name resolution components are configured via the [configuration]({{% ref configuration-overview.md %}}). -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/name-resolution.html" >}} +{{% partial "components/name-resolution.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-kubernetes.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-kubernetes.md index f370464bb1c..777849c1e91 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-kubernetes.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-kubernetes.md @@ -7,9 +7,9 @@ description: Detailed information on the Kubernetes DNS name resolution componen ## Configuration format -Generally, Kubernetes DNS name resolution is configured automatically in [Kubernetes mode]({{< ref kubernetes >}}) by Dapr. There is no configuration needed to use Kubernetes DNS as your name resolution provider unless some overrides are necessary for the Kubernetes name resolution component. +Generally, Kubernetes DNS name resolution is configured automatically in [Kubernetes mode]({{% ref kubernetes %}}) by Dapr. There is no configuration needed to use Kubernetes DNS as your name resolution provider unless some overrides are necessary for the Kubernetes name resolution component. -In the scenario that an override is required, within a [Dapr Configuration]({{< ref configuration-overview.md >}}) CRD, add a `nameResolution` spec and set the `component` field to `"kubernetes"`. The other configuration fields can be set as needed in a `configuration` map, as seen below. +In the scenario that an override is required, within a [Dapr Configuration]({{% ref configuration-overview.md %}}) CRD, add a `nameResolution` spec and set the `component` field to `"kubernetes"`. The other configuration fields can be set as needed in a `configuration` map, as seen below. ```yaml apiVersion: dapr.io/v1alpha1 @@ -40,5 +40,5 @@ The configuration spec is fixed to v1.3.0 of the Consul API ## Related links -- [Service invocation building block]({{< ref service-invocation >}}) +- [Service invocation building block]({{% ref service-invocation %}}) - [Kubernetes DNS docs](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-mdns.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-mdns.md index 1c2e1c9a3f5..e09008f5164 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-mdns.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-mdns.md @@ -7,7 +7,7 @@ description: Detailed information on the mDNS name resolution component ## Configuration format -Multicast DNS (mDNS) is configured automatically in [self-hosted mode]({{< ref self-hosted >}}) by Dapr. There is no configuration needed to use mDNS as your name resolution provider. +Multicast DNS (mDNS) is configured automatically in [self-hosted mode]({{% ref self-hosted %}}) by Dapr. There is no configuration needed to use mDNS as your name resolution provider. ## Behaviour @@ -15,7 +15,7 @@ The component resolves target apps by using the host system's mDNS service. You ### Troubleshooting -In some cloud provider virtual networks, such as Microsoft Azure, mDNS is not available. Use an alternate provider such as [HashiCorp Consul]({{< ref setup-nr-consul.md >}}) instead. +In some cloud provider virtual networks, such as Microsoft Azure, mDNS is not available. Use an alternate provider such as [HashiCorp Consul]({{% ref setup-nr-consul.md %}}) instead. On some enterprise-managed systems, mDNS may be disabled on macOS if a network filter/proxy is configured. Check with your IT department if mDNS is disabled and you are unable to use service invocation locally. @@ -25,5 +25,5 @@ Not applicable, as mDNS is configured by Dapr when running in self-hosted mode. ## Related links -- [Service invocation building block]({{< ref service-invocation >}}) +- [Service invocation building block]({{% ref service-invocation %}}) - [mDNS reference](https://en.wikipedia.org/wiki/Multicast_DNS) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-sqlite.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-sqlite.md index b596a5b1467..2b4c29f11a8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-sqlite.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/nr-sqlite.md @@ -15,7 +15,7 @@ Using the SQLite nameresolver with a database file accessed over the network (in ## Configuration format -Name resolution is configured via the [Dapr Configuration]({{< ref configuration-overview.md >}}). +Name resolution is configured via the [Dapr Configuration]({{% ref configuration-overview.md %}}). Within the Configuration YAML, set the `spec.nameResolution.component` property to `"sqlite"`, then pass configuration options in the `spec.nameResolution.configuration` dictionary. @@ -51,4 +51,4 @@ When using the SQLite name resolver component, the `spec.nameResolution.configur ## Related links -- [Service invocation building block]({{< ref service-invocation >}}) +- [Service invocation building block]({{% ref service-invocation %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-name-resolution/setup-nr-consul.md b/daprdocs/content/en/reference/components-reference/supported-name-resolution/setup-nr-consul.md index fb7945572bf..1465ab5c32c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-name-resolution/setup-nr-consul.md +++ b/daprdocs/content/en/reference/components-reference/supported-name-resolution/setup-nr-consul.md @@ -7,7 +7,7 @@ description: Detailed information on the HashiCorp Consul name resolution compon ## Configuration format -Hashicorp Consul is setup within the [Dapr Configuration]({{< ref configuration-overview.md >}}). +Hashicorp Consul is setup within the [Dapr Configuration]({{% ref configuration-overview.md %}}). Within the config, add a `nameResolution` spec and set the `component` field to `"consul"`. @@ -139,17 +139,17 @@ spec: ``` ## Setup HashiCorp Consul -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} HashiCorp offer in depth guides on how to setup Consul for different hosting models. Check out the [self-hosted guide here](https://learn.hashicorp.com/collections/consul/getting-started) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} HashiCorp offer in depth guides on how to setup Consul for different hosting models. Check out the [Kubernetes guide here](https://learn.hashicorp.com/collections/consul/kubernetes) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Service invocation building block]({{< ref service-invocation >}}) +- [Service invocation building block]({{% ref service-invocation %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md index fdaca4eca90..5ece44a5410 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/_index.md @@ -9,13 +9,13 @@ aliases: no_list: true --- -The following table lists publish and subscribe brokers supported by the Dapr pub/sub building block. [Learn how to set up different brokers for Dapr publish and subscribe.]({{< ref setup-pubsub.md >}}) +The following table lists publish and subscribe brokers supported by the Dapr pub/sub building block. [Learn how to set up different brokers for Dapr publish and subscribe.]({{% ref setup-pubsub.md %}}) {{% alert title="Pub/sub component retries vs inbound resiliency" color="warning" %}} -Each pub/sub component has its own built-in retry behaviors, unique to the message broker solution and unrelated to Dapr. Before explicity applying a [Dapr resiliency policy]({{< ref "resiliency-overview.md" >}}), make sure you understand the implicit retry policy of the pub/sub component you're using. Instead of overriding these built-in retries, Dapr resiliency augments them, which can cause repetitive clustering of messages. +Each pub/sub component has its own built-in retry behaviors, unique to the message broker solution and unrelated to Dapr. Before explicity applying a [Dapr resiliency policy]({{% ref "resiliency-overview.md" %}}), make sure you understand the implicit retry policy of the pub/sub component you're using. Instead of overriding these built-in retries, Dapr resiliency augments them, which can cause repetitive clustering of messages. {{% /alert %}} -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/pubsub.html" >}} +{{% partial "components/pubsub.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md index 203d81a7633..c7fa77ccd06 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md @@ -9,10 +9,10 @@ aliases: ## Component format -To set up Apache Kafka pub/sub, create a component of type `pubsub.kafka`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Apache Kafka pub/sub, create a component of type `pubsub.kafka`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. -All component metadata field values can carry [templated metadata values]({{< ref "component-schema.md#templated-metadata-values" >}}), which are resolved on Dapr sidecar startup. -For example, you can choose to use `{namespace}` as the `consumerGroup` to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{< ref "howto-namespace.md#with-namespace-consumer-groups">}}). +All component metadata field values can carry [templated metadata values]({{% ref "component-schema.md#templated-metadata-values" %}}), which are resolved on Dapr sidecar startup. +For example, you can choose to use `{namespace}` as the `consumerGroup` to enable using the same `appId` in different namespaces using the same topics as described in [this article]({{% ref "howto-namespace.md#with-namespace-consumer-groups"%}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -74,7 +74,7 @@ spec: ``` -> For details on using `secretKeyRef`, see the guide on [how to reference secrets in components]({{< ref component-secrets.md >}}). +> For details on using `secretKeyRef`, see the guide on [how to reference secrets in components]({{% ref component-secrets.md %}}). ## Spec metadata fields @@ -82,12 +82,12 @@ spec: |--------------------|:--------:|---------|---------| | brokers | Y | A comma-separated list of Kafka brokers. | `"localhost:9092,dapr-kafka.myapp.svc.cluster.local:9093"` | consumerGroup | N | A kafka consumer group to listen on. Each record published to a topic is delivered to one consumer within each consumer group subscribed to the topic. If a value for `consumerGroup` is provided, any value for `consumerID` is ignored - a combination of the consumer group and a random unique identifier will be set for the `consumerID` instead. | `"group1"` -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. If a value for `consumerGroup` is provided, any value for `consumerID` is ignored - a combination of the consumer group and a random unique identifier will be set for the `consumerID` instead. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. If a value for `consumerGroup` is provided, any value for `consumerID` is ignored - a combination of the consumer group and a random unique identifier will be set for the `consumerID` instead. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | clientID | N | A user-provided string sent with every request to the Kafka brokers for logging, debugging, and auditing purposes. Defaults to `"namespace.appID"` for Kubernetes mode or `"appID"` for Self-Hosted mode. | `"my-namespace.my-dapr-app"`, `"my-dapr-app"` | authRequired | N | *Deprecated* Enable [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) authentication with the Kafka brokers. | `"true"`, `"false"` | authType | Y | Configure or disable authentication. Supported values: `none`, `password`, `mtls`, `oidc` or `awsiam` | `"password"`, `"none"` | saslUsername | N | The SASL username used for authentication. Only required if `authType` is set to `"password"`. | `"adminuser"` -| saslPassword | N | The SASL password used for authentication. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}). Only required if `authType is set to `"password"`. | `""`, `"KeFg23!"` +| saslPassword | N | The SASL password used for authentication. Can be `secretKeyRef` to use a [secret reference]({{% ref component-secrets.md %}}). Only required if `authType is set to `"password"`. | `""`, `"KeFg23!"` | saslMechanism | N | The SASL Authentication Mechanism you wish to use. Only required if `authType` is set to `"password"`. Defaults to `PLAINTEXT` | `"SHA-512", "SHA-256", "PLAINTEXT"` | initialOffset | N | The initial offset to use if no offset was previously committed. Should be "newest" or "oldest". Defaults to "newest". | `"oldest"` | maxMessageBytes | N | The maximum size in bytes allowed for a single Kafka message. Defaults to 1024. | `2048` @@ -124,7 +124,7 @@ spec: | sessionTimeout | N | The timeout used to detect client failures when using Kafka’s group management facility. If the broker fails to receive any heartbeats from the consumer before the expiration of this session timeout, then the consumer is removed and initiates a rebalance. Defaults to "10s". | `"20s"` | | escapeHeaders | N | Enables URL escaping of the message header values received by the consumer. Allows receiving content with special characters that are usually not allowed in HTTP headers. Default is `false`. | `true` | -The `secretKeyRef` above is referencing a [kubernetes secrets store]({{< ref kubernetes-secret-store.md >}}) to access the tls information. Visit [here]({{< ref setup-secret-store.md >}}) to learn more about how to configure a secret store component. +The `secretKeyRef` above is referencing a [kubernetes secrets store]({{% ref kubernetes-secret-store.md %}}) to access the tls information. Visit [here]({{% ref setup-secret-store.md %}}) to learn more about how to configure a secret store component. #### Note The metadata `version` must be set to `1.0.0` when using Azure EventHubs with Kafka. @@ -453,7 +453,7 @@ Apache Kafka component supports sending and receiving multiple messages in a sin ### Configuring bulk subscribe -When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{< ref "pubsub-bulk#subscribing-messages-in-bulk" >}}) for more details. Learn more about [the bulk subscribe API]({{< ref pubsub-bulk.md >}}). +When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{% ref "pubsub-bulk#subscribing-messages-in-bulk" %}}) for more details. Learn more about [the bulk subscribe API]({{% ref pubsub-bulk.md %}}). Apache Kafka supports the following bulk metadata options: @@ -505,9 +505,9 @@ When consuming messages, special message metadata are being automatically passed - `__timestamp`: the timestamp for the message You can access them within the consumer endpoint as follows: -{{< tabs "Python (FastAPI)" >}} +{{% tabpane "Python (FastAPI)" %}} -{{% codetab %}} +{{% tab %}} ```python from fastapi import APIRouter, Body, Response, status @@ -539,9 +539,9 @@ app.include_router(router) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Receiving message headers with special characters @@ -599,15 +599,15 @@ Date/Datetime fields must be passed as their [Epoch Unix timestamp](https://en.w ### Publishing Avro messages In order to indicate to the Kafka pub/sub component that the message should be using Avro serialization, the `valueSchemaType` metadata must be set to `Avro`. -{{< tabs curl "Python SDK">}} +{{% tabpane curl "Python SDK"%}} -{{% codetab %}} +{{% tab %}} ```bash curl -X "POST" http://localhost:3500/v1.0/publish/pubsub/my-topic?metadata.rawPayload=true&metadata.valueSchemaType=Avro -H "Content-Type: application/json" -d '{"order_number": "345", "created_date": 1704861365986}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python from dapr.clients import DaprClient @@ -626,17 +626,17 @@ with DaprClient() as d: # Print the request print(req_data, flush=True) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Subscribing to Avro topics In order to indicate to the Kafka pub/sub component that the message should be deserialized using Avro, the `valueSchemaType` metadata must be set to `Avro` in the subscription metadata. -{{< tabs "Python (FastAPI)" >}} +{{% tabpane "Python (FastAPI)" %}} -{{% codetab %}} +{{% tab %}} ```python from fastapi import APIRouter, Body, Response, status @@ -667,29 +667,29 @@ app.include_router(router) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Create a Kafka instance -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} You can run Kafka locally using [this](https://github.com/wurstmeister/kafka-docker) Docker image. To run without Docker, see the getting started guide [here](https://kafka.apache.org/quickstart). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To run Kafka on Kubernetes, you can use any Kafka operator, such as [Strimzi](https://strimzi.io/quickstarts/). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md##step-1-setup-the-pubsub-component" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md##step-1-setup-the-pubsub-component" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-aws-snssqs.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-aws-snssqs.md index 86865de5b30..fdb7b7efc64 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-aws-snssqs.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-aws-snssqs.md @@ -74,7 +74,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use [a secret store for the secrets]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use [a secret store for the secrets]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -84,7 +84,7 @@ The above example uses secrets as plain strings. It is recommended to use [a sec | accessKey | Y | ID of the AWS account/role with appropriate permissions to SNS and SQS (see below) | `"AKIAIOSFODNN7EXAMPLE"` | secretKey | Y | Secret for the AWS user/role. If using an `AssumeRole` access, you will also need to provide a `sessionToken` |`"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"` | region | Y | The AWS region where the SNS/SQS assets are located or be created in. See [this page](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/?p=ugi&l=na) for valid regions. Ensure that SNS and SQS are available in that region | `"us-east-1"` -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | endpoint | N | AWS endpoint for the component to use. Only used for local development with, for example, [localstack](https://github.com/localstack/localstack). The `endpoint` is unnecessary when running against production AWS | `"http://localhost:4566"` | sessionToken | N | AWS session token to use. A session token is only required if you are using temporary security credentials | `"TOKEN"` | messageReceiveLimit | N | Number of times a message is received, after processing of that message fails, that once reached, results in removing of that message from the queue. If `sqsDeadLettersQueueName` is specified, `messageReceiveLimit` is the number of times a message is received, after processing of that message fails, that once reached, results in moving of the message to the SQS dead-letters queue. Default: `10` | `10` @@ -155,9 +155,9 @@ Consider potential contention scenarios when using SNS/SQS with Dapr, and config ## Create an SNS/SQS instance -{{< tabs "Self-Hosted" "Kubernetes" "AWS" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" %}} -{{% codetab %}} +{{% tab %}} For local development, the [localstack project](https://github.com/localstack/localstack) is used to integrate AWS SNS/SQS. Follow [these instructions](https://github.com/localstack/localstack#running) to run localstack. To run localstack locally from the command line using Docker, apply the following cmd: @@ -168,7 +168,7 @@ docker run --rm -it -p 4566:4566 -p 4571:4571 -e SERVICES="sts,sns,sqs" -e AWS_D In order to use localstack with your pub/sub binding, you need to provide the `endpoint` configuration in the component metadata. The `endpoint` is unnecessary when running against production AWS. -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes. +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes. ```yaml apiVersion: dapr.io/v1alpha1 @@ -190,9 +190,9 @@ spec: value: us-east-1 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} To run localstack on Kubernetes, you can apply the configuration below. Localstack is then reachable at the DNS name `http://localstack.default.svc.cluster.local:4566` (assuming this was applied to the default namespace), which should be used as the `endpoint`. ```yaml @@ -236,9 +236,9 @@ spec: ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} In order to run in AWS, create or assign an IAM user with permissions to the SNS and SQS services, with a policy like: ```json @@ -305,15 +305,15 @@ Alternatively, let's say you want to provision the SNS and SQS assets using your ``` In the above example, you are running your applications on an EKS cluster with dynamic assets creation (the default Dapr behavior). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Pub/Sub building block overview and how-to guides]({{< ref pubsub >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Pub/Sub building block overview and how-to guides]({{% ref pubsub %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) - AWS docs: - [AWS SQS as subscriber to SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-sqs-as-subscriber.html) - [AWS SNS API reference](https://docs.aws.amazon.com/sns/latest/api/Welcome.html) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md index b6132ca8f39..433df3ee51f 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-eventhubs.md @@ -9,9 +9,9 @@ aliases: ## Component format -To set up an Azure Event Hubs pub/sub, create a component of type `pubsub.azure.eventhubs`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up an Azure Event Hubs pub/sub, create a component of type `pubsub.azure.eventhubs`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. -Apart from the configuration metadata fields shown below, Azure Event Hubs also supports [Azure Authentication]({{< ref "authenticating-azure.md" >}}) mechanisms. +Apart from the configuration metadata fields shown below, Azure Event Hubs also supports [Azure Authentication]({{% ref "authenticating-azure.md" %}}) mechanisms. ```yaml apiVersion: dapr.io/v1alpha1 @@ -57,16 +57,16 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| -| `connectionString` | Y* | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{< ref "authenticating-azure.md" >}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` -| `eventHubNamespace` | Y* | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{< ref "authenticating-azure.md" >}}) | `"namespace"` -| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| `connectionString` | Y* | Connection string for the Event Hub or the Event Hub namespace.
* Mutally exclusive with `eventHubNamespace` field.
* Required when not using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={EventHub}"` or `"Endpoint=sb://{EventHubNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key}"` +| `eventHubNamespace` | Y* | The Event Hub Namespace name.
* Mutally exclusive with `connectionString` field.
* Required when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) | `"namespace"` +| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | `enableEntityManagement` | N | Boolean value to allow management of the EventHub namespace and storage account. Default: `false` | `"true", "false"` | `enableInOrderMessageDelivery` | N | Input/Output | Boolean value to allow messages to be delivered in the order in which they were posted. This assumes `partitionKey` is set when publishing or posting to ensure ordering across partitions. Default: `false` | `"true"`, `"false"` | `storageAccountName` | Y | Storage account name to use for the checkpoint store. |`"myeventhubstorage"` @@ -80,7 +80,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Event Hubs pub/sub component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Event Hubs pub/sub component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). #### Example Configuration @@ -126,7 +126,7 @@ Azure Eventhubs supports sending and receiving multiple messages in a single ope ### Configuring bulk publish -To set the metadata for bulk publish operation, set the query parameters on the HTTP request or the gRPC metadata, [as documented in the API reference]({{< ref pubsub_api >}}). +To set the metadata for bulk publish operation, set the query parameters on the HTTP request or the gRPC metadata, [as documented in the API reference]({{% ref pubsub_api %}}). | Metadata | Default | |----------|---------| @@ -134,7 +134,7 @@ To set the metadata for bulk publish operation, set the query parameters on the ### Configuring bulk subscribe -When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{< ref "pubsub-bulk#subscribing-messages-in-bulk" >}}) for more details and to learn more about [the bulk subscribe API]({{< ref pubsub-bulk.md >}}). +When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{% ref "pubsub-bulk#subscribing-messages-in-bulk" %}}) for more details and to learn more about [the bulk subscribe API]({{% ref pubsub-bulk.md %}}). | Configuration | Default | |---------------|---------| @@ -143,7 +143,7 @@ When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to ## Configuring checkpoint frequency -When subscribing to a topic, you can configure the checkpointing frequency in a partition by [setting the metadata in the HTTP or gRPC subscribe request ]({{< ref "pubsub_api.md#http-request-2" >}}). This metadata enables checkpointing after the configured number of events within a partition event sequence. Disable checkpointing by setting the frequency to `0`. +When subscribing to a topic, you can configure the checkpointing frequency in a partition by [setting the metadata in the HTTP or gRPC subscribe request ]({{% ref "pubsub_api.md#http-request-2" %}}). This metadata enables checkpointing after the configured number of events within a partition event sequence. Disable checkpointing by setting the frequency to `0`. [Learn more about checkpointing](https://learn.microsoft.com/azure/event-hubs/event-hubs-features#checkpointing). @@ -151,7 +151,7 @@ When subscribing to a topic, you can configure the checkpointing frequency in a | -------- | ------- | | `metadata.checkPointFrequencyPerPartition` | `1` | -Following example shows a sample subscription file for [Declarative subscription]({{< ref "subscription-methods.md#declarative-subscriptions" >}}) using `checkPointFrequencyPerPartition` metadata. Similarly, you can also pass the metadata in [Programmatic subscriptions]({{< ref "subscription-methods.md#programmatic-subscriptions" >}}) as well. +Following example shows a sample subscription file for [Declarative subscription]({{% ref "subscription-methods.md#declarative-subscriptions" %}}) using `checkPointFrequencyPerPartition` metadata. Similarly, you can also pass the metadata in [Programmatic subscriptions]({{% ref "subscription-methods.md#programmatic-subscriptions" %}}) as well. ```yaml apiVersion: dapr.io/v2alpha1 @@ -178,7 +178,7 @@ When subscribing to a topic using `BulkSubscribe`, you configure the checkpointi Follow the instructions on the [documentation](https://docs.microsoft.com/azure/event-hubs/event-hubs-create) to set up Azure Event Hubs. -Because this component uses Azure Storage as checkpoint store, you will also need an [Azure Storage Account](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal). Follow the instructions on the [documentation](https://docs.microsoft.com/azure/storage/common/storage-account-keys-manage) to manage the storage account access keys. +Because this component uses Azure Storage as checkpoint store, you will also need an [Azure Storage Account](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabpane=azure-portal). Follow the instructions on the [documentation](https://docs.microsoft.com/azure/storage/common/storage-account-keys-manage) to manage the storage account access keys. See the [documentation](https://docs.microsoft.com/azure/event-hubs/authorize-access-shared-access-signature) on how to get the Event Hubs connection string (note this is not for the Event Hubs namespace). @@ -194,7 +194,7 @@ When entity management is enabled in the metadata, as long as the application ha The Evet Hub name is the `topic` field in the incoming request to publish or subscribe to, while the consumer group name is the name of the Dapr app which subscribes to a given Event Hub. For example, a Dapr app running on Kubernetes with name `dapr.io/app-id: "myapp"` requires an Event Hubs consumer group named `myapp`. -Entity management is only possible when using [Microsoft Entra ID Authentication]({{< ref "authenticating-azure.md" >}}) and not using a connection string. +Entity management is only possible when using [Microsoft Entra ID Authentication]({{% ref "authenticating-azure.md" %}}) and not using a connection string. > Dapr passes the name of the consumer group to the Event Hub, so this is not supplied in the metadata. @@ -218,9 +218,9 @@ spec: The same can be achieved using the Dapr SDK: -{{< tabs ".NET" >}} +{{% tabpane ".NET" %}} -{{% codetab %}} +{{% tab %}} ```csharp [Topic("order-pub-sub", "orders")] @@ -232,9 +232,9 @@ public ActionResult Checkout(Order order, [FromHeader] int priority) } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Subscribing to Azure IoT Hub Events @@ -274,7 +274,7 @@ For example, the headers of a delivered HTTP subscription message would contain: ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) -- [Authentication to Azure]({{< ref "authenticating-azure.md" >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) +- [Authentication to Azure]({{% ref "authenticating-azure.md" %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-queues.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-queues.md index 2dd00c90026..4170d056be8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-queues.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-queues.md @@ -9,10 +9,10 @@ aliases: ## Component format -To set up Azure Service Bus Queues pub/sub, create a component of type `pubsub.azure.servicebus.queues`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Azure Service Bus Queues pub/sub, create a component of type `pubsub.azure.servicebus.queues`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. > This component uses queues on Azure Service Bus; see the official documentation for the differences between [topics and queues](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-queues-topics-subscriptions). -> For using topics, see the [Azure Service Bus Topics pubsub component]({{< ref "setup-azure-servicebus-topics" >}}). +> For using topics, see the [Azure Service Bus Topics pubsub component]({{% ref "setup-azure-servicebus-topics" %}}). ### Connection String Authentication @@ -63,7 +63,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -71,7 +71,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | `connectionString` | Y | Shared access policy connection string for the Service Bus. Required unless using Microsoft Entra ID authentication. | See example above -| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | `namespaceName`| N | Parameter to set the address of the Service Bus namespace, as a fully-qualified domain name. Required if using Microsoft Entra ID authentication. | `"namespace.servicebus.windows.net"` | | `timeoutInSec` | N | Timeout for sending messages and for management operations. Default: `60` |`30` | `handlerTimeoutInSec`| N | Timeout for invoking the app's handler. Default: `60` | `30` @@ -91,7 +91,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Service Bus Queues pubsub component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Service Bus Queues pubsub component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). #### Example Configuration @@ -122,7 +122,7 @@ Azure Service Bus messages extend the Dapr message format with additional contex ### Sending a message with metadata -To set Azure Service Bus metadata when sending a message, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{< ref "pubsub_api.md#metadata" >}}). +To set Azure Service Bus metadata when sending a message, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{% ref "pubsub_api.md#metadata" %}}). - `metadata.MessageId` - `metadata.CorrelationId` @@ -165,7 +165,7 @@ Azure Service Bus supports sending and receiving multiple messages in a single o ### Configuring bulk publish -To set the metadata for bulk publish operation, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{< ref pubsub_api >}}) +To set the metadata for bulk publish operation, set the query parameters on the HTTP request or the gRPC metadata as documented [here]({{% ref pubsub_api %}}) | Metadata | Default | |----------|---------| @@ -173,7 +173,7 @@ To set the metadata for bulk publish operation, set the query parameters on the ### Configuring bulk subscribe -When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{< ref "pubsub-bulk#subscribing-messages-in-bulk" >}}) for more details. Learn more about [the bulk subscribe API]({{< ref pubsub-bulk.md >}}). +When subscribing to a topic, you can configure `bulkSubscribe` options. Refer to [Subscribing messages in bulk]({{% ref "pubsub-bulk#subscribing-messages-in-bulk" %}}) for more details. Learn more about [the bulk subscribe API]({{% ref pubsub-bulk.md %}}). | Configuration | Default | |---------------|---------| @@ -198,10 +198,10 @@ Dapr Pub/sub offers its own dead-letter queue concept that lets you control the For example, setting up a dead-letter queue `orders-dlq` in the subscription and a resiliency policy lets you subscribe to the topic `orders-dlq` to handle failed messages. -For more details on setting up dead-letter queues, see the [dead-letter article]({{< ref pubsub-deadletter >}}). +For more details on setting up dead-letter queues, see the [dead-letter article]({{% ref pubsub-deadletter %}}). ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Pub/Sub building block]({{< ref pubsub >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Pub/Sub building block]({{% ref pubsub %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-topics.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-topics.md index cc357b5bc56..01b8486775b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-topics.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-azure-servicebus-topics.md @@ -10,10 +10,10 @@ aliases: ## Component format -To set up Azure Service Bus Topics pub/sub, create a component of type `pubsub.azure.servicebus.topics`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Azure Service Bus Topics pub/sub, create a component of type `pubsub.azure.servicebus.topics`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. > This component uses topics on Azure Service Bus; see the official documentation for the differences between [topics and queues](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-queues-topics-subscriptions). -> For using queues, see the [Azure Service Bus Queues pubsub component]({{< ref "setup-azure-servicebus-queues" >}}). +> For using queues, see the [Azure Service Bus Queues pubsub component]({{% ref "setup-azure-servicebus-queues" %}}). ### Connection String Authentication @@ -66,7 +66,7 @@ spec: > __NOTE:__ The above settings are shared across all topics that use this component. {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -75,7 +75,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr |--------------------|:--------:|---------|---------| | `connectionString` | Y | Shared access policy connection string for the Service Bus. Required unless using Microsoft Entra ID authentication. | See example above | `namespaceName`| N | Parameter to set the address of the Service Bus namespace, as a fully-qualified domain name. Required if using Microsoft Entra ID authentication. | `"namespace.servicebus.windows.net"` | -| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| `consumerID` | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | `timeoutInSec` | N | Timeout for sending messages and for management operations. Default: `60` |`30` | `handlerTimeoutInSec`| N | Timeout for invoking the app's handler. Default: `60` | `30` | `lockRenewalInSec` | N | Defines the frequency at which buffered message locks will be renewed. Default: `20`. | `20` @@ -94,7 +94,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Service Bus Topics pubsub component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Service Bus Topics pubsub component supports authentication using all Microsoft Entra ID mechanisms, including Managed Identities. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). #### Example Configuration @@ -175,6 +175,6 @@ Follow the instructions [here](https://docs.microsoft.com/azure/service-bus-mess ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Pub/Sub building block]({{< ref pubsub >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Pub/Sub building block]({{% ref pubsub %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-gcp-pubsub.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-gcp-pubsub.md index 849f118633a..b8fc5dde7af 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-gcp-pubsub.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-gcp-pubsub.md @@ -10,7 +10,7 @@ aliases: ## Create a Dapr component -To set up GCP pub/sub, create a component of type `pubsub.gcp.pubsub`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up GCP pub/sub, create a component of type `pubsub.gcp.pubsub`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -69,7 +69,7 @@ spec: value: 10 ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -78,7 +78,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr |--------------------|:--------:|---------|---------| | projectId | Y | GCP project ID | `myproject-123` | endpoint | N | GCP endpoint for the component to use. Only used for local development (for example) with [GCP Pub/Sub Emulator](https://cloud.google.com/pubsub/docs/emulator). The `endpoint` is unnecessary when running against the GCP production API. | `"http://localhost:8085"` -| `consumerID` | N | The Consumer ID organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. The `consumerID`, along with the `topic` provided as part of the request, are used to build the Pub/Sub subscription ID | Can be set to string value (such as `"channel1"`) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| `consumerID` | N | The Consumer ID organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. The `consumerID`, along with the `topic` provided as part of the request, are used to build the Pub/Sub subscription ID | Can be set to string value (such as `"channel1"`) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | identityProjectId | N | If the GCP pubsub project is different from the identity project, specify the identity project using this attribute | `"myproject-123"` | privateKeyId | N | If using explicit credentials, this field should contain the `private_key_id` field from the service account json document | `"my-private-key"` | privateKey | N | If using explicit credentials, this field should contain the `private_key` field from the service account json | `-----BEGIN PRIVATE KEY-----MIIBVgIBADANBgkqhkiG9w0B` @@ -113,9 +113,9 @@ Since the GCP Pub/Sub component uses the GCP Go Client Libraries, by default it ## Create a GCP Pub/Sub -{{< tabs "Self-Hosted" "GCP" >}} +{{% tabpane "Self-Hosted" "GCP" %}} -{{% codetab %}} +{{% tab %}} For local development, the [GCP Pub/Sub Emulator](https://cloud.google.com/pubsub/docs/emulator) is used to test the GCP Pub/Sub Component. Follow [these instructions](https://cloud.google.com/pubsub/docs/emulator#start) to run the GCP Pub/Sub Emulator. To run the GCP Pub/Sub Emulator locally using Docker, use the following `docker-compose.yaml`: @@ -153,20 +153,20 @@ spec: value: "localhost:8085" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use either "explicit" or "implicit" credentials to configure access to your GCP pubsub instance. If using explicit, most fields are required. Implicit relies on dapr running under a Kubernetes service account (KSA) mapped to a Google service account (GSA) which has the necessary permissions to access pubsub. In implicit mode, only the `projectId` attribute is needed, all other are optional. Follow the instructions [here](https://cloud.google.com/pubsub/docs/quickstart-console) on setting up Google Cloud Pub/Sub system. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-inmemory.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-inmemory.md index e2275a4652c..caa9608720a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-inmemory.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-inmemory.md @@ -26,6 +26,6 @@ spec: ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) in the Related links section -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) in the Related links section +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-jetstream.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-jetstream.md index cfb88b1b032..a8f7e49ba13 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-jetstream.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-jetstream.md @@ -8,7 +8,7 @@ aliases: --- ## Component format -To set up JetStream pub/sub, create a component of type `pubsub.jetstream`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up JetStream pub/sub, create a component of type `pubsub.jetstream`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -103,9 +103,9 @@ spec: ## Create a NATS server -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} You can run a NATS Server with JetStream enabled locally using Docker: ```bash @@ -113,9 +113,9 @@ docker run -d -p 4222:4222 nats:latest -js ``` You can then interact with the server using the client port: `localhost:4222`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Install NATS JetStream on Kubernetes by using the [helm](https://github.com/nats-io/k8s/tree/main/helm/charts/nats#jetstream): ```bash @@ -131,9 +131,9 @@ kubectl get svc my-nats For more information on helm chart settings, see the [Helm chart documentation](https://helm.sh/docs/helm/helm_install/). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Create JetStream @@ -169,9 +169,9 @@ spec: ``` ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) - [JetStream Documentation](https://docs.nats.io/nats-concepts/jetstream) - [NATS CLI](https://github.com/nats-io/natscli) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md index 766678de5a2..63a88403ac5 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up KubeMQ pub/sub, create a component of type `pubsub.kubemq`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up KubeMQ pub/sub, create a component of type `pubsub.kubemq`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -34,7 +34,7 @@ spec: |-------------------|:--------:|-----------------------------------------------------------------------------------------------------------------------------|----------------------------------------| | address | Y | Address of the KubeMQ server | `"localhost:50000"` | | store | N | type of pubsub, true: pubsub persisted (EventsStore), false: pubsub in-memory (Events) | `true` or `false` (default is `false`) | -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | clientID | N | Name for client id connection | `sub-client-12345` | | authToken | N | Auth JWT token for connection Check out [KubeMQ Authentication](https://docs.kubemq.io/learn/access-control/authentication) | `ew...` | | group | N | Subscriber group for load balancing | `g1` | @@ -42,9 +42,9 @@ spec: ## Create a KubeMQ broker -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} 1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key @@ -55,9 +55,9 @@ docker run -d -p 8080:8080 -p 50000:50000 -p 9090:9090 -e KUBEMQ_TOKEN= ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Install KubeMQ CLI Go to [KubeMQ CLI](https://github.com/kubemq-io/kubemqctl/releases) and download the latest version of the CLI. ## Browse KubeMQ Dashboard -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} Open a browser and navigate to [http://localhost:8080](http://localhost:8080) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} With KubeMQCTL installed, run the following command: ```bash @@ -98,9 +98,9 @@ Or, with kubectl installed, run port-forward command: ```bash kubectl port-forward svc/kubemq-cluster-api -n kubemq 8080:8080 ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## KubeMQ Documentation @@ -109,6 +109,6 @@ Visit [KubeMQ Documentation](https://docs.kubemq.io/) for more information. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md index 454c6ac41a2..699e24b034c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up MQTT pub/sub, create a component of type `pubsub.mqtt`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up MQTT pub/sub, create a component of type `pubsub.mqtt`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -41,7 +41,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | url | Y | Address of the MQTT broker. Can be `secretKeyRef` to use a secret reference.
Use the **`tcp://`** URI scheme for non-TLS communication.
Use the **`ssl://`** URI scheme for TLS communication. | `"tcp://[username][:password]@host.domain[:port]"` -| consumerID | N | The client ID used to connect to the MQTT broker for the consumer connection. Defaults to the Dapr app ID.
Note: if `producerID` is not set, `-consumer` is appended to this value for the consumer connection | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | The client ID used to connect to the MQTT broker for the consumer connection. Defaults to the Dapr app ID.
Note: if `producerID` is not set, `-consumer` is appended to this value for the consumer connection | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | producerID | N | The client ID used to connect to the MQTT broker for the producer connection. Defaults to `{consumerID}-producer`. | `"myMqttProducerApp"` | qos | N | Indicates the Quality of Service Level (QoS) of the message ([more info](https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/)). Defaults to `1`. |`0`, `1`, `2` | retain | N | Defines whether the message is saved by the broker as the last known good value for a specified topic. Defaults to `"false"`. | `"true"`, `"false"` @@ -54,13 +54,13 @@ The above example uses secrets as plain strings. It is recommended to use a secr The MQTT pub/sub component has no built-in support for retry strategies. This means that the sidecar sends a message to the service only once. If the service marks the message as not processed, the message won't be acknowledged back to the broker. Only if broker resends the message, would it would be retried. -To make Dapr use more spohisticated retry policies, you can apply a [retry resiliency policy]({{< ref "retries-overview.md" >}}) to the MQTT pub/sub component. +To make Dapr use more spohisticated retry policies, you can apply a [retry resiliency policy]({{% ref "retries-overview.md" %}}) to the MQTT pub/sub component. There is a crucial difference between the two ways of retries: 1. Re-delivery of unacknowledged messages is completely dependent on the broker. Dapr does not guarantee it. Some brokers like [emqx](https://www.emqx.io/), [vernemq](https://vernemq.com/) etc. support it but it not a part of [MQTT3 spec](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718103). -2. Using a [retry resiliency policy]({{< ref "retries-overview.md" >}}) makes the same Dapr sidecar retry redelivering the messages. So it is the same Dapr sidecar and the same app receiving the same message. +2. Using a [retry resiliency policy]({{% ref "retries-overview.md" %}}) makes the same Dapr sidecar retry redelivering the messages. So it is the same Dapr sidecar and the same app receiving the same message. ### Communication using TLS @@ -123,16 +123,16 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} Note that in the case, the value of the consumer ID is random every time Dapr restarts, so we are setting `cleanSession` to true as well. ## Create a MQTT broker -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} You can run a MQTT broker [locally using Docker](https://hub.docker.com/_/eclipse-mosquitto): ```bash @@ -140,9 +140,9 @@ docker run -d -p 1883:1883 -p 9001:9001 --name mqtt eclipse-mosquitto:1.6 ``` You can then interact with the server using the client port: `mqtt://localhost:1883` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can run a MQTT broker in kubernetes using following yaml: ```yaml @@ -196,12 +196,12 @@ spec: ``` You can then interact with the server using the client port: `tcp://mqtt-broker.default.svc.cluster.local:1883` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt3.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt3.md index bb4649a62f2..6604591deee 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt3.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt3.md @@ -10,7 +10,7 @@ aliases: ## Component format -To set up a MQTT3 pub/sub, create a component of type `pubsub.mqtt3`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up a MQTT3 pub/sub, create a component of type `pubsub.mqtt3`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -35,7 +35,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -43,7 +43,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| | `url` | Y | Address of the MQTT broker. Can be `secretKeyRef` to use a secret reference.
Use the **`tcp://`** URI scheme for non-TLS communication.
Use the **`ssl://`** URI scheme for TLS communication. | `"tcp://[username][:password]@host.domain[:port]"` -| `consumerID` | N | The client ID used to connect to the MQTT broker. Defaults to the Dapr app ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| `consumerID` | N | The client ID used to connect to the MQTT broker. Defaults to the Dapr app ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | `retain` | N | Defines whether the message is saved by the broker as the last known good value for a specified topic. Defaults to `"false"`. | `"true"`, `"false"` | `cleanSession` | N | Sets the `clean_session` flag in the connection message to the MQTT broker if `"true"` ([more info](http://www.steves-internet-guide.com/mqtt-clean-sessions-example/)). Defaults to `"false"`. | `"true"`, `"false"` | `caCert` | Required for using TLS | Certificate Authority (CA) certificate in PEM format for verifying server TLS certificates. | See example below @@ -118,18 +118,18 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} Note that in the case, the value of the consumer ID is random every time Dapr restarts, so you should set `cleanSession` to `true` as well. -It is recommended to use [StatefulSets]({{< ref "howto-subscribe-statefulset.md" >}}) with shared subscriptions. +It is recommended to use [StatefulSets]({{% ref "howto-subscribe-statefulset.md" %}}) with shared subscriptions. ## Create a MQTT3 broker -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} You can run a MQTT broker like emqx [locally using Docker](https://hub.docker.com/_/emqx): ```bash @@ -137,9 +137,9 @@ docker run -d -p 1883:1883 --name mqtt emqx:latest ``` You can then interact with the server using the client port: `tcp://localhost:1883` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can run a MQTT3 broker in kubernetes using following yaml: ```yaml @@ -186,12 +186,12 @@ spec: ``` You can then interact with the server using the client port: `tcp://mqtt-broker.default.svc.cluster.local:1883` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-pulsar.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-pulsar.md index 5dc9261a7dd..9d986f59067 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-pulsar.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-pulsar.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up Apache Pulsar pub/sub, create a component of type `pubsub.pulsar`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Apache Pulsar pub/sub, create a component of type `pubsub.pulsar`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. For more information on Apache Pulsar, [read the official docs](https://pulsar.apache.org/docs/en/concepts-overview/). @@ -65,7 +65,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a [secret store for the secrets]({{< ref component-secrets.md >}}). This component supports storing the `token` parameter and any other sensitive parameter and data as Kubernetes Secrets. +The above example uses secrets as plain strings. It is recommended to use a [secret store for the secrets]({{% ref component-secrets.md %}}). This component supports storing the `token` parameter and any other sensitive parameter and data as Kubernetes Secrets. {{% /alert %}} @@ -76,7 +76,7 @@ The above example uses secrets as plain strings. It is recommended to use a [sec | host | Y | Address of the Pulsar broker. Default is `"localhost:6650"` | `"localhost:6650"` OR `"http://pulsar-pj54qwwdpz4b-pulsar.ap-sg.public.pulsar.com:8080"`| | enableTLS | N | Enable TLS. Default: `"false"` | `"true"`, `"false"` | | tenant | N | The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters. Default: `"public"` | `"public"` | -| consumerID | N | Used to set the subscription name or consumer ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Used to set the subscription name or consumer ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | namespace | N | The administrative unit of the topic, which acts as a grouping mechanism for related topics. Default: `"default"` | `"default"` | persistent | N | Pulsar supports two kinds of topics: [persistent](https://pulsar.apache.org/docs/en/concepts-architecture-overview#persistent-storage) and [non-persistent](https://pulsar.apache.org/docs/en/concepts-messaging/#non-persistent-topics). With persistent topics, all messages are durably persisted on disks (if the broker is not standalone, messages are durably persisted on multiple disks), whereas data for non-persistent topics is not persisted to storage disks. | disableBatching | N | disable batching.When batching enabled default batch delay is set to 10 ms and default batch size is 1000 messages,Setting `disableBatching: true` will make the producer to send messages individually. Default: `"false"` | `"true"`, `"false"`| @@ -167,7 +167,7 @@ spec: ### Enabling message delivery retries -The Pulsar pub/sub component has no built-in support for retry strategies. This means that sidecar sends a message to the service only once and is not retried in case of failures. To make Dapr use more spohisticated retry policies, you can apply a [retry resiliency policy]({{< ref "retries-overview.md" >}}) to the Pulsar pub/sub component. Note that it will be the same Dapr sidecar retrying the redelivery the message to the same app instance and not other instances. +The Pulsar pub/sub component has no built-in support for retry strategies. This means that sidecar sends a message to the service only once and is not retried in case of failures. To make Dapr use more spohisticated retry policies, you can apply a [retry resiliency policy]({{% ref "retries-overview.md" %}}) to the Pulsar pub/sub component. Note that it will be the same Dapr sidecar retrying the redelivery the message to the same app instance and not other instances. ### Delay queue @@ -246,7 +246,7 @@ spec: #### Enabling publisher encryption from value -> Note: It is recommended to [reference the public key from a secret]({{< ref component-secrets.md >}}). +> Note: It is recommended to [reference the public key from a secret]({{% ref component-secrets.md %}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -267,7 +267,7 @@ spec: #### Enabling consumer encryption from value -> Note: It is recommended to [reference the public and private keys from a secret]({{< ref component-secrets.md >}}). +> Note: It is recommended to [reference the public and private keys from a secret]({{% ref component-secrets.md %}}). ```yaml apiVersion: dapr.io/v1alpha1 @@ -328,9 +328,9 @@ To ensure that messages arrive in order for each consumer subscribed to a specif ## Create a Pulsar instance -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} ``` docker run -it \ @@ -343,16 +343,16 @@ docker run -it \ ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Refer to the following [Helm chart](https://pulsar.apache.org/docs/helm-overview) Documentation. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md index f6569a8f88e..e0028917dbb 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up RabbitMQ pub/sub, create a component of type `pubsub.rabbitmq`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up RabbitMQ pub/sub, create a component of type `pubsub.rabbitmq`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -69,7 +69,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -81,7 +81,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | hostname | N* | The RabbitMQ hostname. *Mutally exclusive with connectionString field | `localhost` | | username | N* | The RabbitMQ username. *Mutally exclusive with connectionString field | `username` | | password | N* | The RabbitMQ password. *Mutally exclusive with connectionString field | `password` | -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | durable | N | Whether or not to use [durable](https://www.rabbitmq.com/queues.html#durability) queues. Defaults to `"false"` | `"true"`, `"false"` | deletedWhenUnused | N | Whether or not the queue should be configured to [auto-delete](https://www.rabbitmq.com/queues.html) Defaults to `"true"` | `"true"`, `"false"` | autoAck | N | Whether or not the queue consumer should [auto-ack](https://www.rabbitmq.com/confirms.html) messages. Defaults to `"false"` | `"true"`, `"false"` @@ -166,7 +166,7 @@ Note that while the `caCert` and `clientCert` values may not be secrets, they ca The RabbitMQ pub/sub component has no built-in support for retry strategies. This means that the sidecar sends a message to the service only once. When the service returns a result, the message will be marked as consumed regardless of whether it was processed correctly or not. Note that this is common among all Dapr PubSub components and not just RabbitMQ. Dapr can try redelivering a message a second time, when `autoAck` is set to `false` and `requeueInFailure` is set to `true`. -To make Dapr use more sophisticated retry policies, you can apply a [retry resiliency policy]({{< ref "retries-overview.md" >}}) to the RabbitMQ pub/sub component. +To make Dapr use more sophisticated retry policies, you can apply a [retry resiliency policy]({{% ref "retries-overview.md" %}}) to the RabbitMQ pub/sub component. There is a crucial difference between the two ways to retry messages: @@ -175,9 +175,9 @@ There is a crucial difference between the two ways to retry messages: ## Create a RabbitMQ server -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run a RabbitMQ server locally using Docker: ```bash @@ -185,9 +185,9 @@ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3 ``` You can then interact with the server using the client port: `localhost:5672`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install RabbitMQ on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/stable/rabbitmq): ```bash @@ -201,9 +201,9 @@ This will install RabbitMQ into the `default` namespace. To interact with Rabbit For example, if installing using the example above, the RabbitMQ server client address would be: `rabbitmq.default.svc.cluster.local:5672` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Use topic exchange to route messages @@ -285,9 +285,9 @@ spec: ### Programmatic priority queue example -{{< tabs Python JavaScript Go>}} +{{% tabpane Python JavaScript Go%}} -{{% codetab %}} +{{% tab %}} ```python @app.route('/dapr/subscribe', methods=['GET']) @@ -305,9 +305,9 @@ def subscribe(): return jsonify(subscriptions) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript const express = require('express') @@ -333,9 +333,9 @@ app.get('/dapr/subscribe', (req, res) => { }) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go package main @@ -376,25 +376,25 @@ func configureSubscribeHandler(w http.ResponseWriter, _ *http.Request) { json.NewEncoder(w).Encode(t) } ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Setting a priority when publishing a message To set a priority on a message, add the publish metadata key `maxPriority` to the publish endpoint or SDK method. -{{< tabs "HTTP API (Bash)" Python JavaScript Go>}} +{{% tabpane "HTTP API (Bash)" Python JavaScript Go%}} -{{% codetab %}} +{{% tab %}} ```bash curl -X POST http://localhost:3601/v1.0/publish/order-pub-sub/orders?metadata.priority=3 -H "Content-Type: application/json" -d '{"orderId": "100"}' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```python with DaprClient() as client: @@ -406,28 +406,28 @@ with DaprClient() as client: metadata= { 'priority': '3' }) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```javascript await client.pubsub.publish(PUBSUB_NAME, TOPIC_NAME, orderId, { 'priority': '3' }); ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} ```go client.PublishEvent(ctx, PUBSUB_NAME, TOPIC_NAME, []byte(strconv.Itoa(orderId)), map[string]string{"priority": "3"}) ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Use quorum queues -By default, Dapr creates `classic` queues. To create `quorum` queues, add the following metadata to your pub/sub [subscription]({{< ref subscription-schema.md >}}) +By default, Dapr creates `classic` queues. To create `quorum` queues, add the following metadata to your pub/sub [subscription]({{% ref subscription-schema.md %}}) ```yaml apiVersion: dapr.io/v2alpha1 @@ -454,7 +454,7 @@ If you set both component-level and message-level TTL, the default component-lev ## Single Active Consumer The RabbitMQ [Single Active Consumer](https://www.rabbitmq.com/docs/consumers#single-active-consumer) setup ensures that only one consumer at a time processes messages from a queue and switches to another registered consumer if the active one is canceled or fails. This approach might be required when it is crucial for messages to be consumed in the exact order they arrive in the queue and if distributed processing with multiple instances is not supported. -When this option is enabled on a queue by Dapr, an instance of the Dapr runtime will be the single active consumer. To allow another application instance to take over in case of failure, Dapr runtime must [probe the application's health]({{< ref "app-health.md" >}}) and unsubscribe from the pub/sub component. +When this option is enabled on a queue by Dapr, an instance of the Dapr runtime will be the single active consumer. To allow another application instance to take over in case of failure, Dapr runtime must [probe the application's health]({{% ref "app-health.md" %}}) and unsubscribe from the pub/sub component. {{% alert title="Note" color="primary" %}} This pattern will prevent the application to scale as only one instance can process the load. While it might be interesting for Dapr integration with legacy or sensible applications, you should consider a design allowing distributed processing if you need scalability. @@ -477,6 +477,6 @@ spec: ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) in the Related links section -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) in the Related links section +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-redis-pubsub.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-redis-pubsub.md index 7ea8295630b..76ffc910b4d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-redis-pubsub.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-redis-pubsub.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up Redis Streams pub/sub, create a component of type `pubsub.redis`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Redis Streams pub/sub, create a component of type `pubsub.redis`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -43,11 +43,11 @@ The above example uses secrets as plain strings. It is recommended to use a secr | redisHost | Y | Connection-string for the redis host. If `"redisType"` is `"cluster"` it can be multiple hosts separated by commas or just a single host | `localhost:6379`, `redis-master.default.svc.cluster.local:6379` | redisPassword | N | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` | redisUsername | N | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `""`, `"default"` -| consumerID | N | The consumer group ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) -| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{< ref "#setup-redis" >}}) | `"true"`, `"false"` | +| consumerID | N | The consumer group ID. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) +| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{% ref "#setup-redis" %}}) | `"true"`, `"false"` | | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` | -| clientCert | N | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | -| clientKey | N | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | +| clientCert | N | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | +| clientKey | N | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | | redeliverInterval | N | The interval between checking for pending messages to redeliver. Can use either be Go duration string (for example "ms", "s", "m") or milliseconds number. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"`, `"5000"` | processingTimeout | N | The amount time that a message must be pending before attempting to redeliver it. Can use either be Go duration string ( for example "ms", "s", "m") or milliseconds number. Defaults to `"15s"`. `"0"` disables redelivery. | `"60s"`, `"600000"` | queueDepth | N | The size of the message queue for processing. Defaults to `"100"`. | `"1000"` @@ -75,14 +75,14 @@ The above example uses secrets as plain strings. It is recommended to use a secr Dapr can use any Redis instance - containerized, running on your local dev machine, or a managed cloud service, provided the version of Redis is 5.x or 6.x. -{{< tabs "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" %}} -{{% codetab %}} +{{% tab %}} The Dapr CLI will automatically create and setup a Redis Streams instance for you. The Redis instance will be installed via Docker when you run `dapr init`, and the component file will be created in default directory. (`$HOME/.dapr/components` directory (Mac/Linux) or `%USERPROFILE%\.dapr\components` on Windows). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). 1. Install Redis into your cluster. @@ -111,13 +111,13 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K - name: redisPassword value: "lhDOkwTlp0" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS Redis](https://aws.amazon.com/redis/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. [Create an Azure Cache for Redis instance using the official Microsoft documentation.](https://docs.microsoft.com/azure/azure-cache-for-redis/quickstart-create-redis) 1. Once your instance is created, grab the Host name (FQDN) and your access key from the Azure portal. @@ -134,7 +134,7 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you saved earlier. - **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + **Note:** In a production-grade application, follow [secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. 1. Enable EntraID support: - Enable Entra ID authentication on your Azure Redis server. This may takes a few minutes. @@ -142,15 +142,15 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set `enableTLS` to `"true"` to support TLS. -> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{< ref "howto-mi.md#set-up-identities-in-your-component" >}}). +> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{% ref "howto-mi.md#set-up-identities-in-your-component" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} {{% alert title="Note" color="primary" %}} @@ -158,6 +158,6 @@ The Dapr CLI automatically deploys a local redis instance in self hosted mode as {{% /alert %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/Sub building block]({{< ref pubsub >}}) \ No newline at end of file +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/Sub building block]({{% ref pubsub %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rocketmq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rocketmq.md index 617b9141a7b..d9799ef0a23 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rocketmq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rocketmq.md @@ -8,7 +8,7 @@ aliases: --- ## Component format -To set up RocketMQ pub/sub, create a component of type `pubsub.rocketmq`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up RocketMQ pub/sub, create a component of type `pubsub.rocketmq`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -40,7 +40,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -49,7 +49,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | instanceName | N | Instance name | `time.Now().String()` | `dapr-rocketmq-test` | | consumerGroup | N | Consumer group name. Recommend. If `producerGroup` is `null`,`groupName` is used. | | `dapr-rocketmq-test-g-c ` | | producerGroup (consumerID) | N | Producer group name. Recommended. If `producerGroup` is `null`,`consumerID` is used. If `consumerID` also is null, `groupName` is used. | | `dapr-rocketmq-test-g-p` | -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | groupName | N | Consumer/Producer group name. **Depreciated**. | | `dapr-rocketmq-test-g` | | nameSpace | N | RocketMQ namespace | | `dapr-rocketmq` | | nameServerDomain | N | RocketMQ name server domain | | `https://my-app.net:8080/nsaddr` | @@ -156,6 +156,6 @@ If the `ShardingKey` does not exist, the `RoundRobin` algorithm is used to deter ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- [Pub/Sub building block]({{< ref pubsub >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- [Pub/Sub building block]({{% ref pubsub %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-solace-amqp.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-solace-amqp.md index 71523347e53..4527aa385e1 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-solace-amqp.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-solace-amqp.md @@ -9,7 +9,7 @@ aliases: ## Component format -To set up Solace-AMQP pub/sub, create a component of type `pubsub.solace.amqp`. See the [pub/sub broker component file]({{< ref setup-pubsub.md >}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pub/sub configuration. +To set up Solace-AMQP pub/sub, create a component of type `pubsub.solace.amqp`. See the [pub/sub broker component file]({{% ref setup-pubsub.md %}}) to learn how ConsumerID is automatically generated. Read the [How-to: Publish and Subscribe guide]({{% ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" %}}) on how to create and apply a pub/sub configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -41,7 +41,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | url | Y | Address of the AMQP broker. Can be `secretKeyRef` to use a secret reference.
Use the **`amqp://`** URI scheme for non-TLS communication.
Use the **`amqps://`** URI scheme for TLS communication. | `"amqp://host.domain[:port]"` | username | Y | The username to connect to the broker. Only required if anonymous is not specified or set to `false` .| `default` | password | Y | The password to connect to the broker. Only required if anonymous is not specified or set to `false`. | `default` -| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{< ref "component-schema.md#templated-metadata-values" >}}) +| consumerID | N | Consumer ID (consumer tag) organizes one or more consumers into a group. Consumers with the same consumer ID work as one virtual consumer; for example, a message is processed only once by one of the consumers in the group. If the `consumerID` is not provided, the Dapr runtime set it to the Dapr application ID (`appID`) value. | Can be set to string value (such as `"channel1"` in the example above) or string format value (such as `"{podName}"`, etc.). [See all of template tags you can use in your component metadata.]({{% ref "component-schema.md#templated-metadata-values" %}}) | anonymous | N | To connect to the broker without credential validation. Only works if enabled on the broker. A username and password would not be required if this is set to `true`. | `true` | caCert | Required for using TLS | Certificate Authority (CA) certificate in PEM format for verifying server TLS certificates. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` | clientCert | Required for using TLS | TLS client certificate in PEM format. Must be used with `clientKey`. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` @@ -91,9 +91,9 @@ By default, messages are published and subscribed over topics. If you would like ## Create a Solace broker -{{< tabs "Self-Hosted" "SaaS">}} +{{% tabpane "Self-Hosted" "SaaS"%}} -{{% codetab %}} +{{% tab %}} You can run a Solace broker [locally using Docker](https://hub.docker.com/r/solace/solace-pubsub-standard): ```bash @@ -101,16 +101,16 @@ docker run -d -p 8080:8080 -p 55554:55555 -p 8008:8008 -p 1883:1883 -p 8000:8000 ``` You can then interact with the server using the client port: `mqtt://localhost:5672` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can also sign up for a free SaaS broker on [Solace Cloud](https://console.solace.cloud/login/new-account?product=event-streaming). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-publish-subscribe.md#step-2-publish-a-topic" >}}) for instructions on configuring pub/sub components -- [Pub/sub building block]({{< ref pubsub >}}) \ No newline at end of file +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-publish-subscribe.md#step-2-publish-a-topic" %}}) for instructions on configuring pub/sub components +- [Pub/sub building block]({{% ref pubsub %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md index 9232b3bbe71..a05efdfb105 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/_index.md @@ -9,8 +9,8 @@ aliases: no_list: true --- -The following table lists secret stores supported by the Dapr secrets building block. [Learn how to set up different secret stores for Dapr secrets management.]({{< ref setup-secret-store.md >}}) +The following table lists secret stores supported by the Dapr secrets building block. [Learn how to set up different secret stores for Dapr secrets management.]({{% ref setup-secret-store.md %}}) -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} -{{< partial "components/secret-stores.html" >}} +{{% partial "components/secret-stores.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/alicloud-oos-parameter-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/alicloud-oos-parameter-store.md index 39c4493a08e..cf12115cefd 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/alicloud-oos-parameter-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/alicloud-oos-parameter-store.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup AlibabaCloud OOS Parameter Store secret store create a component of type `secretstores.alicloud.parameterstore`. See [this guide]({{< ref "setup-secret-store.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. +To setup AlibabaCloud OOS Parameter Store secret store create a component of type `secretstores.alicloud.parameterstore`. See [this guide]({{% ref "setup-secret-store.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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -31,7 +31,7 @@ spec: ``` {{% 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. +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 @@ -45,7 +45,7 @@ The above example uses secrets as plain strings. It is recommended to use a loca ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api.md#query-parameters" >}}) can be provided when retrieving secrets from this secret store: +The following [optional query parameters]({{% ref "secrets_api.md#query-parameters" %}}) can be provided when retrieving secrets from this secret store: Query Parameter | Description --------- | ----------- @@ -58,7 +58,7 @@ Setup AlibabaCloud OOS Parameter Store using the AlibabaCloud documentation: htt ## 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-parameter-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-parameter-store.md index bc951b50b84..86f2e304e3a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-parameter-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-parameter-store.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS SSM Parameter Store secret store create a component of type `secretstores.aws.parameterstore`. See [this guide]({{< ref "setup-secret-store.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. +To setup AWS SSM Parameter Store secret store create a component of type `secretstores.aws.parameterstore`. See [this guide]({{% ref "setup-secret-store.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. +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes. ```yaml apiVersion: dapr.io/v1alpha1 @@ -34,7 +34,7 @@ spec: value: "[secret_name]" ``` {{% 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. +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 @@ -56,8 +56,8 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md index 1a70638806e..d59af95a5a3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md @@ -9,9 +9,9 @@ aliases: ## Component format -To setup AWS Secrets Manager secret store create a component of type `secretstores.aws.secretmanager`. See [this guide]({{< ref "setup-secret-store.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. +To setup AWS Secrets Manager secret store create a component of type `secretstores.aws.secretmanager`. See [this guide]({{% ref "setup-secret-store.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. +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes. ```yaml apiVersion: dapr.io/v1alpha1 @@ -32,7 +32,7 @@ spec: 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. +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 @@ -50,7 +50,7 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided when retrieving secrets from this secret store: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided when retrieving secrets from this secret store: Query Parameter | Description --------- | ----------- @@ -62,8 +62,8 @@ Query Parameter | Description Setup AWS Secrets Manager using the AWS documentation: https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md index b5860fe9941..5e7a5346fd7 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md @@ -10,8 +10,8 @@ aliases: ## Component format To setup Azure Key Vault secret store, create a component of type `secretstores.azure.keyvault`. -- See [the secret store components guide]({{< ref "setup-secret-store.md#apply-the-configuration" >}}) on how to create and apply a secret store configuration. -- See [the guide on referencing secrets]({{< ref component-secrets.md >}}) to retrieve and use the secret with Dapr components. +- See [the secret store components guide]({{% ref "setup-secret-store.md#apply-the-configuration" %}}) on how to create and apply a secret store configuration. +- See [the guide on referencing secrets]({{% ref component-secrets.md %}}) to retrieve and use the secret with Dapr components. - See [the Configure the component section](#configure-the-component) below. ```yaml @@ -39,7 +39,7 @@ spec: ## Authenticating with Microsoft Entra ID The Azure Key Vault secret store component supports authentication with Microsoft Entra ID only. Before you enable this component: -1. Read the [Authenticating to Azure]({{< ref authenticating-azure.md >}}) document. +1. Read the [Authenticating to Azure]({{% ref authenticating-azure.md %}}) document. 1. Create an Microsoft Entra ID application (also called Service Principal). 1. Alternatively, create a managed identity for your application platform. @@ -49,13 +49,13 @@ The Azure Key Vault secret store component supports authentication with Microsof |--------------------|:--------:|---------|---------| | `vaultName` | Y | The name of the Azure Key Vault | `"mykeyvault"` | | `azureEnvironment` | N | Optional name for the Azure environment if using a different Azure cloud | `"AZUREPUBLICCLOUD"` (default value), `"AZURECHINACLOUD"`, `"AZUREUSGOVERNMENTCLOUD"`, `"AZUREGERMANCLOUD"` | -| Auth metadata | | See [Authenticating to Azure]({{< ref authenticating-azure.md >}}) for more information +| Auth metadata | | See [Authenticating to Azure]({{% ref authenticating-azure.md %}}) for more information -Additionally, you must provide the authentication fields as explained in the [Authenticating to Azure]({{< ref authenticating-azure.md >}}) document. +Additionally, you must provide the authentication fields as explained in the [Authenticating to Azure]({{% ref authenticating-azure.md %}}) document. ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided when retrieving secrets from this secret store: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided when retrieving secrets from this secret store: Query Parameter | Description --------- | ----------- @@ -70,7 +70,7 @@ Query Parameter | Description - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - [jq](https://stedolan.github.io/jq/download/) - You are using bash or zsh shell -- You've created an Microsoft Entra ID application (Service Principal) per the instructions in [Authenticating to Azure]({{< ref authenticating-azure.md >}}). You will need the following values: +- You've created an Microsoft Entra ID application (Service Principal) per the instructions in [Authenticating to Azure]({{% ref authenticating-azure.md %}}). You will need the following values: | Value | Description | | ----- | ----------- | @@ -123,17 +123,17 @@ Query Parameter | Description --scope "${RG_ID}/providers/Microsoft.KeyVault/vaults/${KEYVAULT_NAME}" ``` -Other less restrictive roles, like "Key Vault Secrets Officer" and "Key Vault Administrator", can be used, depending on your application. [See Microsoft Docs for more information about Azure built-in roles for Key Vault](https://docs.microsoft.com/azure/key-vault/general/rbac-guide?tabs=azure-cli#azure-built-in-roles-for-key-vault-data-plane-operations). +Other less restrictive roles, like "Key Vault Secrets Officer" and "Key Vault Administrator", can be used, depending on your application. [See Microsoft Docs for more information about Azure built-in roles for Key Vault](https://docs.microsoft.com/azure/key-vault/general/rbac-guide?tabpane=azure-cli#azure-built-in-roles-for-key-vault-data-plane-operations). ### Configure the component -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} #### Using a client secret -To use a **client secret**, create a file called `azurekeyvault.yaml` in the components directory. Use the following template, filling in [the Microsoft Entra ID application you created]({{< ref authenticating-azure.md >}}): +To use a **client secret**, create a file called `azurekeyvault.yaml` in the components directory. Use the following template, filling in [the Microsoft Entra ID application you created]({{% ref authenticating-azure.md %}}): ```yaml apiVersion: dapr.io/v1alpha1 @@ -156,7 +156,7 @@ spec: #### Using a certificate -If you want to use a **certificate** saved on the local disk instead, use the following template. Fill in the details of [the Microsoft Entra ID application you created]({{< ref authenticating-azure.md >}}): +If you want to use a **certificate** saved on the local disk instead, use the following template. Fill in the details of [the Microsoft Entra ID application you created]({{% ref authenticating-azure.md %}}): ```yaml apiVersion: dapr.io/v1alpha1 @@ -176,10 +176,10 @@ spec: - name: azureCertificateFile value : "[pfx_certificate_file_fully_qualified_local_path]" ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} -In Kubernetes, you store the client secret or the certificate into the Kubernetes Secret Store and then refer to those in the YAML file. Before you start, you need the details of [the Microsoft Entra ID application you created]({{< ref authenticating-azure.md >}}). +{{% tab %}} +In Kubernetes, you store the client secret or the certificate into the Kubernetes Secret Store and then refer to those in the YAML file. Before you start, you need the details of [the Microsoft Entra ID application you created]({{% ref authenticating-azure.md %}}). #### Using a client secret @@ -305,7 +305,7 @@ In Kubernetes, you store the client secret or the certificate into the Kubernete **Important**: While both Microsoft Entra ID pod identity and workload identity are in preview, currently Microsoft Entra ID Workload Identity is planned for general availability (stable state). 1. After creating a workload identity, give it `read` permissions: - - [On your desired KeyVault instance](https://docs.microsoft.com/azure/key-vault/general/assign-access-policy?tabs=azure-cli#assign-the-access-policy) + - [On your desired KeyVault instance](https://docs.microsoft.com/azure/key-vault/general/assign-access-policy?tabpane=azure-cli#assign-the-access-policy) - In your application deployment. Inject the pod identity both: - Via a label annotation - By specifying the Kubernetes service account associated with the desired workload identity @@ -325,15 +325,15 @@ When using **managed identity directly**, you can have multiple identities assoc However, when using **managed identity via Microsoft Entra ID workload identity**, `azureClientId` is not necessary and has no effect. The Azure identity to be used is inferred from the service account tied to an Azure identity via the Azure federated identity. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## References -- [Authenticating to Azure]({{< ref authenticating-azure.md >}}) +- [Authenticating to Azure]({{% ref authenticating-azure.md %}}) - [Azure CLI: keyvault commands](https://docs.microsoft.com/cli/azure/keyvault?view=azure-cli-latest#az-keyvault-create) -- [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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/envvar-secret-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/envvar-secret-store.md index 9ef8198aac0..910b6210d82 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/envvar-secret-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/envvar-secret-store.md @@ -44,7 +44,7 @@ For security reasons, this component cannot be used to access these environment - Any variable whose name begins with the `DAPR_` prefix ## 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 >}}) \ No newline at end of file +- [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 %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md index 7862d0b2253..85fddb04bea 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md @@ -56,12 +56,12 @@ Given the following JSON loaded from `secretsFile`: } ``` -The flag `multiValued` determines whether the secret store presents a [name/value behavior or a multiple key-value per secret behavior]({{< ref "secrets_api.md#response-body" >}}). +The flag `multiValued` determines whether the secret store presents a [name/value behavior or a multiple key-value per secret behavior]({{% ref "secrets_api.md#response-body" %}}). ### Name/Value semantics -If `multiValued` is `false`, the store loads [the JSON file]({{< ref "#setup-json-file-to-hold-the-secrets" >}}) and create a map with the following key-value pairs: +If `multiValued` is `false`, the store loads [the JSON file]({{% ref "#setup-json-file-to-hold-the-secrets" %}}) and create a map with the following key-value pairs: | flattened key | value | | --- | --- | @@ -99,7 +99,7 @@ $ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings:s If `multiValued` is `true`, the secret store enables multiple key-value per secret behavior: - Nested structures after the top level will be flattened. -- It parses the [same JSON file]({{< ref "#setup-json-file-to-hold-the-secrets" >}}) into this table: +- It parses the [same JSON file]({{% ref "#setup-json-file-to-hold-the-secrets" %}}) into this table: | key | value | | --- | --- | @@ -108,7 +108,7 @@ If `multiValued` is `true`, the secret store enables multiple key-value per secr Notice that in the above table: - `connectionStrings` is now a JSON object with two keys: `mysql` and `sql`. -- The `connectionStrings:sql` and `connectionStrings:mysql` flattened keys from the [table mapped for name/value semantics]({{< ref "#namevalue-semantics" >}}) are missing. +- The `connectionStrings:sql` and `connectionStrings:mysql` flattened keys from the [table mapped for name/value semantics]({{% ref "#namevalue-semantics" %}}) are missing. Invoking a `GET` request on the key `connectionStrings` now results in a successful HTTP response similar to the following: @@ -174,7 +174,7 @@ $ curl http://localhost:3501/v1.0/secrets/local-secret-store/connectionStrings This is useful in order to mimic secret stores like Vault or Kubernetes that return multiple key/value pairs per secret key. ## 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/gcp-secret-manager.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/gcp-secret-manager.md index 4557e436f76..a119573a5a4 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/gcp-secret-manager.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/gcp-secret-manager.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup GCP Secret Manager secret store create a component of type `secretstores.gcp.secretmanager`. See [this guide]({{< ref "setup-secret-store#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. +To setup GCP Secret Manager secret store create a component of type `secretstores.gcp.secretmanager`. See [this guide]({{% ref "setup-secret-store#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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -43,7 +43,7 @@ spec: ``` {{% 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. +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 @@ -69,7 +69,7 @@ Also, see how to [Set up Application Default Credentials](https://cloud.google.c ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided to the GCP Secret Manager component: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided to the GCP Secret Manager component: Query Parameter | Description --------- | ----------- @@ -80,7 +80,7 @@ Query Parameter | Description Setup GCP Secret Manager using the GCP documentation: https://cloud.google.com/secret-manager/docs/quickstart. ## 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md index d73ba7db0c2..f54103ba1f9 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md @@ -9,7 +9,7 @@ aliases: ## Create the Vault component -To setup HashiCorp Vault secret store create a component of type `secretstores.hashicorp.vault`. See [this guide]({{< ref "setup-secret-store.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. +To setup HashiCorp Vault secret store create a component of type `secretstores.hashicorp.vault`. See [this guide]({{% ref "setup-secret-store.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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -46,7 +46,7 @@ spec: value: "map" ``` {{% 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. +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 @@ -68,7 +68,7 @@ The above example uses secrets as plain strings. It is recommended to use a loca ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided to Hashicorp Vault secret store component: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided to Hashicorp Vault secret store component: Query Parameter | Description --------- | ----------- @@ -76,17 +76,17 @@ Query Parameter | Description ## Setup Hashicorp Vault instance -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} Setup Hashicorp Vault using the Vault documentation: https://www.vaultproject.io/docs/install/index.html. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} For Kubernetes, you can use the Helm Chart: . -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Multiple key-values per secret @@ -149,7 +149,7 @@ spec: ``` ## 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/huaweicloud-csms.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/huaweicloud-csms.md index 329a1296138..2d896fc17e4 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/huaweicloud-csms.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/huaweicloud-csms.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup HuaweiCloud Cloud Secret Management Service (CSMS) secret store create a component of type `secretstores.huaweicloud.csms`. See [this guide]({{< ref "setup-secret-store.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. +To setup HuaweiCloud Cloud Secret Management Service (CSMS) secret store create a component of type `secretstores.huaweicloud.csms`. See [this guide]({{% ref "setup-secret-store.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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -29,7 +29,7 @@ spec: ``` {{% 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. +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 @@ -42,7 +42,7 @@ The above example uses secrets as plain strings. It is recommended to use a loca ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided when retrieving secrets from this secret store: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided when retrieving secrets from this secret store: Query Parameter | Description --------- | ----------- @@ -55,7 +55,7 @@ Setup HuaweiCloud Cloud Secret Management Service (CSMS) using the HuaweiCloud d ## 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 >}}) +- [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 %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/kubernetes-secret-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/kubernetes-secret-store.md index a44a6de9a60..70238c1968b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/kubernetes-secret-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/kubernetes-secret-store.md @@ -13,12 +13,12 @@ When Dapr is deployed to a Kubernetes cluster, a secret store with the name `kub A custom component definition file for a Kubernetes secret store can still be configured (See below for details). Using a custom definition decouples referencing the secret store in your code from the hosting platform as the store name is not fixed and can be customized, keeping your code more generic and portable. Additionally, by explicitly defining a Kubernetes secret store component you can connect to a Kubernetes secret store from a local Dapr self-hosted installation. This requires a valid [`kubeconfig`](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file. {{% alert title="Scoping secret store access" color="warning" %}} -When limiting access to secrets in your application using [secret scopes]({{}}), it's important to include the default secret store in the scope definition in order to restrict it. +When limiting access to secrets in your application using [secret scopes]({{%ref secrets-scopes.md%}}), it's important to include the default secret store in the scope definition in order to restrict it. {{% /alert %}} ## Create a custom Kubernetes secret store component -To setup a Kubernetes secret store create a component of type `secretstores.kubernetes`. See [this guide]({{< ref "setup-secret-store.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. +To setup a Kubernetes secret store create a component of type `secretstores.kubernetes`. See [this guide]({{% ref "setup-secret-store.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. ```yaml apiVersion: dapr.io/v1alpha1 @@ -41,15 +41,15 @@ spec: ## Optional per-request metadata properties -The following [optional query parameters]({{< ref "secrets_api#query-parameters" >}}) can be provided to Kubernetes secret store component: +The following [optional query parameters]({{% ref "secrets_api#query-parameters" %}}) can be provided to Kubernetes secret store component: Query Parameter | Description --------- | ----------- `metadata.namespace`| The namespace of the secret. If not specified, the namespace of the pod is used. ## 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 >}}) -- [How To: Use secret scoping]({{}}) +- [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 %}}) +- [How To: Use secret scoping]({{%ref secrets-scopes.md%}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md index e37664a83fd..87e6341de63 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/_index.md @@ -9,12 +9,12 @@ aliases: no_list: true --- -The following table lists state stores supported, at various levels, by the Dapr state management building block. [Learn how to set up different state stores for Dapr state management.]({{< ref setup-state-store.md >}}) +The following table lists state stores supported, at various levels, by the Dapr state management building block. [Learn how to set up different state stores for Dapr state management.]({{% ref setup-state-store.md %}}) -{{< partial "components/description.html" >}} +{{% partial "components/description.html" %}} {{% alert title="Note" color="primary" %}} State stores can be used for actors if it supports both transactional operations and ETag. {{% /alert %}} -{{< partial "components/state-stores.html" >}} +{{% partial "components/state-stores.html" %}} diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-aerospike.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-aerospike.md index c58a9964a75..b04cbd9162f 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-aerospike.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-aerospike.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Aerospike state store create a component of type `state.Aerospike`. 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 Aerospike state store create a component of type `state.Aerospike`. 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 @@ -29,7 +29,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -42,9 +42,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Aerospike -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Aerospike locally using Docker: ``` @@ -52,9 +52,9 @@ docker run -d --name aerospike -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:30 ``` You can then interact with the server using `localhost:3000`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Aerospike on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/stable/aerospike): ``` @@ -68,11 +68,11 @@ To interact with Aerospike, find the service with: `kubectl get svc aerospike -n For example, if installing using the example above, the Aerospike host address would be: `aerospike-my-aerospike.aerospike.svc.cluster.local:3000` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-blobstorage.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-blobstorage.md index 6f99ba27f26..5c6d0a9ed87 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-blobstorage.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-blobstorage.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup the Azure Blob Storage state store create a component of type `state.azure.blobstorage`. 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 the Azure Blob Storage state store create a component of type `state.azure.blobstorage`. 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 @@ -31,14 +31,14 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Versioning Dapr has 2 versions of the Azure Blob Storage state store component: `v1` and `v2`. It is recommended to use `v2` for all new applications. `v1` is considered legacy and is preserved for compatibility with existing applications only. -In `v1`, a longstanding implementation issue was identified, where the [key prefix]({{< ref howto-share-state.md >}}) was incorrectly stripped by the component, essentially behaving as if `keyPrefix` was always set to `none`. +In `v1`, a longstanding implementation issue was identified, where the [key prefix]({{% ref howto-share-state.md %}}) was incorrectly stripped by the component, essentially behaving as if `keyPrefix` was always set to `none`. The updated `v2` of the component fixes the incorrect behavior and makes the state store correctly respect the `keyPrefix` property. While `v1` and `v2` have the same metadata fields, they are otherwise incompatible, with no automatic data migration path for `v1` to `v2`. @@ -63,7 +63,7 @@ If you are using `v1` of this component, you should continue to use `v1` until y ## Setup Azure Blob Storage -[Follow the instructions](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal) from the Azure documentation on how to create an Azure Storage Account. +[Follow the instructions](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabpane=azure-portal) from the Azure documentation on how to create an Azure Storage Account. If you wish to create a container for Dapr to use, you can do so beforehand. However, the Blob Storage state provider will create one for you automatically if it doesn't exist. @@ -84,7 +84,7 @@ This component supports authentication with Microsoft Entra ID as an alternative > > You must also be authenticated with Azure in your Azure CLI. -1. To get started with using Microsoft Entra ID for authenticating the Blob Storage state store component, make sure you've created an Microsoft Entra ID application and a Service Principal as explained in the [Authenticating to Azure]({{< ref authenticating-azure.md >}}) document. +1. To get started with using Microsoft Entra ID for authenticating the Blob Storage state store component, make sure you've created an Microsoft Entra ID application and a Service Principal as explained in the [Authenticating to Azure]({{% ref authenticating-azure.md %}}) document. Once done, set a variable with the ID of the Service Principal that you created: ```sh @@ -109,7 +109,7 @@ This component supports authentication with Microsoft Entra ID as an alternative --scope "${RG_ID}/providers/Microsoft.Storage/storageAccounts/${STORAGE_ACCOUNT_NAME}" ``` -When authenticating your component using Microsoft Entra ID, the `accountKey` field is not required. Instead, please specify the required credentials in the component's metadata (if any) according to the [Authenticating to Azure]({{< ref authenticating-azure.md >}}) document. +When authenticating your component using Microsoft Entra ID, the `accountKey` field is not required. Instead, please specify the required credentials in the component's metadata (if any) according to the [Authenticating to Azure]({{% ref authenticating-azure.md %}}) document. For example: @@ -171,6 +171,6 @@ Azure Blob Storage state concurrency is achieved by using `ETag`s according to [ ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md index e33f603617f..2e67d46c137 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Cosmos DB state store create a component of type `state.azure.cosmosdb`. 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 Azure Cosmos DB state store create a component of type `state.azure.cosmosdb`. 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 @@ -34,7 +34,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} If you wish to use Cosmos DB as an actor store, append the following to the yaml. @@ -56,7 +56,7 @@ If you wish to use Cosmos DB as an actor store, append the following to the yam ### Microsoft Entra ID authentication -The Azure Cosmos DB state store component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Cosmos DB state store component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). You can read additional information for setting up Cosmos DB with Azure AD authentication in the [section below](#setting-up-cosmos-db-for-authenticating-with-azure-ad). @@ -75,7 +75,7 @@ In order to setup Cosmos DB as a state store, you need the following properties ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to override the default TTL on the CosmodDB container, indicating when the data should be considered "expired". Note that this value _only_ takes effect if the container's `DefaultTimeToLive` field has a non-NULL value. See the [CosmosDB documentation](https://docs.microsoft.com/azure/cosmos-db/nosql/time-to-live) for more information. +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to override the default TTL on the CosmodDB container, indicating when the data should be considered "expired". Note that this value _only_ takes effect if the container's `DefaultTimeToLive` field has a non-NULL value. See the [CosmosDB documentation](https://docs.microsoft.com/azure/cosmos-db/nosql/time-to-live) for more information. ## Best Practices for Production Use @@ -83,7 +83,7 @@ Azure Cosmos DB shares a strict metadata request rate limit across all database Therefore several strategies must be applied to avoid simultaneous new connections to Azure Cosmos DB: -- Ensure sidecars of applications only load the Azure Cosmos DB component when they require it to avoid unnecessary database connections. This can be done by [scoping your components to specific applications]({{< ref component-scopes.md >}}#application-access-to-components-with-scopes). +- Ensure sidecars of applications only load the Azure Cosmos DB component when they require it to avoid unnecessary database connections. This can be done by [scoping your components to specific applications]({{% ref component-scopes.md %}}#application-access-to-components-with-scopes). - Choose deployment strategies that sequentially deploy or start your applications to minimize bursts in new connections to your Azure Cosmos DB accounts. - Avoid reusing the same Azure Cosmos DB account for unrelated databases or systems (even outside of Dapr). Distinct Azure Cosmos DB accounts have distinct rate limits. - Increase the `initTimeout` value to allow the component to retry connecting to Azure Cosmos DB during side car initialization for up to 5 minutes. The default value is `5s` and should be increased. When using Kubernetes, increasing this value may also require an update to your [Readiness and Liveness probes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/). @@ -145,7 +145,7 @@ When using the Dapr Cosmos DB state store and authenticating with Microsoft Ent Prerequisites: -- You need a Service Principal created as per the instructions in the [authenticating to Azure]({{< ref authenticating-azure.md >}}) page. You need the ID of the Service Principal for the commands below (note that this is different from the client ID of your application, or the value you use for `azureClientId` in the metadata). +- You need a Service Principal created as per the instructions in the [authenticating to Azure]({{% ref authenticating-azure.md %}}) page. You need the ID of the Service Principal for the commands below (note that this is different from the client ID of your application, or the value you use for `azureClientId` in the metadata). - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - [jq](https://stedolan.github.io/jq/download/) - The scripts below are optimized for a bash or zsh shell @@ -227,6 +227,6 @@ This particular optimization only makes sense if you are saving large objects to ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-tablestorage.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-tablestorage.md index 5d8e8cfe672..2e530e8a31e 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-tablestorage.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-tablestorage.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Azure Tablestorage state store create a component of type `state.azure.tablestorage`. 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 Azure Tablestorage state store create a component of type `state.azure.tablestorage`. 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 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -47,13 +47,13 @@ The above example uses secrets as plain strings. It is recommended to use a secr ### Microsoft Entra ID authentication -The Azure Cosmos DB state store component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{< ref authenticating-azure.md >}}). +The Azure Cosmos DB state store component supports authentication using all Microsoft Entra ID mechanisms. For further information and the relevant component metadata fields to provide depending on the choice of Microsoft Entra ID authentication mechanism, see the [docs for authenticating to Azure]({{% ref authenticating-azure.md %}}). You can read additional information for setting up Cosmos DB with Microsoft Entra ID authentication in the [section below](#setting-up-cosmos-db-for-authenticating-with-azure-ad). ## Option 1: Setup Azure Table Storage -[Follow the instructions](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabs=azure-portal) from the Azure documentation on how to create an Azure Storage Account. +[Follow the instructions](https://docs.microsoft.com/azure/storage/common/storage-account-create?tabpane=azure-portal) from the Azure documentation on how to create an Azure Storage Account. If you wish to create a table for Dapr to use, you can do so beforehand. However, Table Storage state provider will create one for you automatically if it doesn't exist, unless the `skipCreateTable` option is enabled. @@ -65,7 +65,7 @@ In order to setup Azure Table Storage as a state store, you will need the follow ## Option 2: Setup Azure Cosmos DB Table API -[Follow the instructions](https://docs.microsoft.com/azure/cosmos-db/table/how-to-use-python?tabs=azure-portal#1---create-an-azure-cosmos-db-account) from the Azure documentation on creating a Cosmos DB account with Table API. +[Follow the instructions](https://docs.microsoft.com/azure/cosmos-db/table/how-to-use-python?tabpane=azure-portal#1---create-an-azure-cosmos-db-account) from the Azure documentation on creating a Cosmos DB account with Table API. If you wish to create a table for Dapr to use, you can do so beforehand. However, Table Storage state provider will create one for you automatically if it doesn't exist, unless the `skipCreateTable` option is enabled. @@ -107,6 +107,6 @@ Azure Table Storage state concurrency is achieved by using `ETag`s according to ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cassandra.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cassandra.md index b16520cb869..af2389198b4 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cassandra.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cassandra.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Cassandra state store create a component of type `state.cassandra`. 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 Cassandra state store create a component of type `state.cassandra`. 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 @@ -39,7 +39,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -58,9 +58,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Cassandra -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Cassandra locally with the Datastax Docker image: ``` @@ -68,9 +68,9 @@ docker run -e DS_LICENSE=accept --memory 4g --name my-dse -d datastax/dse-server ``` You can then interact with the server using `localhost:9042`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Cassandra on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/incubator/cassandra): ``` @@ -84,15 +84,15 @@ To interact with Cassandra, find the service with: `kubectl get svc -n cassandra For example, if installing using the example above, the Cassandra DNS would be: `cassandra.cassandra.svc.cluster.local` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Apache Ignite [Apache Ignite](https://ignite.apache.org/)'s integration with Cassandra as a caching layer is not supported by this component. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cloudflare-workerskv.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cloudflare-workerskv.md index 2adf72a767f..3a533d4c0df 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cloudflare-workerskv.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cloudflare-workerskv.md @@ -9,7 +9,7 @@ aliases: ## Create a Dapr component -To setup a [Cloudflare Workers KV](https://developers.cloudflare.com/workers/learning/how-kv-works/) state store, create a component of type `state.cloudflare.workerskv`. 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 [Cloudflare Workers KV](https://developers.cloudflare.com/workers/learning/how-kv-works/) state store, create a component of type `state.cloudflare.workerskv`. 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 @@ -46,7 +46,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -95,9 +95,9 @@ Dapr can manage the Worker for you automatically, or you can pre-provision a Wor Use a separate Worker for each Dapr component. Do not use the same Worker script for different Cloudflare Workers KV state store components, and do not use the same Worker script for different Cloudflare components in Dapr (e.g. the Workers KV state store and the Queues binding). {{% /alert %}} -{{< tabs "Let Dapr manage the Worker" "Manually provision the Worker script" >}} +{{% tabpane "Let Dapr manage the Worker" "Manually provision the Worker script" %}} -{{% codetab %}} +{{% tab %}} If you want to let Dapr manage the Worker for you, you will need to provide these 3 metadata options: @@ -113,9 +113,9 @@ If you want to let Dapr manage the Worker for you, you will need to provide thes When Dapr is configured to manage the Worker for you, when a Dapr Runtime is started it checks that the Worker exists and it's up-to-date. If the Worker doesn't exist, or if it's using an outdated version, Dapr will create or upgrade it for you automatically. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} If you'd rather not give Dapr permissions to deploy Worker scripts for you, you can manually provision a Worker for Dapr to use. Note that if you have multiple Dapr components that interact with Cloudflare services via a Worker, you will need to create a separate Worker for each one of them. @@ -171,9 +171,9 @@ Once your Worker has been deployed, you will need to initialize the component wi - **`workerName`**: Name of the Worker script. This is the value you set in the `name` property in the `wrangler.toml` file. - **`workerUrl`**: URL of the deployed Worker. The `npx wrangler command` will show the full URL to you, for example `https://mydaprkv.mydomain.workers.dev`. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Generate an Ed25519 key pair @@ -185,9 +185,9 @@ All Cloudflare Workers listen on the public Internet, so Dapr needs to use addit To let Dapr issue bearer tokens, and have your Worker validate them, you will need to generate a new Ed25519 key pair. Here are examples of generating the key pair using OpenSSL or the step CLI. -{{< tabs "Generate with OpenSSL" "Generate with the step CLI" >}} +{{% tabpane "Generate with OpenSSL" "Generate with the step CLI" %}} -{{% codetab %}} +{{% tab %}} > Support for generating Ed25519 keys is available since OpenSSL 1.1.0, so the commands below will not work if you're using an older version of OpenSSL. @@ -208,9 +208,9 @@ openssl pkey -in private.pem -pubout -out public.pem > $(brew --prefix)/opt/openssl@3/bin/openssl pkey -in private.pem -pubout -out public.pem > ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} If you don't have the step CLI already, install it following the [official instructions](https://smallstep.com/docs/step-cli/installation). @@ -224,9 +224,9 @@ step crypto keypair \ --insecure --no-password ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Regardless of how you generated your key pair, with the instructions above you'll have two files: @@ -244,7 +244,7 @@ Protect the private part of your key and treat it as a secret value! ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) - Documentation for [Cloudflare Workers KV](https://developers.cloudflare.com/workers/learning/how-kv-works/) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cockroachdb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cockroachdb.md index e0f6be7f32d..a6a776035e2 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cockroachdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-cockroachdb.md @@ -46,7 +46,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -64,9 +64,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup CockroachDB -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} 1. Run an instance of CockroachDB. You can run a local instance of CockroachDB in Docker CE with the following command: @@ -83,19 +83,19 @@ The above example uses secrets as plain strings. It is recommended to use a secr ```bash docker exec -it roach1 ./cockroach sql --insecure -e 'create database dapr_test' ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install CockroachDB on Kubernetes is by using the [CockroachDB Operator](https://github.com/cockroachdb/cockroach-operator): -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Advanced ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". Because CockroachDB doesn't have built-in support for TTLs, you implement this in Dapr by adding a column in the state table indicating when the data should be considered "expired". "Expired" records are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -105,6 +105,6 @@ You can set the interval for the deletion of expired records with the `cleanupIn - If you do not plan to use TTLs with Dapr and the CockroachDB state store, you should consider setting `cleanupIntervalInSeconds` to a value <= 0 (e.g. `0` or `-1`) to disable the periodic cleanup and reduce the load on the database. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-consul.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-consul.md index 4a803c0941c..1d4a794b3d3 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-consul.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-consul.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Hashicorp Consul state store create a component of type `state.consul`. 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 Hashicorp Consul state store create a component of type `state.consul`. 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 @@ -34,7 +34,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -49,9 +49,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup HashiCorp Consul -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Consul locally using Docker: ``` @@ -59,9 +59,9 @@ docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul ``` You can then interact with the server using `localhost:8500`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Consul on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/stable/consul): ``` @@ -74,11 +74,11 @@ To interact with Consul, find the service with: `kubectl get svc consul`. For example, if installing using the example above, the Consul host address would be: `consul.default.svc.cluster.local:8500` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-couchbase.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-couchbase.md index 0dc7c40e80e..a6432c7ab03 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-couchbase.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-couchbase.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Couchbase state store create a component of type `state.couchbase`. 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 Couchbase state store create a component of type `state.couchbase`. 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 @@ -32,7 +32,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -46,9 +46,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Couchbase -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Couchbase locally using Docker: ``` @@ -56,9 +56,9 @@ docker run -d --name db -p 8091-8094:8091-8094 -p 11210:11210 couchbase ``` You can then interact with the server using `localhost:8091` and start the server setup. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Couchbase on Kubernetes is by using the [Helm chart](https://github.com/couchbase-partners/helm-charts#deploying-for-development-quick-start): ``` @@ -66,11 +66,11 @@ helm repo add couchbase https://couchbase-partners.github.io/helm-charts/ helm install couchbase/couchbase-operator helm install couchbase/couchbase-cluster ``` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md index 32150cafe62..5a45e374d90 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-dynamodb.md @@ -9,7 +9,7 @@ aliases: ## Component format -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. +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 @@ -42,12 +42,12 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Primary Key -In order to use DynamoDB as a Dapr state store, the table must have a primary key named `key`. See the section [Partition Keys]({{< ref "setup-dynamodb.md#partition-keys" >}}) for an option to change this behavior. +In order to use DynamoDB as a Dapr state store, the table must have a primary key named `key`. See the section [Partition Keys]({{% ref "setup-dynamodb.md#partition-keys" %}}) for an option to change this behavior. ## Spec metadata fields @@ -60,7 +60,7 @@ In order to use DynamoDB as a Dapr state store, the table must have a primary ke | endpoint | N |AWS endpoint for the component to use. Only used for local development. The `endpoint` is unncessary when running against production AWS | `"http://localhost:4566"` | sessionToken | N |AWS session token to use. A session token is only required if you are using temporary security credentials. | `"TOKEN"` | ttlAttributeName | N |The table attribute name which should be used for TTL. | `"expiresAt"` -| partitionKey | N |The table primary key or partition key attribute name. This field is used to replace the default primary key attribute name `"key"`. See the section [Partition Keys]({{< ref "setup-dynamodb.md#partition-keys" >}}). | `"ContractID"` +| partitionKey | N |The table primary key or partition key attribute name. This field is used to replace the default primary key attribute name `"key"`. See the section [Partition Keys]({{% ref "setup-dynamodb.md#partition-keys" %}}). | `"ContractID"` | actorStateStore | N | Consider this state store for actors. Defaults to "false" | `"true"`, `"false"` {{% alert title="Important" color="warning" %}} @@ -69,7 +69,7 @@ When running the Dapr sidecar (daprd) with your application on EKS (AWS Kubernet ## Setup AWS DynamoDB -See [Authenticating to AWS]({{< ref authenticating-aws.md >}}) for information about authentication-related attributes +See [Authenticating to AWS]({{% ref authenticating-aws.md %}}) for information about authentication-related attributes ## Time to live (TTL) @@ -160,7 +160,7 @@ $ aws dynamodb get-item \ ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) -- [Authenticating to AWS]({{< ref authenticating-aws.md >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) +- [Authenticating to AWS]({{% ref authenticating-aws.md %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-etcd.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-etcd.md index 6b40c5241d2..1afc7dc3850 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-etcd.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-etcd.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup an Etcd state store create a component of type `state.etcd`. 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 an Etcd state store create a component of type `state.etcd`. 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 @@ -40,7 +40,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} @@ -48,7 +48,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr Dapr has 2 versions of the Etcd state store component: `v1` and `v2`. It is recommended to use `v2`, as `v1` is deprecated. -While `v1` and `v2` have the same metadata fields, `v1` causes data inconsistencies in apps when using [Actor TTLs]({{< ref "actors_api.md#ttl" >}}) from Dapr v1.12. +While `v1` and `v2` have the same metadata fields, `v1` causes data inconsistencies in apps when using [Actor TTLs]({{% ref "actors_api.md#ttl" %}}) from Dapr v1.12. `v1` and `v2` are incompatible with no data migration path for `v1` to `v2` on an existing active Etcd cluster and `keyPrefixPath`. If you are using `v1`, you should continue to use `v1` until you create a new Etcd cluster or use a different `keyPrefixPath`. @@ -59,16 +59,16 @@ If you are using `v1`, you should continue to use `v1` until you create a new Et | `endpoints` | Y | Connection string to the Etcd cluster | `"192.168.0.1:2379,192.168.0.2:2379,192.168.0.3:2379"` | `keyPrefixPath` | N | Key prefix path in Etcd. Default is no prefix. | `"dapr"` | `tlsEnable` | N | Whether to enable TLS for connecting to Etcd. | `"false"` -| `ca` | N | CA certificate for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}).| `"-----BEGIN CERTIFICATE-----\nMIIC9TCCA..."` -| `cert` | N | TLS certificate for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}).| `"-----BEGIN CERTIFICATE-----\nMIIDUTCC..."` -| `key` | N | TLS key for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}).| `"-----BEGIN PRIVATE KEY-----\nMIIEpAIB..."` +| `ca` | N | CA certificate for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{% ref component-secrets.md %}}).| `"-----BEGIN CERTIFICATE-----\nMIIC9TCCA..."` +| `cert` | N | TLS certificate for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{% ref component-secrets.md %}}).| `"-----BEGIN CERTIFICATE-----\nMIIDUTCC..."` +| `key` | N | TLS key for connecting to Etcd, PEM-encoded. Can be `secretKeyRef` to use a [secret reference]({{% ref component-secrets.md %}}).| `"-----BEGIN PRIVATE KEY-----\nMIIEpAIB..."` | `actorStateStore` | N | Consider this state store for actors. Defaults to `"false"` | `"true"`, `"false"` ## Setup Etcd -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Etcd database locally using Docker Compose. Create a new file called `docker-compose.yml` and add the following contents as an example: @@ -94,20 +94,20 @@ This starts the Etcd server in the background and expose the default Etcd port o etcdctl --endpoints=localhost:2379 put mykey myvalue ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Use [Helm](https://helm.sh/) to quickly create an Etcd instance in your Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). Follow the [Bitnami instructions](https://github.com/bitnami/charts/tree/main/bitnami/etcd) to get started with setting up Etcd in Kubernetes. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-firestore.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-firestore.md index 6062b05e266..a0823504f16 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-firestore.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-firestore.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup GCP Firestore state store create a component of type `state.gcp.firestore`. 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 GCP Firestore state store create a component of type `state.gcp.firestore`. 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 @@ -50,7 +50,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -77,22 +77,22 @@ Since the GCP Firestore component uses the GCP Go Client Libraries, by default i ## Setup GCP Firestore -{{< tabs "Self-Hosted" "Google Cloud" >}} +{{% tabpane "Self-Hosted" "Google Cloud" %}} -{{% codetab %}} +{{% tab %}} You can use the GCP Datastore emulator to run locally using the instructions [here](https://cloud.google.com/datastore/docs/tools/datastore-emulator). You can then interact with the server using `http://localhost:8432`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Follow the instructions [here](https://cloud.google.com/datastore/docs/quickstart) to get started with setting up Firestore in Google Cloud. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-hazelcast.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-hazelcast.md index 8eef9be0103..bf3d5f020b4 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-hazelcast.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-hazelcast.md @@ -9,7 +9,7 @@ aliases: ## Create a Dapr component -To setup Hazelcast state store create a component of type `state.hazelcast`. 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 Hazelcast state store create a component of type `state.hazelcast`. 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 @@ -27,7 +27,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -39,9 +39,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Hazelcast -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Hazelcast locally using Docker: ``` @@ -49,15 +49,15 @@ docker run -e JAVA_OPTS="-Dhazelcast.local.publicAddress=127.0.0.1:5701" -p 5701 ``` You can then interact with the server using the `127.0.0.1:5701`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Hazelcast on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/stable/hazelcast). -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-inmemory.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-inmemory.md index 50d20f5000e..9ace6440db8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-inmemory.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-inmemory.md @@ -11,7 +11,7 @@ The in-memory state store component maintains state in the Dapr sidecar's memory ## Component format -To setup in-memory state store, create a component of type `state.in-memory`. 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 in-memory state store, create a component of type `state.in-memory`. 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 @@ -31,6 +31,6 @@ spec: ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Learn [how to create and configure state store components]({{< ref howto-get-save-state.md >}}) -- Read more about the [state management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Learn [how to create and configure state store components]({{% ref howto-get-save-state.md %}}) +- Read more about the [state management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-jetstream-kv.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-jetstream-kv.md index e61be927000..970e332c513 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-jetstream-kv.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-jetstream-kv.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup a JetStream KV state store create a component of type `state.jetstream`. 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 JetStream KV state store create a component of type `state.jetstream`. 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 @@ -31,7 +31,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadatafield @@ -45,9 +45,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Create a NATS server -{{< tabs "Self-Hosted" "Kubernetes">}} +{{% tabpane "Self-Hosted" "Kubernetes"%}} -{{% codetab %}} +{{% tab %}} You can run a NATS Server with JetStream enabled locally using Docker: ```bash @@ -55,9 +55,9 @@ docker run -d -p 4222:4222 nats:latest -js ``` You can then interact with the server using the client port: `localhost:4222`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Install NATS JetStream on Kubernetes by using the [helm](https://github.com/nats-io/k8s/tree/main/helm/charts/nats#jetstream): ```bash @@ -67,9 +67,9 @@ helm install my-nats nats/nats This installs a single NATS server into the `default` namespace. To interact with NATS, find the service with: `kubectl get svc my-nats`. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Creating a JetStream KV bucket @@ -80,9 +80,9 @@ nats kv add ``` ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) - [JetStream Documentation](https://docs.nats.io/nats-concepts/jetstream) - [Key Value Store Documentation](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - [NATS CLI](https://github.com/nats-io/natscli) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-memcached.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-memcached.md index 2d00042c199..3c37d13b27b 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-memcached.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-memcached.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Memcached state store create a component of type `state.memcached`. 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 Memcached state store create a component of type `state.memcached`. 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 @@ -29,7 +29,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -42,9 +42,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Memcached -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Memcached locally using Docker: ``` @@ -52,9 +52,9 @@ docker run --name my-memcache -d memcached ``` You can then interact with the server using `localhost:11211`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Memcached on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/stable/memcached): ``` @@ -67,11 +67,11 @@ To interact with Memcached, find the service with: `kubectl get svc memcached`. For example, if installing using the example above, the Memcached host address would be: `memcached.default.svc.cluster.local:11211` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mongodb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mongodb.md index 11b9d5a479a..94ea80134df 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mongodb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mongodb.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup MongoDB state store create a component of type `state.mongodb`. 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 MongoDB state store create a component of type `state.mongodb`. 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 @@ -48,7 +48,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ### Actor state store and transactions support @@ -84,9 +84,9 @@ If you wish to use MongoDB as an actor store, add this metadata option to your C ## Setup MongoDB -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run a single MongoDB instance locally using Docker: ```sh @@ -96,9 +96,9 @@ docker run --name some-mongo -d -p 27017:27017 mongo You can then interact with the server at `localhost:27017`. If you do not specify a `databaseName` value in your component definition, make sure to create a database named `daprStore`. In order to use the MongoDB state store for transactions and as an actor state store, you need to run MongoDB as a Replica Set. Refer to [the official documentation](https://www.mongodb.com/compatibility/deploying-a-mongodb-cluster-with-docker) for how to create a 3-node Replica Set using Docker. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can conveniently install MongoDB on Kubernetes using the [Helm chart packaged by Bitnami](https://github.com/bitnami/charts/tree/main/bitnami/mongodb/). Refer to the documentation for the Helm chart for deploying MongoDB, both as a standalone server, and with a Replica Set (required for using transactions and actors). This installs MongoDB into the `default` namespace. To interact with MongoDB, find the service with: `kubectl get svc mongo-mongodb`. @@ -106,16 +106,16 @@ For example, if installing using the Helm defaults above, the MongoDB host addre `mongo-mongodb.default.svc.cluster.local:27017` Follow the on-screen instructions to get the root password for MongoDB. The username is typically `admin` by default. -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mysql.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mysql.md index 29867aa1e98..ae0e5fbb67e 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mysql.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-mysql.md @@ -11,7 +11,7 @@ aliases: The MySQL state store components allows connecting to both MySQL and MariaDB databases. In this document, we refer to "MySQL" to indicate both databases. -To setup MySQL state store create a component of type `state.mysql`. 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 MySQL state store create a component of type `state.mysql`. 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 @@ -41,7 +41,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} If you wish to use MySQL as an actor store, append the following to the yaml. @@ -68,9 +68,9 @@ If you wish to use MySQL as an actor store, append the following to the yaml. Dapr can use any MySQL instance - containerized, running on your local dev machine, or a managed cloud service. -{{< tabs "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" %}} -{{% codetab %}} +{{% tab %}} Run an instance of MySQL. You can run a local instance of MySQL in Docker CE with the following command: @@ -81,9 +81,9 @@ This example does not describe a production configuration because it sets the pa docker run --name dapr-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} We can use [Helm](https://helm.sh/) to quickly create a MySQL instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). @@ -104,32 +104,32 @@ We can use [Helm](https://helm.sh/) to quickly create a MySQL instance in our Ku 1. With the password you can construct your connection string. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Azure MySQL](http://bit.ly/AzureMySQL) If you are using [MySQL on Azure](http://bit.ly/AzureMySQLSSL) see the Azure [documentation on SSL database connections](http://bit.ly/MySQLSSL), for information on how to download the required certificate. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS MySQL](https://aws.amazon.com/rds/mysql/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP MySQL](https://cloud.google.com/sql/docs/mysql/features) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ### Non SSL connection @@ -141,7 +141,7 @@ If your server requires SSL your connection string must end with `&tls=custom` f ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". Because MySQL doesn't have built-in support for TTLs, this is implemented in Dapr by adding a column in the state table indicating when the data is to be considered "expired". Records that are "expired" are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -151,6 +151,6 @@ The interval at which the deletion of expired records happens is set with the `c - If you do not plan to use TTLs with Dapr and the MySQL state store, you should consider setting `cleanupIntervalInSeconds` to a value <= 0 (e.g. `0` or `-1`) to disable the periodic cleanup and reduce the load on the database. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oci-objectstorage.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oci-objectstorage.md index 8cedc633d00..ec6d47b4e73 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oci-objectstorage.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oci-objectstorage.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup OCI Object Storage state store create a component of type `state.oci.objectstorage`. 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 OCI Object Storage state store create a component of type `state.oci.objectstorage`. 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 @@ -49,7 +49,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -144,7 +144,7 @@ will create the following object: You will be able to inspect all state stored through the OCI Object Storage state store by inspecting the contents of the bucket through the console, the APIs, CLI or SDKs. By going directly to the bucket, you can prepare state that will be available as state to your application at runtime. ## Time To Live and State Expiration -The OCI Object Storage state store supports Dapr's Time To Live logic that ensure that state cannot be retrieved after it has expired. See [this How To on Setting State Time To Live]({{< ref "state-store-ttl.md" >}}) for details. +The OCI Object Storage state store supports Dapr's Time To Live logic that ensure that state cannot be retrieved after it has expired. See [this How To on Setting State Time To Live]({{% ref "state-store-ttl.md" %}}) for details. OCI Object Storage does not have native support for a Time To Live setting. The implementation in this component uses a meta data tag put on each object for which a TTL has been specified. The tag is called **expiry-time-from-ttl** and it contains a string in ISO date time format with the UTC based expiry time. When state is retrieved through a call to Get, this component checks if it has the **expiry-time-from-ttl** set and if so it checks whether it is in the past. In that case, no state is returned. @@ -186,6 +186,6 @@ OCI Object Storage state does not support the Query API. ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md index 51cf0a02066..a792dae589d 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-oracledatabase.md @@ -33,7 +33,7 @@ spec: # value: "true" ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -77,7 +77,7 @@ You can easily inspect all state stored with SQL queries against the `tableName` ## Time To Live and State Expiration -The Oracle Database state store component supports Dapr's Time To Live logic that ensures that state cannot be retrieved after it has expired. See [this How To on Setting State Time To Live]({{< ref "state-store-ttl.md" >}}) for details. +The Oracle Database state store component supports Dapr's Time To Live logic that ensures that state cannot be retrieved after it has expired. See [this How To on Setting State Time To Live]({{% ref "state-store-ttl.md" %}}) for details. The Oracle Database does not have native support for a Time-To-Live setting. The implementation in this component uses a column called `EXPIRATION_TIME` to hold the time after which the record is considered *expired*. The value in this column is set only when a TTL was specified in a `Set` request. It is calculated as the current UTC timestamp with the TTL period added to it. When state is retrieved through a call to `Get`, this component checks if it has the `EXPIRATION_TIME` set and if so, it checks whether it is in the past. In that case, no state is returned. @@ -129,9 +129,9 @@ Oracle Database state store does not currently support the Query API. ## Create an Oracle Database and User Schema -{{< tabs "Self-Hosted" "Autonomous Database on OCI">}} +{{% tabpane "Self-Hosted" "Autonomous Database on OCI"%}} -{{% codetab %}} +{{% tab %}} 1. Run an instance of Oracle Database. You can run a local instance of Oracle Database in Docker CE with the following command - or of course use an existing Oracle Database: ```bash @@ -173,9 +173,9 @@ The Oracle Database state store component checks if the table for storing state update_time TIMESTAMP WITH TIME ZONE NULL ) ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. Create a free (or paid for) Autonomous Transaction Processing (ATP) or ADW (Autonomous Data Warehouse) instance on Oracle Cloud Infrastructure, as described in the [OCI documentation for the always free autonomous database](https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/autonomous-always-free.html#GUID-03F9F3E8-8A98-4792-AB9C-F0BACF02DC3E). @@ -208,12 +208,12 @@ The Oracle Database state store component checks if the table for storing state ) ``` -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v1.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v1.md index 3a53c1117a5..34ee5452000 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v1.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v1.md @@ -11,13 +11,13 @@ aliases: --- {{% alert title="Note" color="primary" %}} -Starting with Dapr 1.13, you can leverage the [PostgreSQL v2]({{< ref setup-postgresql-v2.md >}}) state store component, which contains some improvements to performance and reliability. +Starting with Dapr 1.13, you can leverage the [PostgreSQL v2]({{% ref setup-postgresql-v2.md %}}) state store component, which contains some improvements to performance and reliability. The v2 component is not compatible with v1, and data cannot be migrated between the two components. The v2 component does not offer support for state store query APIs. There are no plans to deprecate the v1 component. {{% /alert %}} -This component allows using PostgreSQL (Postgres) as state store for Dapr, using the "v1" component. 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. +This component allows using PostgreSQL (Postgres) as state store for Dapr, using the "v1" component. 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 @@ -58,7 +58,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -114,9 +114,9 @@ The AWS authentication token will be dynamically rotated before it's expiration ## Setup PostgreSQL -{{< tabs "Self-Hosted" >}} +{{% tabpane "Self-Hosted" %}} -{{% codetab %}} +{{% tab %}} 1. Run an instance of PostgreSQL. You can run a local instance of PostgreSQL in Docker CE with the following command: @@ -135,15 +135,15 @@ The AWS authentication token will be dynamically rotated before it's expiration CREATE DATABASE my_dapr; ``` -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Advanced ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". Because PostgreSQL doesn't have built-in support for TTLs, this is implemented in Dapr by adding a column in the state table indicating when the data is to be considered "expired". Records that are "expired" are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -162,6 +162,6 @@ CREATE INDEX expiredate_idx ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v2.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v2.md index db5d7eddfef..157e90de1da 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v2.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-postgresql-v2.md @@ -11,12 +11,12 @@ aliases: {{% alert title="Note" color="primary" %}} This is the v2 of the PostgreSQL state store component, which contains some improvements to performance and reliability. New applications are encouraged to use v2. -The PostgreSQL v2 state store component is not compatible with the [v1 component]({{< ref setup-postgresql-v1.md >}}), and data cannot be migrated between the two components. The v2 component does not offer support for state store query APIs. +The PostgreSQL v2 state store component is not compatible with the [v1 component]({{% ref setup-postgresql-v1.md %}}), and data cannot be migrated between the two components. The v2 component does not offer support for state store query APIs. There are no plans to deprecate the v1 component. {{% /alert %}} -This component allows using PostgreSQL (Postgres) as state store for Dapr, using the "v2" component. 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. +This component allows using PostgreSQL (Postgres) as state store for Dapr, using the "v2" component. 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 @@ -58,7 +58,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -114,9 +114,9 @@ The AWS authentication token will be dynamically rotated before it's expiration ## Setup PostgreSQL -{{< tabs "Self-Hosted" >}} +{{% tabpane "Self-Hosted" %}} -{{% codetab %}} +{{% tab %}} 1. Run an instance of PostgreSQL. You can run a local instance of PostgreSQL in Docker with the following command: @@ -135,18 +135,18 @@ The AWS authentication token will be dynamically rotated before it's expiration CREATE DATABASE my_dapr; ``` -{{% /codetab %}} +{{% /tab %}} -{{% /tabs %}} +{{% /tabpane %}} ## Advanced ### Differences between v1 and v2 -The PostgreSQL state store v2 was introduced in Dapr 1.13. The [pre-existing v1]({{< ref setup-postgresql-v1.md >}}) remains available and is not deprecated. +The PostgreSQL state store v2 was introduced in Dapr 1.13. The [pre-existing v1]({{% ref setup-postgresql-v1.md %}}) remains available and is not deprecated. In the v2 component, the table schema has been changed significantly, with the goal of increasing performance and reliability. Most notably, the value stored by Dapr is now of type _BYTEA_, which allows faster queries and, in some cases, is more space-efficient than the previously-used _JSONB_ column. -However, due to this change, the v2 component does not support the [Dapr state store query APIs]({{< ref howto-state-query-api.md >}}). +However, due to this change, the v2 component does not support the [Dapr state store query APIs]({{% ref howto-state-query-api.md %}}). Also, in the v2 component, ETags are now random UUIDs, which ensures better compatibility with other PostgreSQL-compatible databases, such as CockroachDB. @@ -165,7 +165,7 @@ SELECT *, convert_from(value, 'utf-8') FROM state; ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". Because PostgreSQL doesn't have built-in support for TTLs, this is implemented in Dapr by adding a column in the state table indicating when the data is to be considered "expired". Records that are "expired" are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -176,6 +176,6 @@ You can set the deletion interval of expired records with the `cleanupInterval` ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md index 9b672c6a6dc..ae504852ea8 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Redis state store create a component of type `state.redis`. 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 Redis state store create a component of type `state.redis`. 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. {{% alert title="Limitations" color="warning" %}} Before using Redis and the Transactions API, make sure you're familiar with [Redis limitations regarding transactions](https://redis.io/docs/interact/transactions/#what-about-rollbacks). @@ -86,7 +86,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} @@ -104,10 +104,10 @@ If you wish to use Redis as an actor store, append the following to the yaml. | redisHost | Y | Connection-string for the redis host | `localhost:6379`, `redis-master.default.svc.cluster.local:6379` | redisPassword | N | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` | redisUsername | N | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `""`, `"default"` -| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{< ref "#setup-redis" >}}) | `"true"`, `"false"` | +| useEntraID | N | Implements EntraID support for Azure Cache for Redis. Before enabling this:
  • The `redisHost` name must be specified in the form of `"server:port"`
  • TLS must be enabled
Learn more about this setting under [Create a Redis instance > Azure Cache for Redis]({{% ref "#setup-redis" %}}) | `"true"`, `"false"` | | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` -| clientCert | N | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | -| clientKey | N | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{< ref component-secrets.md >}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | +| clientCert | N | The content of the client certificate, used for Redis instances that require client-side certificates. Must be used with `clientKey` and `enableTLS` must be set to true. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN CERTIFICATE-----\nMIIC..."` | +| clientKey | N | The content of the client private key, used in conjunction with `clientCert` for authentication. It is recommended to use a secret store as described [here]({{% ref component-secrets.md %}}) | `"----BEGIN PRIVATE KEY-----\nMIIE..."` | | maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` | maxRetryBackoff | N | Maximum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` | failover | N | Property to enabled failover configuration. Needs sentinelMasterName to be set. The redisHost should be the sentinel host address. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/). Defaults to `"false"` | `"true"`, `"false"` @@ -128,7 +128,7 @@ If you wish to use Redis as an actor store, append the following to the yaml. | minIdleConns | N | Minimum number of idle connections to keep open in order to avoid the performance degradation associated with creating new connections. Defaults to `"0"`. | `"2"` | idleCheckFrequency | N | Frequency of idle checks made by idle connections reaper. Default is `"1m"`. `"-1"` disables idle connections reaper. | `"-1"` | idleTimeout | N | Amount of time after which the client closes idle connections. Should be less than server's timeout. Default is `"5m"`. `"-1"` disables idle timeout check. | `"10m"` -| ttlInSeconds | N | Allows specifying a default Time-to-live (TTL) in seconds that will be applied to every state store request unless TTL is explicitly defined via the [request metadata]({{< ref "state-store-ttl.md" >}}). | `600` +| ttlInSeconds | N | Allows specifying a default Time-to-live (TTL) in seconds that will be applied to every state store request unless TTL is explicitly defined via the [request metadata]({{% ref "state-store-ttl.md" %}}). | `600` | queryIndexes | N | Indexing schemas for querying JSON objects | see [Querying JSON objects](#querying-json-objects) | actorStateStore | N | Consider this state store for actors. Defaults to `"false"` | `"true"`, `"false"` @@ -136,13 +136,13 @@ If you wish to use Redis as an actor store, append the following to the yaml. Dapr can use any Redis instance: containerized, running on your local dev machine, or a managed cloud service. -{{< tabs "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "AWS" "Azure" "GCP" %}} -{{% codetab %}} +{{% tab %}} A Redis instance is automatically created as a Docker container when you run `dapr init` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our Kubernetes cluster. This approach requires [Installing Helm](https://github.com/helm/helm#install). 1. Install Redis into your cluster. Note that we're explicitly setting an image tag to get a version greater than 5, which is what Dapr' pub/sub functionality requires. If you're intending on using Redis as just a state store (and not for pub/sub), you do not have to set the image version. @@ -169,13 +169,13 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K - name: redisPassword value: lhDOkwTlp0 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [AWS Redis](https://aws.amazon.com/redis/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} 1. [Create an Azure Cache for Redis instance using the official Microsoft documentation.](https://docs.microsoft.com/azure/azure-cache-for-redis/quickstart-create-redis) 1. Once your instance is created, grab the Host name (FQDN) and your access key from the Azure portal. @@ -192,7 +192,7 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set the `redisHost` key to `[HOST NAME FROM PREVIOUS STEP]:6379` and the `redisPassword` key to the key you saved earlier. - **Note:** In a production-grade application, follow [secret management]({{< ref component-secrets.md >}}) instructions to securely manage your secrets. + **Note:** In a production-grade application, follow [secret management]({{% ref component-secrets.md %}}) instructions to securely manage your secrets. 1. Enable EntraID support: - Enable Entra ID authentication on your Azure Redis server. This may takes a few minutes. @@ -200,15 +200,15 @@ You can use [Helm](https://helm.sh/) to quickly create a Redis instance in our K 1. Set `enableTLS` to `"true"` to support TLS. -> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{< ref "howto-mi.md#set-up-identities-in-your-component" >}}). +> **Note:**`useEntraID` assumes that either your UserPrincipal (via AzureCLICredential) or the SystemAssigned managed identity have the RedisDataOwner role permission. If a user-assigned identity is used, [you need to specify the `azureClientID` property]({{% ref "howto-mi.md#set-up-identities-in-your-component" %}}). -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [GCP Cloud MemoryStore](https://cloud.google.com/memorystore/) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Querying JSON objects (optional) @@ -233,10 +233,10 @@ In addition to supporting storing and querying state data as key/value pairs, th ] ``` 3. When calling state management API, add the following metadata to the API calls: -- [Save State]({{< ref "state_api.md#save-state" >}}), [Get State]({{< ref "state_api.md#get-state" >}}), [Delete State]({{< ref "state_api.md#delete-state" >}}): +- [Save State]({{% ref "state_api.md#save-state" %}}), [Get State]({{% ref "state_api.md#get-state" %}}), [Delete State]({{% ref "state_api.md#delete-state" %}}): - add `metadata.contentType=application/json` URL query parameter to HTTP API request - add `"contentType": "application/json"` pair to the metadata of gRPC API request -- [Query State]({{< ref "state_api.md#query-state" >}}): +- [Query State]({{% ref "state_api.md#query-state" %}}): - add `metadata.contentType=application/json&metadata.queryIndexName=` URL query parameters to HTTP API request - add `"contentType" : "application/json"` and `"queryIndexName" : ""` pairs to the metadata of gRPC API request @@ -300,12 +300,12 @@ spec: Consecutively, you can now store, retrieve, and query these documents. -Consider the example from ["How-To: Query state"]({{< ref "howto-state-query-api.md#example-data-and-query" >}}) guide. Let's run it with Redis. +Consider the example from ["How-To: Query state"]({{% ref "howto-state-query-api.md#example-data-and-query" %}}) guide. Let's run it with Redis. -{{< tabs "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" "Redis Enterprise Cloud" "Alibaba Cloud" >}} +{{% tabpane "Self-Hosted" "Kubernetes" "Azure" "AWS" "GCP" "Redis Enterprise Cloud" "Alibaba Cloud" %}} -{{% codetab %}} +{{% tab %}} If you are using a self-hosted deployment of Dapr, a Redis instance without the JSON module is automatically created as a Docker container when you run `dapr init`. Alternatively, you can create an instance of Redis by running the following command: @@ -321,9 +321,9 @@ Use following command to create an instance of redis compatible with query API. ```bash docker run -p 9445:9445 --name rejson --rm redislabs/rejson:2.0.6 ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Follow instructions for [Redis deployment in Kubernetes](#setup-redis) with one extra detail. When installing Redis Helm package, provide a configuration file that specifies container image and enables required modules: @@ -345,39 +345,39 @@ master: - /usr/lib/redis/modules/redisearch.so ``` -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} {{% alert title="Note" color="warning" %}} Azure Redis managed service does not support the RedisJson module and cannot be used with query. {{% /alert %}} -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} Follow instructions for [Redis deployment in AWS](#setup-redis). {{% alert title="Note" color="primary" %}} For query support you need to enable RediSearch and RedisJson. {{% /alert %}} -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} {{% alert title="Note" color="warning" %}} Memory Store does not support modules and cannot be used with query. {{% /alert %}} -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Redis Enterprise Cloud](https://docs.redis.com/latest/rc/) -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} [Alibaba Cloud](https://www.alibabacloud.com/product/apsaradb-for-redis) -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} Next is to start a Dapr application. Refer to this [component configuration file](../../../../developing-applications/building-blocks/state-management/query-api-examples/components/redis/redis.yml), which contains query indexing schemas. Make sure to modify the `redisHost` to reflect the local forwarding port which `redislabs/rejson` uses. ```bash @@ -486,9 +486,9 @@ The result will be: } ``` -The query syntax and documentation is available [here]({{< ref howto-state-query-api.md >}}) +The query syntax and documentation is available [here]({{% ref howto-state-query-api.md %}}) ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-rethinkdb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-rethinkdb.md index 576e21d1e32..33df68cbe96 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-rethinkdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-rethinkdb.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup RethinkDB state store, create a component of type `state.rethinkdb`. See [the how-to guide]({{< ref "howto-get-save-state.md#step-1-setup-a-state-store" >}}) to create and apply a state store configuration. +To setup RethinkDB state store, create a component of type `state.rethinkdb`. See [the how-to guide]({{% ref "howto-get-save-state.md#step-1-setup-a-state-store" %}}) to create and apply a state store configuration. ```yaml apiVersion: dapr.io/v1alpha1 @@ -35,7 +35,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets, as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} If the optional `archive` metadata is set to `true`, on each state change, the RethinkDB state store will also log state changes with timestamp in the `daprstate_archive` table. This allows for time series analyses of the state managed by Dapr. @@ -53,9 +53,9 @@ If the optional `archive` metadata is set to `true`, on each state change, the R ## Setup RethinkDB -{{< tabs "Self-Hosted" >}} +{{% tabpane "Self-Hosted" %}} -{{% codetab %}} +{{% tab %}} You can run [RethinkDB](https://rethinkdb.com/) locally using Docker: ``` @@ -67,10 +67,10 @@ To connect to the admin UI: ```shell open "http://$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' rethinkdb):8080" ``` -{{% /codetab %}} -{{% /codetab %}} +{{% /tab %}} +{{% /tab %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [the how-to guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components. -- [State management building block]({{< ref state-management >}}). +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [the how-to guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components. +- [State management building block]({{% ref state-management %}}). diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlite.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlite.md index c043398d101..d309762b501 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlite.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlite.md @@ -69,7 +69,7 @@ The **`connectionString`** parameter configures how to open the SQLite database. ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate when the data should be considered "expired". Because SQLite doesn't have built-in support for TTLs, this is implemented in Dapr by adding a column in the state table indicating when the data is to be considered "expired". Records that are "expired" are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -99,6 +99,6 @@ Given the risk of data corruption that running SQLite over a networked filesyste ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlserver.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlserver.md index 23b9a10750b..13223695112 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlserver.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-sqlserver.md @@ -11,7 +11,7 @@ aliases: This state store component can be used with both [Microsoft SQL Server](https://learn.microsoft.com/sql/) and [Azure SQL](https://learn.microsoft.com/azure/azure-sql/). -To set up this state store, create a component of type `state.sqlserver`. 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 set up this state store, create a component of type `state.sqlserver`. 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 @@ -58,10 +58,10 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} -If you wish to use SQL server as an [actor state store]({{< ref "state_api.md#configuring-state-store-for-actors" >}}), append the following to the metadata: +If you wish to use SQL server as an [actor state store]({{% ref "state_api.md#configuring-state-store-for-actors" %}}), append the following to the metadata: ```yaml - name: actorStateStore @@ -100,13 +100,13 @@ Authenticating with Microsoft Entra ID is supported with Azure SQL only. All aut | `keyLength` | N | The max length of key. Ignored if "keyType" is not `string`. Defaults to `"200"` | `"200"` | `schema` | N | The schema to use. Defaults to `"dbo"` | `"dapr"`,`"dbo"` | `indexedProperties` | N | List of indexed properties, as a string containing a JSON document. | `'[{"column": "transactionid", "property": "id", "type": "int"}, {"column": "customerid", "property": "customer", "type": "nvarchar(100)"}]'` -| `actorStateStore` | N | Indicates that Dapr should configure this component for the actor state store ([more information]({{< ref "state_api.md#configuring-state-store-for-actors" >}})). | `"true"` +| `actorStateStore` | N | Indicates that Dapr should configure this component for the actor state store ([more information]({{% ref "state_api.md#configuring-state-store-for-actors" %}})). | `"true"` | `cleanupIntervalInSeconds` | N | Interval, in seconds, to clean up rows with an expired TTL. Default: `"3600"` (i.e. 1 hour). Setting this to values <=0 disables the periodic cleanup. | `"1800"`, `"-1"` ## Create a Microsoft SQL Server/Azure SQL instance -[Follow the instructions](https://docs.microsoft.com/azure/azure-sql/database/single-database-create-quickstart?view=azuresql&tabs=azure-portal) from the Azure documentation on how to create a SQL database. The database must be created before Dapr consumes it. +[Follow the instructions](https://docs.microsoft.com/azure/azure-sql/database/single-database-create-quickstart?view=azuresql&tabpane=azure-portal) from the Azure documentation on how to create a SQL database. The database must be created before Dapr consumes it. In order to setup SQL Server as a state store, you need the following properties: @@ -124,7 +124,7 @@ When connecting with a dedicated user (not `sa`), these authorizations are requi ### TTLs and cleanups -This state store supports [Time-To-Live (TTL)]({{< ref state-store-ttl.md >}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". +This state store supports [Time-To-Live (TTL)]({{% ref state-store-ttl.md %}}) for records stored with Dapr. When storing data using Dapr, you can set the `ttlInSeconds` metadata property to indicate after how many seconds the data should be considered "expired". Because SQL Server doesn't have built-in support for TTLs, Dapr implements this by adding a column in the state table indicating when the data should be considered "expired". "Expired" records are not returned to the caller, even if they're still physically stored in the database. A background "garbage collector" periodically scans the state table for expired rows and deletes them. @@ -141,6 +141,6 @@ CREATE CLUSTERED INDEX expiredate_idx ON state(ExpireDate ASC) ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-zookeeper.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-zookeeper.md index 0e485edcb0c..2bed432dc45 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-zookeeper.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-zookeeper.md @@ -9,7 +9,7 @@ aliases: ## Component format -To setup Zookeeper state store create a component of type `state.zookeeper`. 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 Zookeeper state store create a component of type `state.zookeeper`. 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 @@ -33,7 +33,7 @@ spec: ``` {{% alert title="Warning" color="warning" %}} -The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{< ref component-secrets.md >}}). +The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described [here]({{% ref component-secrets.md %}}). {{% /alert %}} ## Spec metadata fields @@ -48,9 +48,9 @@ The above example uses secrets as plain strings. It is recommended to use a secr ## Setup Zookeeper -{{< tabs "Self-Hosted" "Kubernetes" >}} +{{% tabpane "Self-Hosted" "Kubernetes" %}} -{{% codetab %}} +{{% tab %}} You can run Zookeeper locally using Docker: ``` @@ -58,9 +58,9 @@ docker run --name some-zookeeper --restart always -d zookeeper ``` You can then interact with the server using `localhost:2181`. -{{% /codetab %}} +{{% /tab %}} -{{% codetab %}} +{{% tab %}} The easiest way to install Zookeeper on Kubernetes is by using the [Helm chart](https://github.com/helm/charts/tree/master/incubator/zookeeper): ``` @@ -74,12 +74,12 @@ To interact with Zookeeper, find the service with: `kubectl get svc zookeeper`. For example, if installing using the example above, the Zookeeper host address would be: `zookeeper.default.svc.cluster.local:2181` -{{% /codetab %}} +{{% /tab %}} -{{< /tabs >}} +{{% /tabpane %}} ## Related links -- [Basic schema for a Dapr component]({{< ref component-schema >}}) -- Read [this guide]({{< ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" >}}) for instructions on configuring state store components -- [State management building block]({{< ref state-management >}}) +- [Basic schema for a Dapr component]({{% ref component-schema %}}) +- Read [this guide]({{% ref "howto-get-save-state.md#step-2-save-and-retrieve-a-single-state" %}}) for instructions on configuring state store components +- [State management building block]({{% ref state-management %}}) diff --git a/daprdocs/content/en/reference/environment/_index.md b/daprdocs/content/en/reference/environment/_index.md index d5ed2d529c1..ad26f9dcbc2 100644 --- a/daprdocs/content/en/reference/environment/_index.md +++ b/daprdocs/content/en/reference/environment/_index.md @@ -12,11 +12,11 @@ The following table lists the environment variables used by the Dapr runtime, CL | -------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | APP_ID | Your application | The id for your application, used for service discovery | | APP_PORT | Dapr sidecar | The port your application is listening on | -| APP_API_TOKEN | Your application | The token used by the application to authenticate requests from Dapr API. Read [authenticate requests from Dapr using token authentication]({{< ref app-api-token >}}) for more information. | +| APP_API_TOKEN | Your application | The token used by the application to authenticate requests from Dapr API. Read [authenticate requests from Dapr using token authentication]({{% ref app-api-token %}}) for more information. | | DAPR_HTTP_PORT | Your application | The HTTP port that the Dapr sidecar is listening on. Your application should use this variable to connect to Dapr sidecar instead of hardcoding the port value. Set by the Dapr CLI run command for self-hosted or injected by the `dapr-sidecar-injector` into all the containers in the pod. | | DAPR_GRPC_PORT | Your application | The gRPC port that the Dapr sidecar is listening on. Your application should use this variable to connect to Dapr sidecar instead of hardcoding the port value. Set by the Dapr CLI run command for self-hosted or injected by the `dapr-sidecar-injector` into all the containers in the pod. | -| DAPR_API_TOKEN | Dapr sidecar | The token used for Dapr API authentication for requests from the application. [Enable API token authentication in Dapr]({{< ref api-token >}}). | -| NAMESPACE | Dapr sidecar | Used to specify a component's [namespace in self-hosted mode]({{< ref component-scopes >}}). | +| DAPR_API_TOKEN | Dapr sidecar | The token used for Dapr API authentication for requests from the application. [Enable API token authentication in Dapr]({{% ref api-token %}}). | +| NAMESPACE | Dapr sidecar | Used to specify a component's [namespace in self-hosted mode]({{% ref component-scopes %}}). | | DAPR_DEFAULT_IMAGE_REGISTRY | Dapr CLI | In self-hosted mode, it is used to specify the default container registry to pull images from. When its value is set to `GHCR` or `ghcr`, it pulls the required images from Github container registry. To default to Docker hub, unset this environment variable. | | SSL_CERT_DIR | Dapr sidecar | Specifies the location where the public certificates for all the trusted certificate authorities (CA) are located. Not applicable when the sidecar is running as a process in self-hosted mode.| | DAPR_HELM_REPO_URL | Your private Dapr Helm chart url | Specifies a private Dapr Helm chart url, which defaults to the official Helm chart URL: `https://dapr.github.io/helm-charts`| @@ -27,6 +27,6 @@ The following table lists the environment variables used by the Dapr runtime, CL | OTEL_EXPORTER_OTLP_PROTOCOL | OpenTelemetry Tracing | The OTLP protocol to use Transport protocol. (`grpc`, `http/protobuf`, `http/json`) | | DAPR_COMPONENTS_SOCKETS_FOLDER | Dapr runtime and the .NET, Go, and Java pluggable component SDKs | The location or path where Dapr looks for Pluggable Components Unix Domain Socket files. If unset this location defaults to `/tmp/dapr-components-sockets` | | DAPR_COMPONENTS_SOCKETS_EXTENSION | .NET and Java pluggable component SDKs | A per-SDK configuration that indicates the default file extension applied to socket files created by the SDKs. Not a Dapr-enforced behavior. | -| DAPR_PLACEMENT_METADATA_ENABLED | Dapr placement | Enable an endpoint for the Placement service that exposes placement table information on actor usage. Set to `true` to enable in self-hosted mode. [Learn more about the Placement API]({{< ref placement_api.md >}}) | +| DAPR_PLACEMENT_METADATA_ENABLED | Dapr placement | Enable an endpoint for the Placement service that exposes placement table information on actor usage. Set to `true` to enable in self-hosted mode. [Learn more about the Placement API]({{% ref placement_api.md %}}) | | DAPR_HOST_IP | Dapr sidecar | The host's chosen IP address. If not specified, will loop over the network interfaces and select the first non-loopback address it finds.| | DAPR_HEALTH_TIMEOUT | SDKs | Sets the time on the "wait for sidecar" availability. Overrides the default timeout setting of 60 seconds. | \ No newline at end of file diff --git a/daprdocs/content/en/reference/resource-specs/component-schema.md b/daprdocs/content/en/reference/resource-specs/component-schema.md index 180eccae99a..0934405d00b 100644 --- a/daprdocs/content/en/reference/resource-specs/component-schema.md +++ b/daprdocs/content/en/reference/resource-specs/component-schema.md @@ -8,7 +8,7 @@ description: "The basic spec for a Dapr component" Dapr defines and registers components using a [resource specifications](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/). All components are defined as a resource and can be applied to any hosting environment where Dapr is running, not just Kubernetes. -Typically, components are restricted to a particular [namespace]({{< ref isolation-concept.md >}}) and restricted access through scopes to any particular set of applications. The namespace is either explicit on the component manifest itself, or set by the API server, which derives the namespace through context with applying to Kubernetes. +Typically, components are restricted to a particular [namespace]({{% ref isolation-concept.md %}}) and restricted access through scopes to any particular set of applications. The namespace is either explicit on the component manifest itself, or set by the API server, which derives the namespace through context with applying to Kubernetes. {{% alert title="Note" color="primary" %}} The exception to this rule is in self-hosted mode, where daprd ingests component resources when the namespace field is omitted. However, the security profile is mute, as daprd has access to the manifest anyway, unlike in Kubernetes. @@ -43,7 +43,7 @@ scopes: |--------------------|:--------:|---------|---------| | apiVersion | Y | The version of the Dapr (and Kubernetes if applicable) API you are calling | `dapr.io/v1alpha1` | kind | Y | The type of resource. For components is must always be `Component` | `Component` -| auth | N | The name of a secret store where `secretKeyRef` in the metadata lookup the name of secrets used in the component | See [How-to: Reference secrets in components]({{< ref component-secrets >}}) +| auth | N | The name of a secret store where `secretKeyRef` in the metadata lookup the name of secrets used in the component | See [How-to: Reference secrets in components]({{% ref component-secrets %}}) | scopes | N | The applications the component is limited to, specified by their app IDs | `order-processor`, `checkout` | **metadata** | - | **Information about the component registration** | | metadata.name | Y | The name of the component | `prod-statestore` @@ -62,7 +62,7 @@ Metadata values can contain template tags that are resolved on Dapr sidecar star | Tag | Details | Example use case | |-------------|--------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| {uuid} | Randomly generated UUIDv4 | When you need a unique identifier in self-hosted mode; for example, multiple application instances consuming a [shared MQTT subscription]({{< ref "setup-mqtt3.md" >}}) | +| {uuid} | Randomly generated UUIDv4 | When you need a unique identifier in self-hosted mode; for example, multiple application instances consuming a [shared MQTT subscription]({{% ref "setup-mqtt3.md" %}}) | | {podName} | Name of the pod containing the Dapr sidecar | Use to have a persisted behavior, where the ConsumerID does not change on restart when using StatefulSets in Kubernetes | | {namespace} | Namespace where the Dapr sidecar resides combined with its appId | Using a shared `clientId` when multiple application instances consume a Kafka topic in Kubernetes | | {appID} | The configured `appID` of the resource containing the Dapr sidecar | Having a shared `clientId` when multiple application instances consumer a Kafka topic in self-hosted mode | @@ -91,10 +91,10 @@ spec: ``` ## Related links -- [Components concept]({{< ref components-concept.md >}}) -- [Reference secrets in component definitions]({{< ref component-secrets.md >}}) -- [Supported state stores]({{< ref supported-state-stores >}}) -- [Supported pub/sub brokers]({{< ref supported-pubsub >}}) -- [Supported secret stores]({{< ref supported-secret-stores >}}) -- [Supported bindings]({{< ref supported-bindings >}}) -- [Set component scopes]({{< ref component-scopes.md >}}) +- [Components concept]({{% ref components-concept.md %}}) +- [Reference secrets in component definitions]({{% ref component-secrets.md %}}) +- [Supported state stores]({{% ref supported-state-stores %}}) +- [Supported pub/sub brokers]({{% ref supported-pubsub %}}) +- [Supported secret stores]({{% ref supported-secret-stores %}}) +- [Supported bindings]({{% ref supported-bindings %}}) +- [Set component scopes]({{% ref component-scopes.md %}}) diff --git a/daprdocs/content/en/reference/resource-specs/configuration-schema.md b/daprdocs/content/en/reference/resource-specs/configuration-schema.md index e5caac79219..5c6c854c7ce 100644 --- a/daprdocs/content/en/reference/resource-specs/configuration-schema.md +++ b/daprdocs/content/en/reference/resource-specs/configuration-schema.md @@ -85,17 +85,17 @@ spec: | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| -| accessControl | N | Applied to Dapr sidecar for the called application. Enables the configuration of policies that restrict what operations calling applications can perform (via service invocation) on the called appliaction. | [Learn more about the `accessControl` configuration.]({{< ref invoke-allowlist.md >}}) | -| api | N | Used to enable only the Dapr sidecar APIs used by the application. | [Learn more about the `api` configuration.]({{< ref api-allowlist.md >}}) | -| httpPipeline | N | Configure API middleware pipelines | [Middleware pipeline configuration overview]({{< ref "configuration-overview.md#middleware" >}})
[Learn more about the `httpPipeline` configuration.]({{< ref "middleware.md#configure-api-middleware-pipelines" >}}) | -| appHttpPipeline | N | Configure application middleware pipelines | [Middleware pipeline configuration overview]({{< ref "configuration-overview.md#middleware" >}})
[Learn more about the `appHttpPipeline` configuration.]({{< ref "middleware.md#configure-app-middleware-pipelines" >}}) | -| components | N | Used to specify a denylist of component types that can't be initialized. | [Learn more about the `components` configuration.]({{< ref "configuration-overview.md#disallow-usage-of-certain-component-types" >}}) | -| features | N | Defines the preview features that are enabled/disabled. | [Learn more about the `features` configuration.]({{< ref preview-features.md >}}) | -| logging | N | Configure how logging works in the Dapr runtime. | [Learn more about the `logging` configuration.]({{< ref "configuration-overview.md#logging" >}}) | -| metrics | N | Enable or disable metrics for an application. | [Learn more about the `metrics` configuration.]({{< ref "configuration-overview.md#metrics" >}}) | -| nameResolution | N | Name resolution configuration spec for the service invocation building block. | [Learn more about the `nameResolution` configuration per components.]({{< ref supported-name-resolution.md >}}) | -| secrets | N | Limit the secrets to which your Dapr application has access. | [Learn more about the `secrets` configuration.]({{< ref secret-scope.md >}}) | -| tracing | N | Turns on tracing for an application. | [Learn more about the `tracing` configuration.]({{< ref "configuration-overview.md#tracing" >}}) | +| accessControl | N | Applied to Dapr sidecar for the called application. Enables the configuration of policies that restrict what operations calling applications can perform (via service invocation) on the called appliaction. | [Learn more about the `accessControl` configuration.]({{% ref invoke-allowlist.md %}}) | +| api | N | Used to enable only the Dapr sidecar APIs used by the application. | [Learn more about the `api` configuration.]({{% ref api-allowlist.md %}}) | +| httpPipeline | N | Configure API middleware pipelines | [Middleware pipeline configuration overview]({{% ref "configuration-overview.md#middleware" %}})
[Learn more about the `httpPipeline` configuration.]({{% ref "middleware.md#configure-api-middleware-pipelines" %}}) | +| appHttpPipeline | N | Configure application middleware pipelines | [Middleware pipeline configuration overview]({{% ref "configuration-overview.md#middleware" %}})
[Learn more about the `appHttpPipeline` configuration.]({{% ref "middleware.md#configure-app-middleware-pipelines" %}}) | +| components | N | Used to specify a denylist of component types that can't be initialized. | [Learn more about the `components` configuration.]({{% ref "configuration-overview.md#disallow-usage-of-certain-component-types" %}}) | +| features | N | Defines the preview features that are enabled/disabled. | [Learn more about the `features` configuration.]({{% ref preview-features.md %}}) | +| logging | N | Configure how logging works in the Dapr runtime. | [Learn more about the `logging` configuration.]({{% ref "configuration-overview.md#logging" %}}) | +| metrics | N | Enable or disable metrics for an application. | [Learn more about the `metrics` configuration.]({{% ref "configuration-overview.md#metrics" %}}) | +| nameResolution | N | Name resolution configuration spec for the service invocation building block. | [Learn more about the `nameResolution` configuration per components.]({{% ref supported-name-resolution.md %}}) | +| secrets | N | Limit the secrets to which your Dapr application has access. | [Learn more about the `secrets` configuration.]({{% ref secret-scope.md %}}) | +| tracing | N | Turns on tracing for an application. | [Learn more about the `tracing` configuration.]({{% ref "configuration-overview.md#tracing" %}}) | ## Control plane format @@ -119,9 +119,9 @@ spec: | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| -| mtls | N | Defines the mTLS configuration | `allowedClockSkew: 15m`
`workloadCertTTL:24h`
[Learn more about the `mtls` configuration.]({{< ref "configuration-overview.md#mtls-mutual-tls" >}}) | +| mtls | N | Defines the mTLS configuration | `allowedClockSkew: 15m`
`workloadCertTTL:24h`
[Learn more about the `mtls` configuration.]({{% ref "configuration-overview.md#mtls-mutual-tls" %}}) | ## Related links -- [Learn more about how to use configuration specs]({{< ref configuration-overview.md >}}) \ No newline at end of file +- [Learn more about how to use configuration specs]({{% ref configuration-overview.md %}}) \ No newline at end of file diff --git a/daprdocs/content/en/reference/resource-specs/httpendpoints-schema.md b/daprdocs/content/en/reference/resource-specs/httpendpoints-schema.md index 5e2b8f45d24..432cffe7ab2 100644 --- a/daprdocs/content/en/reference/resource-specs/httpendpoints-schema.md +++ b/daprdocs/content/en/reference/resource-specs/httpendpoints-schema.md @@ -11,7 +11,7 @@ aliases: The `HTTPEndpoint` is a Dapr resource that is used to enable the invocation of non-Dapr endpoints from a Dapr application. {{% alert title="Note" color="primary" %}} -Any HTTPEndpoint resource can be restricted to a particular [namepsace]({{< ref isolation-concept.md >}}) and restricted access through scopes to any particular set of applications. +Any HTTPEndpoint resource can be restricted to a particular [namepsace]({{% ref isolation-concept.md %}}) and restricted access through scopes to any particular set of applications. {{% /alert %}} ## Format @@ -59,4 +59,4 @@ auth: # Optional ## Related links -[Learn how to invoke non-Dapr endpoints.]({{< ref howto-invoke-non-dapr-endpoints.md >}}) +[Learn how to invoke non-Dapr endpoints.]({{% ref howto-invoke-non-dapr-endpoints.md %}}) diff --git a/daprdocs/content/en/reference/resource-specs/resiliency-schema.md b/daprdocs/content/en/reference/resource-specs/resiliency-schema.md index c7bc15553ff..ad681c567a1 100644 --- a/daprdocs/content/en/reference/resource-specs/resiliency-schema.md +++ b/daprdocs/content/en/reference/resource-specs/resiliency-schema.md @@ -9,7 +9,7 @@ description: "The basic spec for a Dapr resiliency resource" The `Resiliency` Dapr resource allows you to define and apply fault tolerance resiliency policies. Resiliency specs are applied when the Dapr sidecar starts. {{% alert title="Note" color="primary" %}} -Any resiliency resource can be restricted to a particular [namepsace]({{< ref isolation-concept.md >}}) and restricted access through scopes to any particular set of applications. +Any resiliency resource can be restricted to a particular [namepsace]({{% ref isolation-concept.md %}}) and restricted access through scopes to any particular set of applications. {{% /alert %}} ## Format @@ -64,9 +64,9 @@ targets: # Required | Field | Required | Details | Example | |--------------------|:--------:|---------|---------| -| policies | Y | The configuration of resiliency policies, including:
  • `timeouts`
  • `retries`
  • `circuitBreakers`

[See more examples with all of the built-in policies]({{< ref resiliency-overview.md >}}) | timeout: `general`
retry: `retryForever`
circuit breaker: `simpleCB` | -| targets | Y | The configuration for the applications, actors, or components that use the resiliency policies.
[See more examples in the resiliency targets guide]({{< ref targets.md >}}) | `apps`
`components`
`actors` | +| policies | Y | The configuration of resiliency policies, including:
  • `timeouts`
  • `retries`
  • `circuitBreakers`

[See more examples with all of the built-in policies]({{% ref resiliency-overview.md %}}) | timeout: `general`
retry: `retryForever`
circuit breaker: `simpleCB` | +| targets | Y | The configuration for the applications, actors, or components that use the resiliency policies.
[See more examples in the resiliency targets guide]({{% ref targets.md %}}) | `apps`
`components`
`actors` | ## Related links -[Learn more about resiliency policies and targets]({{< ref resiliency-overview.md >}}) +[Learn more about resiliency policies and targets]({{% ref resiliency-overview.md %}}) diff --git a/daprdocs/content/en/reference/resource-specs/subscription-schema.md b/daprdocs/content/en/reference/resource-specs/subscription-schema.md index e46fb49e88c..7f842f7150d 100644 --- a/daprdocs/content/en/reference/resource-specs/subscription-schema.md +++ b/daprdocs/content/en/reference/resource-specs/subscription-schema.md @@ -9,7 +9,7 @@ description: "The basic spec for a Dapr subscription" The `Subscription` Dapr resource allows you to subscribe declaratively to a topic using an external component YAML file. {{% alert title="Note" color="primary" %}} -Any subscription can be restricted to a particular [namespace]({{< ref isolation-concept.md >}}) and restricted access through scopes to any particular set of applications. +Any subscription can be restricted to a particular [namespace]({{% ref isolation-concept.md %}}) and restricted access through scopes to any particular set of applications. {{% /alert %}} This guide demonstrates two subscription API versions: @@ -86,7 +86,7 @@ scopes: | bulksubscribe | N | Enable bulk subscribe properties. | `true`, `false` | ## Related links -- [Learn more about the declarative subscription method]({{< ref "subscription-methods.md#declarative-subscriptions" >}}) -- [Learn more about dead letter topics]({{< ref pubsub-deadletter.md >}}) -- [Learn more about routing messages]({{< ref "howto-route-messages.md#declarative-subscription" >}}) -- [Learn more about bulk subscribing]({{< ref pubsub-bulk.md >}}) +- [Learn more about the declarative subscription method]({{% ref "subscription-methods.md#declarative-subscriptions" %}}) +- [Learn more about dead letter topics]({{% ref pubsub-deadletter.md %}}) +- [Learn more about routing messages]({{% ref "howto-route-messages.md#declarative-subscription" %}}) +- [Learn more about bulk subscribing]({{% ref pubsub-bulk.md %}}) diff --git a/daprdocs/layouts/partials/components/bindings.html b/daprdocs/layouts/_partials/components/bindings.html similarity index 100% rename from daprdocs/layouts/partials/components/bindings.html rename to daprdocs/layouts/_partials/components/bindings.html diff --git a/daprdocs/layouts/partials/components/componenttoc.html b/daprdocs/layouts/_partials/components/componenttoc.html similarity index 100% rename from daprdocs/layouts/partials/components/componenttoc.html rename to daprdocs/layouts/_partials/components/componenttoc.html diff --git a/daprdocs/layouts/partials/components/configuration-stores.html b/daprdocs/layouts/_partials/components/configuration-stores.html similarity index 100% rename from daprdocs/layouts/partials/components/configuration-stores.html rename to daprdocs/layouts/_partials/components/configuration-stores.html diff --git a/daprdocs/layouts/partials/components/conversation.html b/daprdocs/layouts/_partials/components/conversation.html similarity index 100% rename from daprdocs/layouts/partials/components/conversation.html rename to daprdocs/layouts/_partials/components/conversation.html diff --git a/daprdocs/layouts/partials/components/cryptography.html b/daprdocs/layouts/_partials/components/cryptography.html similarity index 100% rename from daprdocs/layouts/partials/components/cryptography.html rename to daprdocs/layouts/_partials/components/cryptography.html diff --git a/daprdocs/layouts/partials/components/description.html b/daprdocs/layouts/_partials/components/description.html similarity index 100% rename from daprdocs/layouts/partials/components/description.html rename to daprdocs/layouts/_partials/components/description.html diff --git a/daprdocs/layouts/partials/components/locks.html b/daprdocs/layouts/_partials/components/locks.html similarity index 100% rename from daprdocs/layouts/partials/components/locks.html rename to daprdocs/layouts/_partials/components/locks.html diff --git a/daprdocs/layouts/partials/components/middleware.html b/daprdocs/layouts/_partials/components/middleware.html similarity index 100% rename from daprdocs/layouts/partials/components/middleware.html rename to daprdocs/layouts/_partials/components/middleware.html diff --git a/daprdocs/layouts/partials/components/name-resolution.html b/daprdocs/layouts/_partials/components/name-resolution.html similarity index 100% rename from daprdocs/layouts/partials/components/name-resolution.html rename to daprdocs/layouts/_partials/components/name-resolution.html diff --git a/daprdocs/layouts/partials/components/pubsub.html b/daprdocs/layouts/_partials/components/pubsub.html similarity index 100% rename from daprdocs/layouts/partials/components/pubsub.html rename to daprdocs/layouts/_partials/components/pubsub.html diff --git a/daprdocs/layouts/partials/components/secret-stores.html b/daprdocs/layouts/_partials/components/secret-stores.html similarity index 100% rename from daprdocs/layouts/partials/components/secret-stores.html rename to daprdocs/layouts/_partials/components/secret-stores.html diff --git a/daprdocs/layouts/partials/components/state-stores.html b/daprdocs/layouts/_partials/components/state-stores.html similarity index 100% rename from daprdocs/layouts/partials/components/state-stores.html rename to daprdocs/layouts/_partials/components/state-stores.html diff --git a/daprdocs/layouts/partials/feedback.html b/daprdocs/layouts/_partials/feedback.html similarity index 98% rename from daprdocs/layouts/partials/feedback.html rename to daprdocs/layouts/_partials/feedback.html index 811b3c8792e..e432fd5db81 100644 --- a/daprdocs/layouts/partials/feedback.html +++ b/daprdocs/layouts/_partials/feedback.html @@ -1,4 +1,4 @@ -