From ce5a015e0e45e3edaeebacd9bb39e90660e23b5b Mon Sep 17 00:00:00 2001 From: danielehc Date: Thu, 25 Sep 2025 17:04:46 +0200 Subject: [PATCH 1/7] Fix content and structure --- .../content/docs/error-messages/consul.mdx | 4 +- .../disaster-recovery/backup-restore.mdx | 11 +- .../disaster-preparation.mdx | 166 +++++++++++++++++ .../manage/disaster-recovery/federation.mdx | 55 ++---- .../docs/manage/disaster-recovery/index.mdx | 97 +++------- .../disaster-recovery/restore-federated.mdx | 96 ++++++++++ .../disaster-recovery/restore-primary.mdx | 175 ++++++++++++++++++ website/data/docs-nav-data.json | 12 ++ 8 files changed, 501 insertions(+), 115 deletions(-) create mode 100644 website/content/docs/manage/disaster-recovery/disaster-preparation.mdx create mode 100644 website/content/docs/manage/disaster-recovery/restore-federated.mdx create mode 100644 website/content/docs/manage/disaster-recovery/restore-primary.mdx diff --git a/website/content/docs/error-messages/consul.mdx b/website/content/docs/error-messages/consul.mdx index 44a004068e3b..f10f88b5955c 100644 --- a/website/content/docs/error-messages/consul.mdx +++ b/website/content/docs/error-messages/consul.mdx @@ -165,12 +165,14 @@ When restoring a Consul datacenter with a snapshot on new infrastructure, Consul This error means that in the new datacenter there is at least one node with the same `node_name` as a node in the snapshot's datacenter, but with a different `node_id`. This represents a consistency issue. -There are two possible workarounds: +There are three possible workarounds: 1. Save the UUID from the previous node’s data directory. Then re-use that same UUID when you first start the agent on the new node. You can configure node IDs for your Consul agent nodes with the [`node_id` configuration parameter](/consul/docs/reference/agent/configuration-file/node#_node_id). 1. Always use unique node names for your Consul datacenters so that there is no risk of conflicts. You can configure node names for your Consul agent nodes using the [`node_name`](/consul/docs/reference/agent/configuration-file/node#_node) configuration parameter. +1. Perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. Once servers are restarted, the node ids will be set to the expected value and this will resolve the errors in the logs. + ## ACL not found If Consul returns the following error, this indicates that you have ACL enabled in your cluster but you aren't passing a valid token. diff --git a/website/content/docs/manage/disaster-recovery/backup-restore.mdx b/website/content/docs/manage/disaster-recovery/backup-restore.mdx index 4a3ecccb2797..f7c4f6d97c02 100644 --- a/website/content/docs/manage/disaster-recovery/backup-restore.mdx +++ b/website/content/docs/manage/disaster-recovery/backup-restore.mdx @@ -35,6 +35,7 @@ To reduce the burden on the leader, it is possible to [run the snapshot command However, we still recommend you take `consistent` snapshots for write-heavy production use cases, or when you want to snapshot a cluster state immediately after a specific change. + ## Workflow 1. **Backup the Consul datacenter**: Use the `consul snapshot save` command to create a backup of the Consul datacenter. @@ -42,10 +43,8 @@ However, we still recommend you take `consistent` snapshots for write-heavy prod 1. **Restore from snapshot**: Use the `consul snapshot restore` command to restore the Consul datacenter from the backup. - ## Backup a Consul datacenter - Run the basic snapshot command on one of the servers. Because it uses the default settings, this request runs in `consistent` mode. ```shell-session @@ -68,6 +67,11 @@ Version 1 For more information about the `snapshot inspect` sub-command and its output, refer to the [`consul snapshot inspect` CLI documentation](/consul/commands/snapshot/inspect). + + +Consul snapshots contain extremely sensitive data, such as credentials in recoverable form. Store snapshots on an encrypted medium with sufficiently strict access controls in place. + + ## Restore a Consul datacenter @@ -83,10 +87,9 @@ $ consul snapshot restore backup.snap Restored snapshot ``` - ## Additional guidance For more information on disaster recovery, including detailed instructions on how to backup and restore Consul datacenters, refer to the following resources: - [Consul Disaster Recovery](/consul/docs/manage/disaster-recovery) -- [Disaster recovery for WAN-federated datacenters](/consul/docs/manage/disaster-recovery/federation) +- [Disaster recovery for WAN-federated datacenters](/consul/docs/manage/disaster-recovery/restore-federated) diff --git a/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx b/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx new file mode 100644 index 000000000000..d8b147096ff5 --- /dev/null +++ b/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx @@ -0,0 +1,166 @@ +--- +layout: docs +page_title: Disaster preparation strategy +description: >- + Prepare for Consul disaster recovery using best practice recommendations. Implement a backup plan and a disaster recovery plan (DRP) to minimize downtime in case a disaster event happens in your deployment. +--- + +# Disaster preparation strategy + +This topic provides an overview of the best practices for preparing a disaster recovery strategy for your Consul cluster. + +## Introduction + +Disaster recovery is an important part of business continuity planning. + +When defining a disaster preparation strategy, you should take into account the following two parameters: + +- **Recovery point objective (RPO)** - The maximum amount of data loss that can be incurred from a disaster, failure, or comparable event. RPO is measured as a unit of time and there is usually a 1-to-1 correlation between RPO and backup frequency. +- **Recovery time objective (RTO)** - The amount of time that passes between application failure and full availability restoration. RTO could be kept relatively short by having another datacenter location available for disaster recovery purposes with replication of services and data occurs on a regular basis. + +Restoring a Consul cluster from a disastrous event, such as the complete loss of one or more datacenters or region, typically includes the full redeploy of a new Consul datacenter to replace the lost one. Using best practices for deploy and automation greatly reduces the amount of time that it will take to perform these steps. + +- [Use a recommended architecture](#use-a-recommended-architecture) for your datacenter. +- [Automate your deployment](#automate-your-deployment) process to reduce deploy times and human errors. +- [Implement a backup strategy](#implement-a-backup-strategy) to reduce RPO. +- Have a [TLS certificate distribution process](#tls-certificate-distribution-process) in place. +- Adopt an adequate [ACL down policy](#acl-down-policy). +- Use [federation strategies to mitigate outages](#federation-strategies-to-mitigate-outages). + + +## Use a recommended architecture + +Not every outage has the same level of impact. A lot of the resiliency of your Consul datacenter will rely on proper configuration and the adoption of a recommended architecture. Following a standard architecture makes the deploy process consistent across your organization, also helping with the automation of the deploy process. + +Refer to [Consul Reference Architecture](/consul/tutorials/production-deploy/reference-architecture) to learn about the recommended configurations for your Consul datacenter. + +If you are using Kubernetes you can refer to [Consul on Kubernetes reference architecture](/consul/tutorials/production-kubernetes/kubernetes-reference-architecture). + +Enterprise users can use [redundancy zones](/consul/tutorials/operate-consul/redundancy-zones) to provide fault tolerance even in case of a total region failure. + +## Automate your deployment + +The amount of downtime you experience from the loss of your Consul datacenter is directly proportional to the amount of time it takes you to deploy a new datacenter. + +Re-deploying an entire datacenter after an outage is a non-trivial operation that might require a considerable amount of time. You can reduce the time to recover, _RTO_, by following Infrastructure as Code (IaC) principles and using tools such as [Terraform](/terraform/intro) and [Vault](/vault/docs/about-vault/what-is-vault) to help you in the deployment and recovery process. + +Refer to the follow documentation to set up your datacenters: + +- [Deployment Guide](/consul/tutorials/production-deploy/deployment-guide) +- [Securing Consul with ACLs](/consul/docs/secure/acl) + +If you are using Kubernetes refer to the following documentation: + +- [Consul and Kubernetes deployment guide](/consul/tutorials/production-kubernetes/kubernetes-deployment-guide). + +To learn more about best practices for your deployments you can also refer to HashiCorp's [Well-Architected Framework](/well-architected-framework/what-is) documentation for a list of best practices that can help you define and automate your processes, optimize your resources and costs, design reliable systems, and secure your infrastructure and services. + + +## Implement a backup strategy + +A Consul datacenter's state is more than just the initial configuration, it includes data that is generated during normal operations such as KV entries, ACL tokens, and intentions. When your datacenter fails, this information is lost and cannot be manually recreated without a backup. + +Restoring from a snapshot ensures all the intentions, KV entries and ACL tokens are reintroduced. + +You can follow [Backup Consul Data and State](/consul/tutorials/production-deploy/backup-and-restore) to learn how to perform a snapshot of your Consul datacenter to use in case of disaster. + + +## TLS certificate distribution process + +Certificates are stored on the agent disk and are not saved in a snapshot. This means you will have to re-generate them in case you lose access to the agent's data. + +Consul comes equipped with a command, [`consul tls cert create`](/consul/commands/tls/cert), that permits you to generate TLS certificates for the agents. This simplifies the automation of deployment by giving you the ability to generate a CA and TLS certificates as part of the process. + +As an alternative, we suggest you use Vault as a CA and TLS certificate generator to help you automate the process. Refer to [Generate mTLS Certificates for Consul with Vault](/consul/docs/automate/consul-template/vault/mtls) to learn how to automate certificate generation and distribution for your Consul server agents. + + +## ACL down policy + +When your primary datacenter is down you lose your ability to validate ACL policies. To mitigate this, Consul has a configuration parameter, [`acl.down_policy`](/consul/docs/reference/agent/configuration-file/acl#acl_down_policy), that tells Consul which strategy to follow if ACLs cannot be validated against the primary datacenter. + +By default, Consul adopts the `extend-cache` approach, meaning that in case of an outage Consul will allow cached ACL objects to be used, ignoring their TTL values. If a non-cached ACL is used, `extend-cache` acts like `deny`. + +If you changed the `down_policy` to the more restrictive value of `deny`, you will be impacted more severely from the outage, since all ACL protected operations in the secondary datacenter will be denied until the primary datacenter is restored. + + +### Client ACL tokens reconfiguration + +When you restore a snapshot to a new Consul cluster, depending on the initial configuration you might need to reconfigure the ACL tokens for the client agents. + +- If token persistence was enabled before the snapshot was captured, using the [`enable_token_persistence`](/consul/docs/reference/agent/configuration-file/acl#acl_enable_token_persistence) configuration flag, then the client agents will resume function after the snapshot restore in the cluster's server agents, without the need for reconfiguration. +- If the ACL tokens for the agents were specified directly in the client agent configuration before the snapshot was captured, using the [`acl.tokens.agent`](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) parameter, then the client agents will resume function after the snapshot restore in the cluster's server agents, without the need for reconfiguration. +- If none of the previous options were enabled, then ACL tokens will not be persisted after a restore. This means that Consul clients will not be able to re-join the datacenter because they do not have the required permissions and they require an extra configuration to be restored. Use the [`consul acl set-agent-token` command](/consul/commands/acl/set-agent-token#agent), the [`acl.tokens.agent`](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) configuration parameter, or the `CONSUL_HTTP_TOKEN` variable to update the token on client agents. + +The table below offers an overview of the different configuration possibilities and an indication over the need for Consul clients' reconfiguration. + +| Token persistence enabled | ACL token provided in Consul client config | Consul client requires a re-configuration | +| --- | --- | --- | +| | | | +| Yes | No | No | +| No | Yes | No | +| Yes | Yes | No | +| No | No | Yes | + + +## Federation strategies to mitigate outages + +Introducing Consul federation in your environment, by having multiple Consul datacenters federated using WAN or cluster peering, can increase your resilience to disruptive events by replicating services across multiple datacenters, regions, and cloud providers. + +Implementing federation in your environment you can leverage Consul functionalities that increase resilience towards service failure: + + - Within a single datacenter, Consul provides automatic failover for services by omitting failed service instances from DNS lookups. + - WAN federated clusters can use [prepared queries](/consul/docs/manage-traffic/failover/prepared-query) to let users define failover policies in a centralized way. + - Cluster-peered federated datacenters can use [sameness groups](/consul/docs/manage-traffic/failover/sameness-group) to automatically redirect service traffic to healthy instances in failover scenarios. + +To deploy a multi-datacenter federated Consul cluster you can refer to the following documentation: + +- [Basic Federation with WAN Gossip](/consul/docs/east-west/wan-federation/vms) +- [ACL Replication for Multiple Datacenters](/consul/docs/secure/acl/token/federation) + +If you are using Consul's service mesh in your WAN-Federated environment, you should also set [`enable_central_service_config = true`](/consul/docs/reference/agent/configuration-file/general#enable_central_service_config) on your Consul clients, which allows you to centrally configure the sidecar and mesh gateway proxies. + +To make use of the mesh gateway functionality, refer to the [Mesh gateways ](/consul/docs/east-west/mesh-gateway) documentation. + + +## Primary Consul datacenter outage impact + +When you design and architect your WAN-federated Consul environment, it is important to consider the critical role of the primary datacenter in the multi-cluster deployment. The primary Consul datacenter serves as the source of truth for the following data. + +1. Certificate Authority management, if you use the built-in Consul CA. The root CA resides in the primary Consul datacenter and must sign the certificates for the additional Consul datacenters. +1. ACLs +1. Intentions + +The table below shows the impact on Consul operations of a full outage of the primary Consul datacenter. + +| Consul feature | Create | Read | Update | Delete | +| -------------- | -------- | ---------------- | -------- | -------- | +| ACLs | ❌ | ✅ ¹ | ❌ | ❌ | +| Intentions | ❌ | ✅ ² | ❌ | ❌ | +| KV Store | ✅ | ✅ | ✅ | ✅ | +| Services | ✅ | ✅ | ✅ | ✅ | + + +1. The ability to read and validate ACLs assumes that the default setting of `extend_cache` is used for the ACL down policy and that the ACL token was cached in the local datacenter before the primary datacenter outage. +2. The ability to read and validate intentions assumes that Intentions were created when primary datacenter was online. + +For the TLS certificate management you can greatly reduce the impact of a primary datacenter outage by using Vault both to [generate mTLS Certificates for Consul agents](/consul/docs/automate/consul-template/vault/mtls) and as a [Consul service mesh certification authority](/consul/tutorials/operate-consul/vault-pki-consul-connect-ca). + +### Clientless primary Consul datacenter + +Once you establish and federate a primary Consul datacenter, you cannot migrate, change, or move it. An effective pattern for large Consul multi-cluster deployments is to have a dedicated primary Consul datacenter with the sole purpose of serving as a primary. You would only include Consul servers in this primary datacenter and not connect any client nodes or services. This primary Consul datacenter can then be federated normally with other Consul datacenters, which will each contain both servers and clients. + +This approach provides two distinct advantages. + +- It becomes easier to move the primary Consul datacenter. For example, you may want to migrate it from an on premises datacenter to a cloud environment. Typically, this would entail performing a backup and restore of the primary Consul datacenter to the alternate location. Review the [Disaster Recovery for the Primary Datacenter](/consul/tutorials/datacenter-operations/recovery-outage-primary) tutorial for guidance on restoring a Consul cluster. +- In the event of a disaster, the additional Consul datacenters can still continue to function independently of the primary Consul datacenter although functionality will be reduced until the primary Consul datacenter is brought back online. + +## Additional guidance + +This page helps you build your internal operations manual for outages and to create a disaster recovery strategy. + +You should make sure to test the manual multiple times before experiencing an outage, to make sure the steps are correct and to measure the time needed for a recovery against your desired _RTO_. + +Use our tutorials on disaster recovery to test the commands on a test environment: + +- [Disaster recovery for Consul clusters](/consul/tutorials/operate-consul/recovery-outage). +- [Disaster Recovery for Consul on Kubernetes](/consul/tutorials/production-kubernetes/kubernetes-disaster-recovery). \ No newline at end of file diff --git a/website/content/docs/manage/disaster-recovery/federation.mdx b/website/content/docs/manage/disaster-recovery/federation.mdx index 1184ca7767ff..84badf0d7368 100644 --- a/website/content/docs/manage/disaster-recovery/federation.mdx +++ b/website/content/docs/manage/disaster-recovery/federation.mdx @@ -7,60 +7,41 @@ description: >- # Disaster recovery for WAN-federated datacenters -This describes the process to backup and restore a federated Consul datacenter. +This page describes the process to prepare for an outage event for a federated Consul datacenter, and the process to restore a federated Consul datacenter in case of outage. ## Overview -Operating a multi-datacenter federated environment requires you to prepare for -many possibilities, including a complete outage of one of your physical -datacenters, or a cloud provider outage that might make one of the -components of your environment temporarily or permanently unavailable. +Disaster recovery is an important part of business continuity planning. When operating a WAN federated Consul cluster, composed of multiple datacenters, you need to prepare a strategy that includes many outage possibilities, including a complete outage of one of your physical datacenters, or a cloud provider outage that might make one of the components of your environment temporarily or permanently unavailable. -This can have different implications depending on your configuration, but it is -something you want to be prepared for, in case the unthinkable happens. +Each outage possibility can have different implications, depending on your configuration, but there are strategies that can help you mitigate the damage in case of disaster. -This tutorial guides you through the process of creating a recovery strategy -from a quorum loss to the complete loss of your primary datacenter. +This page helps with the creation of a recovery strategy from a quorum loss event up to the complete loss of your primary datacenter. -The recommended logical steps are listed in three main sections, the first will help you [prepare for an outage event](#disaster-preparation-strategy), the second will help you [restore your primary datacenter](#restore-primary-datacenter), and the third will help you [validate the restore was successful](#restore-and-validate-federation) and ensure federation is re-established. +The process can be summarized in the following phases: + +1. Follow the [disaster preparation strategy](#disaster-preparation-strategy) to reduce risks and be prepared for all possible outage cases. +1. Identify the kind of outage event occurred for the primary datacenter. +1. Restore primary datacenter. +1. Restore and validate datacenter federation. ## Prerequisites -### Base configuration +The following instructions require two or more wide area network (WAN) federated Consul datacenters with access control list (ACL) replication enabled. -To complete this tutorial, you will need two wide area network (WAN) joined -Consul datacenters with access control list (ACL) replication enabled. If you -are starting from scratch, follow these tutorials to set up your datacenters, -or use them to check that you have the proper configuration in place: +If you have not met these deployment requirements, refer to the follow documentation to set up your datacenters: - [Deployment Guide](/consul/tutorials/production-deploy/deployment-guide) -- [Securing Consul with ACLs](/consul/tutorials/security/access-control-setup-production) -- [Basic Federation with WAN Gossip](/consul/tutorials/networking/federation-gossip-wan) - -You will also need to enable ACL replication, which you can do by following the steps in the -[ACL Replication for Multiple -Datacenters](/consul/tutorials/security-operations/access-control-replication-multiple-datacenters) -tutorial. - -### Mesh gateways +- [Securing Consul with ACLs](/consul/docs/secure/acl) +- [Basic Federation with WAN Gossip](/consul/docs/east-west/wan-federation/vms) +- [ACL Replication for Multiple Datacenters](/consul/docs/secure/acl/token/federation) -If you want to make use of the mesh gateway functionality, you can follow [Connect Services Across Datacenters with Mesh Gateways](/consul/tutorials/developer-mesh/service-mesh-gateways) to setup them for the two datacenters. +If you are using Consul's service mesh in your WAN-Federated environment, you should also set [`enable_central_service_config = true`](/consul/docs/reference/agent/configuration-file/general#enable_central_service_config) on your Consul clients, which allows you to centrally configure the sidecar and mesh gateway proxies. -### Central service configuration +To make use of the mesh gateway functionality, refer to the [Mesh gateways ](/consul/docs/east-west/mesh-gateway) documentation. -Lastly, you should set [`enable_central_service_config = true`](/consul/docs/reference/agent/configuration-file/general#enable_central_service_config) -on your Consul clients which will allow you to centrally configure the sidecar -and mesh gateway proxies. - -## Disaster recovery process +## Disaster preparation strategy -The process can be summarized in the following phases: -1. Formulate a disaster preparation strategy -1. Outage event occurs for the primary datacenter -1. Restore primary datacenter -1. Restore and validate federation -## Disaster preparation strategy ### Use a recommended architecture diff --git a/website/content/docs/manage/disaster-recovery/index.mdx b/website/content/docs/manage/disaster-recovery/index.mdx index 746d8ab0673f..2c5c22797384 100644 --- a/website/content/docs/manage/disaster-recovery/index.mdx +++ b/website/content/docs/manage/disaster-recovery/index.mdx @@ -7,97 +7,48 @@ description: >- # Disaster recovery overview -This topic provides an overview of the best practices for preparing a disaster recovery strategy for your Consul cluster. +This page provides an overview of the resources available for preparing a disaster recovery strategy for your Consul cluster and to recover a Consul datacenter from an outage. -## Introduction +## Overview -Disaster recovery is an important part of business continuity planning. Your strategy depends on the following considerations: +Disaster recovery is an important part of business continuity planning. When operating a Consul datacenter, standalone or composed of multiple datacenters, you need to prepare a strategy that includes many outage possibilities. -- **Recovery point objective (RPO)** - The maximum amount of data loss that can be incurred from a disaster, failure, or comparable event. RPO is measured as a unit of time and there is usually a 1-to-1 correlation between RPO and backup frequency. -- **Recovery time objective (RTO)** - The amount of time that passes between application failure and full availability which includes how much time it takes to recover from the disaster or failure. RTO could be relatively short for a customer that already has another datacenter location available for disaster recovery purposes and replication of services and data occurs on a regular basis. You can also leverage leverage automation technologies to recover more quickly from a disaster. +Each outage possibility can have different implications, depending on your configuration, but there are strategies that can help you mitigate the damage in case of disaster. The strategy you adopt should include recovery plans for the most severe cases, like a complete outage of one of your physical datacenters, or a cloud provider outage that might make one of the components of your environment temporarily or permanently unavailable. -When a Consul cluster loses quorum, or if you lose the server agents completely, restoration requires you to build a new Consul cluster from the latest snapshot. You may also need to reinstall and configure Consul client agents. Automation technologies can greatly reduce the amount of time that it will take to perform these steps. Keep these facts in in mind when deciding between RPO and RTO. +To prepare for an outage in your Consul environment follow these logical steps. -## Snapshot recommendations +- Learn how to [backup and restore](#backup-and-restore) a Consul datacenter. +- Create a [disaster preparation strategy](#disaster-preparation-strategy) to reduce risks and be prepared for all possible outage cases. +- Learn how to [restore a primary datacenter](#restore-a-primary-datacenter). +- If using Consul in a federated environment, learn how to [restore a federated datacenter](#restore-a-federated-datacenter). -Our recommended method for backing up Consul state uses the [built-in Consul snapshot feature](/consul/commands/snapshot), which is available through the HTTP API or CLI. The tutorial [Backup Consul Data and State](/consul/tutorials/production-deploy/backup-and-restore) covers this in further detail. +## Backup and restore - -Consul snapshots contain extremely sensitive data, such as credentials in recoverable form. Store snapshots on an encrypted medium with sufficiently strict access controls in place. - +Our recommended method for backing up Consul state uses the built-in Consul snapshot feature, which is available through the HTTP API, using the [`/v1/snapshot`](/consul/api-docs/snapshot) endpoint, or CLI, using the [`consul snapshot`](/consul/commands/snapshot) command. -You should take snapshots of Consul clusters on a regular basis and store them on mounted or external storage. We suggest the use of object storage versus block or file based storage, such as Azure blobs, Google Cloud storage, or AWS S3 storage. Avoid local or ephemeral storage. +The [Backup and restore a Consul datacenter](/consul/docs/manage/disaster-recovery/backup-restore) documentation covers this in further detail. -You can automate this process using the [Consul Enterprise Snapshot agent](/consul/commands/snapshot/agent). +You should take snapshots of Consul clusters on a regular basis and store them on mounted or external storage. We recommend to avoid local or ephemeral storage, and we suggest the use of object storage versus block or file based storage, such as Azure blobs, Google Cloud storage, or AWS S3 storage. -We recommend that you regularly test and validate the restore process for critical systems to ensure that everything works as expected. This testing process is typically defined in a _Disaster recovery plan (DRP)_, which is a formal document created by an organization that contains the processes used to recover access to systems and data after a catastrophic event. DRPs typically also include a set of processes for testing and validating disaster recovery procedures and establish a regular cadence for these events. +Enterprise customers can automate the backup process by using the [Automated Backups](/consul/docs/manage/scale/automated-backup) functionality. -## ACL considerations +## Disaster preparation strategy -When you restore a snapshot to a new Consul cluster, note the following behavior regarding tokens and the ACL system. +We recommend to regularly test and validate the restore process for critical systems to ensure that everything works as expected. This testing process is typically defined in a _Disaster recovery plan (DRP)_, which is a formal document created by an organization that contains the processes used to recover access to systems and data after a catastrophic event. DRPs typically also include a set of processes for testing and validating disaster recovery procedures and establish a defined process to tackle these events. -| Token persistence enabled | ACL token provided in Consul client config | Consul client requires a re-configuration | -| --- | --- | --- | -| | | | -| Yes | No | No | -| No | Yes | No | -| Yes | Yes | No | -| No | No | Yes | +The [Disaster preparation strategy](/consul/docs/manage/disaster-recovery/disaster-preparation) page offers you a list of best practices to make your Consul datacenter more resilient to possible outages. -- If [token persistence was enabled on client agents](/consul/docs/reference/agent/configuration-file/acl#acl_enable_token_persistence) when the snapshot was captured, then the client agents will resume function after you restore the cluster's server agents. -- If [the ACL token is specified directly in the client agent configuration](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) when when the snapshot was captured, then the client agents resume function after you restore the cluster's server agents. -- If client agents were not configured in a way that persists access to a token, then client agents will not resume function after the restore because they not have permissions to register with the new Consul cluster. This situation applies when the ACL token was set using the API or CLI, or if the ACL token was set in an environment variable. Use the [`consul acl set-agent-token` command](/consul/commands/acl/set-agent-token#agent) or the `CONSUL_HTTP_TOKEN` variable to update the token on client agents before you restore a cluster with a snapshot. +## Restore a primary datacenter -## Service failure recommendations +When an outage happens in the primary datacenter, a lot of the Consul cluster functionalities become unavailable. Refer to [Restore primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary) to learn how to restore a single Consul datacenter functionalities. You should use the instruction provided, adapted to your environment, to build up and internal operations manual for disaster recovery. -To architect against outages caused by disasters that impact services registered with Consul, use [cluster peering failover with sameness groups](/consul/docs/multi-tenant/sameness-group/vm). With this setup, Consul can transparently failover requests to an unhealthy service to the same service in a different region and datacenter. +We also provide tutorials on disaster recovery to help you test the commands in a sandbox environment: -## Region failure recommendations +- [Disaster recovery for Consul clusters](/consul/tutorials/operate-consul/recovery-outage) +- [Disaster Recovery for Consul on Kubernetes](/consul/tutorials/production-kubernetes/kubernetes-disaster-recovery) -In the event of a total region failure, Consul and your services are likely down. To architect against this situation, [deploy Consul and your services in multiple regions with a global failover policy](/consul/tutorials/operate-consul/redundancy-zones) so that Consul reroutes network traffic to the alternate region during a disaster. Deploying identical Consul servers and services across multiple cloud regions satisfies datacenter latency requirements and limits the blast radius during large-scale disasters. +## Restore a federated datacenter -## Multi-cluster disaster recovery considerations +A secondary datacenter outage, while not as tragic as a primary datacenter loss, can still impact deeply your environment. Refer to [Restore federated datacenter](/consul/docs/manage/disaster-recovery/restore-federated) to learn how to restore a federated Consul datacenter functionalities. You should use the instruction provided, adapted to your environment, to build up and internal operations manual for disaster recovery. -The disaster recovery considerations for single Consul cluster deployments apply to Consul multi-cluster deployments as well. However, there a few additional considerations that are specific to Consul multi-cluster deployments using WAN Federation. -When you design and architect your WAN-federated Consul environment, it is important to consider the critical role of the primary datacenter in the multi-cluster deployment. The primary Consul datacenter serves as the source of truth for the following data. - -1. Certificate Authority management, if you use the built-in Consul CA. The root CA resides in the primary Consul datacenter and must sign the certificates for the additional Consul datacenters. -1. ACLs -1. Intentions - -It is important to consider both placement of the primary Consul datacenter as well as the steps required to recover from a disaster. The recommended approach is reviewed in detail below. - -### Clientless primary Consul datacenter - -Once you establish and federate a primary Consul datacenter; you cannot migrate, change, or move it. An effective pattern for large Consul multi-cluster deployments is to have a dedicated primary Consul datacenter with the sole purpose of serving as a primary. You would only include Consul servers in this primary datacenter and not connect any client nodes or services. This primary Consul datacenter can then be federated normally with other Consul datacenters, which will each contain both servers and clients. - -This approach provides two distinct advantages. - -- It becomes easier to move the primary Consul datacenter. For example, you may want to migrate it from an on premises datacenter to a cloud environment. Typically, this would entail performing a backup and restore of the primary Consul datacenter to the alternate location. Review the [Disaster Recovery for the Primary Datacenter tutorial](/consul/tutorials/datacenter-operations/recovery-outage-primary) for guidance on restoring a Consul cluster. -- In the event of a disaster, the additional Consul datacenters can still continue to function independently of the primary Consul datacenter although functionality will be reduced until the primary Consul datacenter is brought back online. See the table below for more details. - -### Primary Consul datacenter outage behaviors - -The table below assumes that the primary Consul datacenter is offline. It is implied that when referencing 'any Consul datacenter' that the primary Consul datacenter is not included. - -| Consul Cluster Functionality | Within local Consul datacenter | Within any Consul datacenter | Comments | -| --- | --- | --- | --- | -| Read ACLs | ✔ | ✔ | Assumes that the default setting of ‘extend cache’ is used for the ACL down policy | -| Create/Update/Delete ACLs | ✖ | ✖ | | -| Read Intentions | ✔ | ✔ | Assumes that Intentions were created when primary datacenter was online | -| Create/Update/Delete Intentions | ✖ | ✖ | | -| Create/Read/Update/Delete KV Store items | ✔ | ✔ | | -| Create/Read/Update/Delete Services | ✔ | ✔ | | -| Certificate Generation & Renewal | ✖ | ✖ | Certificates must be signed by the primary Consul datacenter | - -## Additional guidance - -For more information on disaster recovery, including detailed instructions on how to backup and restore Consul datacenters, refer to the following resources: - -- [Consul Disaster Recovery for the Primary Datacenter](/consul/tutorials/datacenter-operations/recovery-outage-primary) -- [Consul Outage Recovery](/consul/tutorials/datacenter-operations/recovery-outage) -- [Consl Redundancy Zones](/consul/tutorials/operate-consul/redundancy-zones) -- [Consul Backup & Restore](/consul/tutorials/production-deploy/backup-and-restore) -- [Disaster Recovery for Consul on - Kubernetes](/consul/tutorials/kubernetes-production/kubernetes-disaster-recovery) diff --git a/website/content/docs/manage/disaster-recovery/restore-federated.mdx b/website/content/docs/manage/disaster-recovery/restore-federated.mdx new file mode 100644 index 000000000000..df0c9710369c --- /dev/null +++ b/website/content/docs/manage/disaster-recovery/restore-federated.mdx @@ -0,0 +1,96 @@ +--- +layout: docs +page_title: Restore federated datacenter +description: >- + Restore federated Consul datacenter in the event of an outage. +--- + +# Restore federated datacenter + +This topic provides an overview of the best practices for restoring a federated datacenter in case of an outage. + +## Introduction + +If you are operating a WAN federated datacenter and you experience an outage there are multiple levels of disruption that can occur. + +- **Loss of quorum in the secondary datacenter.** This is an outage where the datacenter has less than *(N/2)+1* servers available, where N is the total number of servers. While some of the nodes are unaffected, there are not enough healthy nodes to form a quorum. +- **Complete loss of the secondary datacenter.** This is either a disaster event that completely wipes an entire facility or a major outage of your cloud provider. +- **Loss of federation due to primary datacenter restore.** This is an outage where, after a primary datacenter restore, the newly deployed primary datacenter nodes have different IP addresses than the ones used in your secondary datacenter configuration for WAN federation. + +## Loss of quorum in the secondary datacenter + +This case is equivalent to a loss of quorum in your primary datacenter with the advantage that the issue does not affect any other datacenters. + +Follow instruction in [Loss of quorum in the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#loss-of-quorum-in-the-primary-datacenter) to restore the affected datacenter. + +## Complete loss of the secondary datacenter + +This case is equivalent to a complete loss of your primary datacenter with the advantage that the issue does not affect any other datacenters. + +Follow instruction in [Complete loss of the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#complete-loss-of-the-primary-datacenter) to restore the affected datacenter. + +## Loss of federation due to primary datacenter restore. + +In the case of primary datacenter recovery, after an outage, it is possible that the new servers will have a different IP than the one used to wan join them from the secondary datacenter. In that scenario, the federation will be broken. + +To verify the federation you can use the [`consul members -wan`](/consul/commands/members) command on the primary datacenter. + +```shell-session +$ consul members -wan +Node Address Status Type Build Protocol DC Partition Segment +consul-server-0.primary 172.20.0.10:8302 alive server 1.21.4 2 primary default +consul-server-1.primary 172.20.0.9:8302 alive server 1.21.4 2 primary default +consul-server-2.primary 172.20.0.14:8302 alive server 1.21.4 2 primary default +``` + +In this example, the command only shows servers from the primary datacenter, indicating that the federation is not in place. + +To restore the federation you must perform a rolling restart of the secondary datacenter servers using the new primary datacenter servers' IP in the [`retry-join-wan`](/consul/docs/reference/agent/configuration-file/join#_retry_join_wan) configuration parameter. + +For the example provided, an example configuration for the `retry-join-wan` parameter could be the following: + + + +```hcl +## ... + +retry_join_wan = [ "172.20.0.10", "172.20.0.9", "172.20.0.14" ] + +## ... +``` + + + +After changing the configuration in all secondary datacenter's server nodes, perform a rolling restart. If the new configuration is correct you will be able to observe it from the logs. + + + +```log +[INFO] agent: Joining cluster...: cluster=WAN +[INFO] agent: (WAN) joining: wan_addresses=["172.20.0.10", "172.20.0.9", "172.20.0.14"] +``` + + + +After the rolling restart, the `consul members -wan` command output will now show all the servers. + +```shell-session +$ consul members -wan +Node Address Status Type Build Protocol DC Partition Segment +consul-server-0.primary 172.20.0.10:8302 alive server 1.21.4 2 primary default +consul-server-1.primary 172.20.0.9:8302 alive server 1.21.4 2 primary default +consul-server-2.primary 172.20.0.14:8302 alive server 1.21.4 2 primary default +consul-server-0.secondary 172.20.0.5:8302 alive server 1.21.4 2 secondary default +consul-server-1.secondary 172.20.0.4:8302 alive server 1.21.4 2 secondary default +consul-server-2.secondary 172.20.0.8:8302 alive server 1.21.4 2 secondary default +``` + +To prevent this kind of outages, you can either use hostnames instead of IP addresses or, for cloud providers that support it, use [cloud auto join](/consul/docs/deploy/server/cloud-auto-join) functionality. + + +## Additional guidance + +To familiarize with the concepts mentioned in this page you can try our tutorials for disaster recovery: + +- [Disaster recovery for Consul clusters](/consul/tutorials/operate-consul/recovery-outage). +- [Disaster Recovery for Consul on Kubernetes](/consul/tutorials/production-kubernetes/kubernetes-disaster-recovery). \ No newline at end of file diff --git a/website/content/docs/manage/disaster-recovery/restore-primary.mdx b/website/content/docs/manage/disaster-recovery/restore-primary.mdx new file mode 100644 index 000000000000..c6adbd64e24f --- /dev/null +++ b/website/content/docs/manage/disaster-recovery/restore-primary.mdx @@ -0,0 +1,175 @@ +--- +layout: docs +page_title: Restore primary datacenter +description: >- + Restore primary Consul datacenter in the event of an outage. +--- + +# Restore primary datacenter + +This topic provides an overview of the best practices for restoring a primary datacenter in case of an outage. + +## Introduction + +Depending on your configuration, multiple levels of outage can occur. + +This page covers how to handle outages that render the primary datacenter unable to serve requests, including service discovery requests to Consul DNS and intention validation. This can happen in many possible ways, but the two extremes of the spectrum are the following: + +- **Loss of quorum in the primary datacenter.** This is an outage where the datacenter has less than *(N/2)+1* servers available, where N is the total number of servers. While some of the nodes are unaffected, there are not enough healthy nodes to form a quorum. +- **Complete loss of the primary datacenter.** This is either a disaster event that completely wipes an entire facility or a major outage of your cloud provider. + +For the topics discussed in this page, we use the definition _primary datacenter_ to define both the only datacenter in the environment and the primary datacenter in a federated environment. The reason for this is that, in both cases, an outage in the datacenter impact the functionalities of the whole environment. + +## Loss of quorum in the primary datacenter + +In the scenario where you have lost enough servers in your primary datacenter that a quorum cannot be reached, you will experience the same level service failure as if the whole +datacenter is unavailable. + +If the outage is limited to the server nodes, or did not severely impact your client fleet, it might not be practical to rebuild the whole datacenter only to re-establish a quorum. + +In this scenario, you can follow the [Outage Recovery](/consul/tutorials/operate-consul/recovery-outage#server-failure-in-a-multi-server-cluster-losing-quorum) tutorial to restore your server nodes and make sure they are able to reform the raft cluster and elect a leader. + +Once the raft cluster is reformed, and the datacenter is again operational, you can now restart any client agents that might have been affected by the outage. + +## Complete loss of the primary datacenter + +The worst case scenario in Consul environment, federated or not, is the loss of the primary datacenter. + +In this scenario, the course of action should aim to restore the lost datacenter as quickly as possible. The following sections will guide you through the necessary steps to perform a restore and to make sure all functionalities are re-established. + +## Restore primary datacenter + +The steps necessary to restore your environment after a full outage of your primary datacenter are the following: + +1. [Restore datacenter nodes](#restore-datacenter-nodes). +1. [Restore the last snapshot](#restore-snapshot) to the newly recovered datacenter. +1. [Set Consul ACL agent tokens](#set-consul-acl-agent-tokens) to the servers. +1. [Perform a rolling restart of the servers](#perform-a-rolling-restart-of-the-servers). +1. [Perform a rolling restart of the clients](#perform-a-rolling-restart-of-the-clients). +1. If you have a federated environment, the last step after restore is to [restore and validate federation](#restore-and-validate-federation). + +### Restore datacenter nodes + +The first step for your recovery is to re-deploy your Consul datacenter. For this you can follow the same process you used for the initial deploy of your Consul datacenter. + +This process should be automated as much as possible to reduce downtime and to reduce human errors. + +In a federated environment, to make sure the new deployment is able to communicate with the secondary datacenters, you need to ensure that the recovered datacenter uses the same: + +- CA certificate +- CA key +- Gossip encryption key + +as the ones used in the failed environment. This process can be simplified by introducing Vault both to [generate mTLS Certificates for Consul agents](/consul/docs/automate/consul-template/vault/mtls) and as a [Consul service mesh certification authority](/consul/tutorials/operate-consul/vault-pki-consul-connect-ca). + +### Restore snapshot + +After the datacenter has been restored, restore the latest snapshot using the [`consul snapshot restore`](/consul/commands/snapshot/restore) command. + +```shell-session +$ consul snapshot restore -token= backup.snap + +Restored snapshot +``` + + + +The `token` used for the snapshot restore procedure needs to be a token valid for the newly restored datacenter. If your restored datacenter does not have ACL enabled, you can restore the snapshot without a token. + + + +### Set Consul ACL agent tokens + +The newly restarted nodes will now be missing the ACL tokens needed to successfully join the datacenter. Once you restored the ACL system with the snapshot restore you will be able to set the tokens for the different nodes using the [`consul acl`](/consul/commands/acl) commands. + +The following operations require a token with `acl = write` privileges. Also, after the snapshot is restored the ACL system will now contain the previous tokens created before the outage. You can use the any management token you had in your datacenter before the outage. To setup the token for the request you can either use the `CONSUL_HTTP_TOKEN` environment +variable or to pass it directly using the `-token=` command parameter. + +If you lost the management token in the outage, you can follow [Reset Access Control List (ACL) system](/consul/docs/secure/acl/reset) to generate a new one. + +First, retrieve the tokens available in the datacenter. + +```shell-session +$ consul acl token list + +... + +AccessorID: 6e5516f1-c29d-4503-82bc-016f7957a5c9 +Description: consul-server-0 agent token +Local: false +Create Time: 2025-09-25 15:31:42.146542875 +0000 UTC +Legacy: false +Policies: + 036c181a-1afe-4a6e-bdb1-2d553f36327d - acl-policy-server-node + +... +``` + +Then, retrieve the token using the `AccessorID`. + +```shell-session +$ consul acl token read -id 6e5516f1-c29d-4503-82bc-016f7957a5c9 + +AccessorID: 6e5516f1-c29d-4503-82bc-016f7957a5c9 +SecretID: e26bd23e-5edd-4aa4-bf7d-3ef5963e0ec0 +Description: consul-server-0 agent token +Local: false +Create Time: 2025-09-25 15:31:42.146542875 +0000 UTC +Policies: + 036c181a-1afe-4a6e-bdb1-2d553f36327d - acl-policy-server-node +``` + +Finally, apply the token to the server. + +```shell-session +$ consul acl set-agent-token agent e26bd23e-5edd-4aa4-bf7d-3ef5963e0ec0 + +ACL token "agent" set successfully +``` + +You will have to set the token for all the server nodes in order to get them able to re-join the datacenter successfully. Depending on your configuration you might have different tokens for each server or re-use the same token for all server agents but in both cases the token needs to be set on all server agents otherwise they will not be able to successfully join the datacenter. + + +### Perform a rolling restart of the servers + +After the snapshot is restored and the tokens have been set on the nodes, you will observe errors in the server logs about duplicate node ids. This happens because the servers received new node ids when they were reinstalled, and these node ids are different from the ones stored in the snapshot. + + + +```log +... +[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "88855b78-1459-4d03-aa88-a7078a3798f0": Node name consul-server-0 is reserved by node a12b2c56-7a94-4ea2-b29b-ca8f48139c77 with name consul-server-0 (172.20.0.10)" +[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "3d2df283-109b-4595-9279-d274a3c225ba": Node name consul-server-1 is reserved by node 6a361f2f-4e1e-4ee2-a836-20a7d85eb9e9 with name consul-server-1 (172.20.0.9)" +[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "39dbf0d7-51a9-4b8a-a4cc-5a937e0e405f": Node name consul-server-2 is reserved by node 520a29ee-43e0-4d50-89e5-df72d8746c92 with name consul-server-2 (172.20.0.14)" +... +``` + + + +To resolve these errors, perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. Once servers are restarted, the node ids will be set to the expected value and this will resolve the errors in the logs. + + + +For more information on this error and for more ways to resolve it, refer to [Snapshot restore error](/consul/docs/error-messages/consul#snapshot-restore-error). + + + +### Perform a rolling restart of the clients + +The same log errors will be present on the clients. After completing the server restarts, perform the same operations on the clients to resolve the log errors. + +## Restore and validate federation + +If you have a federated environment, after the primary datacenter restore it is possible that the IP addresses of the Consul server agents changed. + +Depending on the configuration of your secondary datacenters' server agents, you might need to re-establish federation by updating the server configuration. + +Refer to [Loss of federation due to primary datacenter restore.](/consul/docs/manage/disaster-recovery/restore-federated#loss-of-federation-due-to-primary-datacenter-restore) for more information on this. + + +## Additional guidance + +To familiarize with the concepts mentioned in this page you can try our tutorials for disaster recovery: + +- [Disaster recovery for Consul clusters](/consul/tutorials/operate-consul/recovery-outage). +- [Disaster Recovery for Consul on Kubernetes](/consul/tutorials/production-kubernetes/kubernetes-disaster-recovery). diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json index 04d1e1db9ad1..2d996d71097d 100644 --- a/website/data/docs-nav-data.json +++ b/website/data/docs-nav-data.json @@ -906,8 +906,20 @@ "title": "Backup and restore", "path": "manage/disaster-recovery/backup-restore" }, + { + "title": "Disaster preparation strategy", + "path": "manage/disaster-recovery/disaster-preparation" + }, + { + "title": "Restore primary datacenter", + "path": "manage/disaster-recovery/restore-primary" + }, { "title": "Restore federated datacenters", + "path": "manage/disaster-recovery/restore-federated" + }, + { + "title": "Old content", "path": "manage/disaster-recovery/federation" }, { From 4d3f638a945451c932f6f4c0a0021e5a29a3bfc3 Mon Sep 17 00:00:00 2001 From: danielehc Date: Thu, 25 Sep 2025 17:12:41 +0200 Subject: [PATCH 2/7] Remove old data and add redirects --- .../manage/disaster-recovery/federation.mdx | 341 -- website/data/docs-nav-data.json | 4 - website/redirects.js | 5223 ++++++++++------- 3 files changed, 2950 insertions(+), 2618 deletions(-) delete mode 100644 website/content/docs/manage/disaster-recovery/federation.mdx diff --git a/website/content/docs/manage/disaster-recovery/federation.mdx b/website/content/docs/manage/disaster-recovery/federation.mdx deleted file mode 100644 index 84badf0d7368..000000000000 --- a/website/content/docs/manage/disaster-recovery/federation.mdx +++ /dev/null @@ -1,341 +0,0 @@ ---- -layout: docs -page_title: Disaster recovery for WAN-federated datacenters -description: >- - Recover from losing the primary datacenter in a federated Consul environment. Prepare for Consul disaster recovery using best practice recommendations. Implement a backup plan and a disaster recovery plan (DRP). ---- - -# Disaster recovery for WAN-federated datacenters - -This page describes the process to prepare for an outage event for a federated Consul datacenter, and the process to restore a federated Consul datacenter in case of outage. - -## Overview - -Disaster recovery is an important part of business continuity planning. When operating a WAN federated Consul cluster, composed of multiple datacenters, you need to prepare a strategy that includes many outage possibilities, including a complete outage of one of your physical datacenters, or a cloud provider outage that might make one of the components of your environment temporarily or permanently unavailable. - -Each outage possibility can have different implications, depending on your configuration, but there are strategies that can help you mitigate the damage in case of disaster. - -This page helps with the creation of a recovery strategy from a quorum loss event up to the complete loss of your primary datacenter. - -The process can be summarized in the following phases: - -1. Follow the [disaster preparation strategy](#disaster-preparation-strategy) to reduce risks and be prepared for all possible outage cases. -1. Identify the kind of outage event occurred for the primary datacenter. -1. Restore primary datacenter. -1. Restore and validate datacenter federation. - -## Prerequisites - -The following instructions require two or more wide area network (WAN) federated Consul datacenters with access control list (ACL) replication enabled. - -If you have not met these deployment requirements, refer to the follow documentation to set up your datacenters: - -- [Deployment Guide](/consul/tutorials/production-deploy/deployment-guide) -- [Securing Consul with ACLs](/consul/docs/secure/acl) -- [Basic Federation with WAN Gossip](/consul/docs/east-west/wan-federation/vms) -- [ACL Replication for Multiple Datacenters](/consul/docs/secure/acl/token/federation) - -If you are using Consul's service mesh in your WAN-Federated environment, you should also set [`enable_central_service_config = true`](/consul/docs/reference/agent/configuration-file/general#enable_central_service_config) on your Consul clients, which allows you to centrally configure the sidecar and mesh gateway proxies. - -To make use of the mesh gateway functionality, refer to the [Mesh gateways ](/consul/docs/east-west/mesh-gateway) documentation. - -## Disaster preparation strategy - - - -### Use a recommended architecture - -Not every outage has the same level of impact. A lot of the resiliency of -your Consul federation will rely on proper configuration and the -adoption of a recommended architecture. - -Refer to [Consul Reference Architecture](/consul/tutorials/production-deploy/reference-architecture) to learn the recommended configurations for your -Consul datacenter. - -### Automate your deployment - -Re-deploying an entire datacenter after an outage is a non-trivial operation -that might require a considerable amount of time. You can reduce the time to recover -by following Infrastructure as Code (IaC) principles and using -tools such as Terraform and Vault to help you in the deployment and recovery process. - -The amount of downtime you experience from the loss of your primary datacenter is -directly proportional to the amount of time it takes you to deploy a new -primary datacenter. Reducing the deployment time via automation will not only -help you standardize the process and reduce errors, but also reduce the -downtime you will experience after a datacenter loss. - -### Have a backup strategy - -A Consul datacenter's state is more than just the initial configuration, it -includes data that is generated during normal operations such as KV entries, ACL -tokens, and intentions. When your datacenter fails, this information is lost and -cannot be manually recreated without a backup. For example you may keep you -Consul agent and service configuration in version control, however, you will not -be able to as easily recover security credentials since credentials generated -during the installation process are now different from the ones that were -present in the datacenter that was “lost” in the disaster. - -The process of then updating every secret in Consul to reflect the updated value -is tedious, error prone and hard to debug. - -Restoring from a snapshot ensures all the intentions, KV entries and ACL tokens -are reintroduced. - -You can follow [Backup Consul Data and State](/consul/tutorials/production-deploy/backup-and-restore) to learn how to perform a snapshot of your Consul -datacenter to use in case of disaster. - -### Have a TLS certificate distribution process in place - -Certificates are stored on the agent disk and not saved in a snapshot. This -means you will have to re-generate them. - -Consul comes equipped with a command ,`consul tls`, that permits you to generate -TLS certificates for the agents. This simplifies the automation of deployment by -giving you the ability to generate a CA and TLS certificates as part of the -process. - -As an alternative, we suggest you use Vault as a CA and TLS certificate generator to help you automate -the process. You can follow [Generate mTLS Certificates for Consul with Vault](/consul/tutorials/vault-secure/vault-pki-consul-secure-tls) to learn how to -automate certificate generation and distribution for your Consul server agents. - -### Adopt an adequate ACL down policy - -When your primary datacenter is down you lose your ability to validate -ACL policies. To mitigate this Consul has a configuration parameter, -`down_policy`, that tells Consul which strategy to follow if ACLs -cannot be validated against the primary datacenter. - -By default, Consul adopts the `extend-cache` approach, meaning that in case of an -outage Consul will allow cached ACL objects to be used, ignoring their TTL -values. If a non-cached ACL is used, `extend-cache` acts like `deny`. - -If you changed the `down_policy` to the more restrictive value of `deny`, you -will be impacted more severely from the outage, since -all ACL protected operations in the secondary datacenter will be denied until the primary datacenter is restored. - -## Outage event in the primary datacenter - -Depending on your configuration, multiple levels of outage can occur. - -This tutorial covers how to handle outages that render the primary -datacenter unable to serve requests, including service discovery requests to Consul DNS and intention validation. This can happen in many possible ways, but -the two extremes of the spectrum are the following: - -* **Loss of quorum in the primary datacenter** -This is an outage where the datacenter has less than *(N/2)+1* servers available, where N is the total number -of servers. While some of the nodes are unaffected, not enough are available to form a quorum. -* **Complete loss of the primary datacenter** -This is either a disaster event that completely wipes an entire facility or a -major outage of your cloud provider. - -### Loss of quorum in the primary datacenter - -In the scenario where you have lost enough servers in your primary datacenter that a quorum -cannot be reached, you will experience the same level service failure as if the whole -datacenter is unavailable. - -If the outage is limited to the server nodes, or did not severely impact your -client fleet, it might not be practical to rebuild the whole datacenter only to -re-establish a quorum. - -In this scenario, you can follow the [Outage Recovery](/consul/tutorials/datacenter-operations/recovery-outage) -tutorial to restore your server nodes and make sure they are able to reform -the raft cluster and elect a leader. - -Once the raft cluster is reformed, and the datacenter is again operational, -you can now restart any client agents that might have been affected by the -outage. - -### Complete loss of the primary datacenter - -The worst case scenario in a federated environment is the loss of the primary -datacenter. - -In this scenario, the course of action should aim to restore the lost datacenter as -quickly as possible. The following sections in the tutorial will guide you -through the necessary steps to perform a restore and to make sure all -functionality is re-established. - -## Restore primary datacenter - -The steps necessary to restore your environment after a full outage of your -primary datacenter are the following: - -* Restore your primary datacenter -* Restore the last snapshot to the newly recovered datacenter -* Apply agent tokens to the servers -* Perform a rolling restart of the servers in the primary datacenter -* Perform a rolling restart of the clients in the primary datacenter -* Restore and validate federation - -### Restore datacenter nodes - -You can use the same process you used for the initial deploy of your Consul -datacenter. - -To make sure the new deployment is able to communicate with the secondary -datacenter, you will need to ensure that you are using the same - -* CA certificate -* CA key -* Gossip encryption key - -as the ones you used for the pre-existing deployment. - -### Restore snapshot - -After the datacenter has been restored, you can restore the snapshot to it using -the `consul snapshot` command. - -```shell-session -$ consul snapshot restore -token= backup.snap - -Restored snapshot -``` - - - - The `token` used for the snapshot restore procedure needs to be a -token valid for the newly restored datacenter. If your restored datacenter does -not have ACL enabled, you can restore the snapshot without a token. - - - -### Set Consul ACL agent tokens - -The newly restarted nodes will now be missing the ACL tokens needed to -successfully join the datacenter. Once you restored the ACL system with the -snapshot restore you will be able to set the tokens for the different nodes -using the `consul acl` command. - - - - The following operations require a token with `acl = write` -privileges. Also, after the snapshot is restored the ACL system will now -contain the previous tokens created before the outage. You can use the any -management token you had in your datacenter before the outage. To setup the -token for the request you can either use the `CONSUL_HTTP_TOKEN` environment -variable or to pass it directly using the `-token=` command parameter. - - - -First retrieve the tokens available in the datacenter. - -```shell-session -$ consul acl token list - -... - -AccessorID: 694f15e2-b8f9-c5dd-cb92-8d7bc529df9f -Description: server-1 agent token -Local: false -Create Time: 2021-01-07 21:38:25.331288761 +0000 UTC -Legacy: false -Policies: - a660e45f-3f6e-501c-1303-3d39a83f6ff9 - acl-policy-server-node - -... -``` - -Then retrieve the token using the `AccessorID`. - -```shell-session -$ consul acl token read -id 694f15e2-b8f9-c5dd-cb92-8d7bc529df9f - -AccessorID: 694f15e2-b8f9-c5dd-cb92-8d7bc529df9f -SecretID: 237f1a27-3399-ebf0-29f1-9828d89159b1 -Description: server-1 agent token -Local: false -Create Time: 2021-01-07 21:38:25.331288761 +0000 UTC -Policies: - a660e45f-3f6e-501c-1303-3d39a83f6ff9 - acl-policy-server-node -``` - - - - You will have to set the token on all the server nodes -in order to get them able to re-join the datacenter successfully. Depending on -your configuration you might have different tokens for each server or re-use the -same token for all server agents but in both cases the token needs to be set on -all agents otherwise they will not be able to successfully join the datacenter. - - - -Finally apply the token to the server. - -```shell-session -$ consul acl set-agent-token agent 237f1a27-3399-ebf0-29f1-9828d89159b1 - -ACL token "agent" set successfully -``` - -### Perform a rolling restart of the servers - -After the snapshot is restored and the tokens have been set on the nodes, you -will observe errors in the server logs about duplicate node ids. This happens -because the servers received new node ids when they were reinstalled, and these node ids are different from -the ones stored in the snapshot. - -```log hideClipboard -... -[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "835aa73d-78e9-ba63-d2da-8bbfba1329a7": Node name server-1 is reserved by node 4d2d0bfa-6d2d-c373-fff2-16ac612dca7a with name server-1 (172.19.0.3)" -[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "49be2708-2f0b-0a1b-0069-9e1420fa251b": Node name server-2 is reserved by node ea086564-8d58-2918-682d-9092651f2157 with name server-2 (172.19.0.4)" -[WARN] agent.fsm: EnsureRegistration failed: error="failed inserting node: Error while renaming Node ID: "3398cdca-dc18-a786-e3a6-6f7deb5dcd0d": Node name server-3 is reserved by node d7529d1e-6924-41d8-fc40-fa0f131cc558 with name server-3 (172.19.0.5)" -... -``` - -To resolve these errors, you need to perform a `consul leave` on each server and -then start the server again. - -Once servers are restarted, the node ids will be set to the expected value -and this will resolve the errors in the logs. - -### Perform a rolling restart of the clients - -The same log errors will be present on the clients. After completing the server -restarts, you must perform the same operations on the clients to resolve the log -errors. - -## Restore and validate federation - -Once restored, it is possible that the new servers will have a different IP than -the one used to wan join them from the secondary datacenter. In that scenario, the -federation will be broken. - -To verify the federation you can use `consul members` on the primary datacenter. - -```shell-session -$ consul members -wan -Node Address Status Type Build Protocol DC Segment -server-1.primary 172.19.0.3:8302 alive server 1.9.0 2 primary -server-2.primary 172.19.0.4:8302 alive server 1.9.0 2 primary -server-3.primary 172.19.0.5:8302 alive server 1.9.0 2 primary -``` - -To restore the federation you must perform a rolling restart of the secondary -datacenter servers using the new primary datacenter servers' IP in the -`retry-join-wan` parameter. - -After the rolling restart, you should be able to observe all the servers in the -`consul members` command output. - -```shell-session -$ consul members -wan -Node Address Status Type Build Protocol DC Segment -server-1.secondary 172.19.0.7:8302 alive server 1.9.0 2 secondary -server-2.secondary 172.19.0.8:8302 alive server 1.9.0 2 secondary -server-3.secondary 172.19.0.9:8302 alive server 1.9.0 2 secondary -server-1.primary 172.19.0.3:8302 alive server 1.9.0 2 primary -server-2.primary 172.19.0.4:8302 alive server 1.9.0 2 primary -server-3.primary 172.19.0.5:8302 alive server 1.9.0 2 primary -``` - -## Next steps - -In this tutorial, you learned how to restore your federated environment in the -event of a full outage of your primary datacenter. - -You can follow [Provide Fault Tolerance with Redundancy Zones](/consul/tutorials/operate-consul/redundancy-zones) to learn how Consul -Enterprise helps you in making the deployment more robust by using different -zones (such as AWS Availability Zones) for your Consul deployment. diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json index 2d996d71097d..67fbfcd10145 100644 --- a/website/data/docs-nav-data.json +++ b/website/data/docs-nav-data.json @@ -918,10 +918,6 @@ "title": "Restore federated datacenters", "path": "manage/disaster-recovery/restore-federated" }, - { - "title": "Old content", - "path": "manage/disaster-recovery/federation" - }, { "title": "Reset ACL system", "href": "secure/acl/reset" diff --git a/website/redirects.js b/website/redirects.js index 77194ca56f18..691d3a2a8d68 100644 --- a/website/redirects.js +++ b/website/redirects.js @@ -11,250 +11,258 @@ module.exports = [ { - source: "/consul/docs/connect/cluster-peering/create-manage-peering", + source: '/consul/docs/connect/cluster-peering/create-manage-peering', destination: - "/consul/docs/connect/cluster-peering/usage/establish-cluster-peering", + '/consul/docs/connect/cluster-peering/usage/establish-cluster-peering', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/usage/establish-peering", + source: '/consul/docs/connect/cluster-peering/usage/establish-peering', destination: - "/consul/docs/connect/cluster-peering/usage/establish-cluster-peering", + '/consul/docs/connect/cluster-peering/usage/establish-cluster-peering', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/k8s", - destination: "/consul/docs/k8s/connect/cluster-peering/tech-specs", + source: '/consul/docs/connect/cluster-peering/k8s', + destination: '/consul/docs/k8s/connect/cluster-peering/tech-specs', permanent: true, }, { - source: "/consul/docs/connect/intentions#intention-management-permissions", + source: '/consul/docs/connect/intentions#intention-management-permissions', destination: `/consul/docs/connect/intentions/create-manage-intentions#acl-requirements`, permanent: true, }, { - source: "/consul/docs/connect/intentions#intention-basics", + source: '/consul/docs/connect/intentions#intention-basics', destination: `/consul/docs/connect/intentions`, permanent: true, }, { - source: "/consul/docs/connect/transparent-proxy", - destination: "/consul/docs/k8s/connect/transparent-proxy", + source: '/consul/docs/connect/transparent-proxy', + destination: '/consul/docs/k8s/connect/transparent-proxy', permanent: true, }, { - source: "/consul/docs/agent/limits/init-rate-limits", - destination: "/consul/docs/agent/limits/usage/init-rate-limits", + source: '/consul/docs/agent/limits/init-rate-limits', + destination: '/consul/docs/agent/limits/usage/init-rate-limits', permanent: true, }, { - source: "/consul/docs/agent/limits/set-global-traffic-rate-limits", + source: '/consul/docs/agent/limits/set-global-traffic-rate-limits', destination: - "/consul/docs/agent/limits/usage/set-global-traffic-rate-limits", + '/consul/docs/agent/limits/usage/set-global-traffic-rate-limits', permanent: true, }, { source: - "/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-peers", + '/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-peers', destination: - "/consul/docs/connect/cluster-peering/usage/establish-cluster-peering", + '/consul/docs/connect/cluster-peering/usage/establish-cluster-peering', permanent: true, }, { - source: "/consul/docs/enterprise/sentinel", + source: '/consul/docs/enterprise/sentinel', destination: - "/consul/docs/dynamic-app-config/kv#using-sentinel-to-apply-policies-for-consul-kv", + '/consul/docs/dynamic-app-config/kv#using-sentinel-to-apply-policies-for-consul-kv', permanent: true, }, { source: - "/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-datacenters", - destination: "/consul/docs/k8s/deployment-configurations/multi-cluster", + '/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-datacenters', + destination: '/consul/docs/k8s/deployment-configurations/multi-cluster', permanent: true, }, { - source: "/consul/docs/connect/registration/service-registration", - destination: "/consul/docs/connect/proxies/proxy-config-reference", + source: '/consul/docs/connect/registration/service-registration', + destination: '/consul/docs/connect/proxies/proxy-config-reference', permanent: true, }, { - source: "/consul/docs/connect/registration", - destination: "/consul/docs/connect/proxies", + source: '/consul/docs/connect/registration', + destination: '/consul/docs/connect/proxies', permanent: true, }, { - source: "/consul/docs/connect/registration/sidecar-service", - destination: "/consul/docs/connect/proxies/deploy-sidecar-services", + source: '/consul/docs/connect/registration/sidecar-service', + destination: '/consul/docs/connect/proxies/deploy-sidecar-services', permanent: true, }, { - source: "/consul/docs/ecs/terraform/install", - destination: "/consul/docs/ecs/deploy/terraform", + source: '/consul/docs/ecs/terraform/install', + destination: '/consul/docs/ecs/deploy/terraform', permanent: true, }, { - source: "/consul/docs/ecs/terraform/secure-configuration", - destination: "/consul/docs/ecs/deploy/terraform", + source: '/consul/docs/ecs/terraform/secure-configuration', + destination: '/consul/docs/ecs/deploy/terraform', permanent: true, }, { - source: "/consul/docs/ecs/terraform/migrate-existing-tasks", - destination: "/consul/docs/ecs/deploy/migrate-existing-tasks", + source: '/consul/docs/ecs/terraform/migrate-existing-tasks', + destination: '/consul/docs/ecs/deploy/migrate-existing-tasks', permanent: true, }, { - source: "/consul/docs/ecs/manual/install", - destination: "/consul/docs/ecs/deploy/manual", + source: '/consul/docs/ecs/manual/install', + destination: '/consul/docs/ecs/deploy/manual', permanent: true, }, { - source: "/consul/docs/ecs/manual/secure-configuration", - destination: "/consul/docs/ecs/deploy/manual", + source: '/consul/docs/ecs/manual/secure-configuration', + destination: '/consul/docs/ecs/deploy/manual', permanent: true, }, { - source: "/consul/docs/ecs/manual/acl-controller", - destination: "/consul/docs/ecs/deploy/manual", + source: '/consul/docs/ecs/manual/acl-controller', + destination: '/consul/docs/ecs/deploy/manual', permanent: true, }, { - source: "/consul/docs/ecs/task-resource-usage", - destination: "/consul/docs/ecs/tech-specs", + source: '/consul/docs/ecs/task-resource-usage', + destination: '/consul/docs/ecs/tech-specs', permanent: true, }, { - source: "/consul/docs/ecs/requirements", - destination: "/consul/docs/ecs/tech-specs", + source: '/consul/docs/ecs/requirements', + destination: '/consul/docs/ecs/tech-specs', permanent: true, }, { - source: "/consul/docs/ecs/configuration-reference", - destination: "/consul/docs/ecs/reference/configuration-reference", + source: '/consul/docs/ecs/configuration-reference', + destination: '/consul/docs/ecs/reference/configuration-reference', permanent: true, }, { - source: "/consul/docs/ecs/compatibility", - destination: "/consul/docs/ecs/reference/compatibility", + source: '/consul/docs/ecs/compatibility', + destination: '/consul/docs/ecs/reference/compatibility', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/usage", - destination: "/consul/docs/connect/gateways/api-gateway/deploy/listeners-vms", + source: '/consul/docs/connect/gateways/api-gateway/usage', + destination: + '/consul/docs/connect/gateways/api-gateway/deploy/listeners-vms', permanent: true, }, { - source: "/consul/docs/api-gateway", - destination: "/consul/docs/connect/gateways/api-gateway", + source: '/consul/docs/api-gateway', + destination: '/consul/docs/connect/gateways/api-gateway', permanent: true, }, { - source: "/consul/docs/api-gateway/install", - destination: "/consul/docs/connect/gateways/api-gateway/install-k8s", + source: '/consul/docs/api-gateway/install', + destination: '/consul/docs/connect/gateways/api-gateway/install-k8s', permanent: true, }, { - source: "/consul/docs/api-gateway/usage/reroute-http-requests", - destination: "/consul/docs/connect/gateways/api-gateway/define-routes/reroute-http-requests", + source: '/consul/docs/api-gateway/usage/reroute-http-requests', + destination: + '/consul/docs/connect/gateways/api-gateway/define-routes/reroute-http-requests', permanent: true, }, { - source: "/consul/docs/api-gateway/usage/route-to-peered-services", - destination: "/consul/docs/connect/gateways/api-gateway/define-routes/route-to-peered-services", + source: '/consul/docs/api-gateway/usage/route-to-peered-services', + destination: + '/consul/docs/connect/gateways/api-gateway/define-routes/route-to-peered-services', permanent: true, }, { - source: "/consul/docs/api-gateway/usage/errors", - destination: "/consul/docs/connect/gateways/api-gateway/errors", + source: '/consul/docs/api-gateway/usage/errors', + destination: '/consul/docs/connect/gateways/api-gateway/errors', permanent: true, }, { - source: "/consul/docs/api-gateway/usage/usage", - destination: "/consul/docs/connect/gateways/api-gateway/deploy/listeners-k8s", + source: '/consul/docs/api-gateway/usage/usage', + destination: + '/consul/docs/connect/gateways/api-gateway/deploy/listeners-k8s', permanent: true, }, { - source: "/consul/docs/api-gateway/upgrades", - destination: "/consul/docs/connect/gateways/api-gateway/upgrades-k8s", + source: '/consul/docs/api-gateway/upgrades', + destination: '/consul/docs/connect/gateways/api-gateway/upgrades-k8s', permanent: true, }, { - source: "/consul/docs/api-gateway/configuration", - destination: "/consul/docs/connect/gateways/api-gateway/configuration", + source: '/consul/docs/api-gateway/configuration', + destination: '/consul/docs/connect/gateways/api-gateway/configuration', permanent: true, }, { - source: "/consul/docs/api-gateway/configuration/:slug*", - destination: "/consul/docs/connect/gateways/api-gateway/configuration/:slug*", + source: '/consul/docs/api-gateway/configuration/:slug*', + destination: + '/consul/docs/connect/gateways/api-gateway/configuration/:slug*', permanent: true, }, { - source: "/consul/docs/connect/failover", - destination: "/consul/docs/connect/manage-traffic/failover", + source: '/consul/docs/connect/failover', + destination: '/consul/docs/connect/manage-traffic/failover', permanent: true, }, { - source: "/consul/docs/connect/l7", - destination: "/consul/docs/connect/manage-traffic", + source: '/consul/docs/connect/l7', + destination: '/consul/docs/connect/manage-traffic', permanent: true, }, { - source: "/consul/docs/connect/l7/:slug*", - destination: "/consul/docs/connect/manage-traffic/:slug*", + source: '/consul/docs/connect/l7/:slug*', + destination: '/consul/docs/connect/manage-traffic/:slug*', permanent: true, }, { - source: "/consul/docs/v1.8.x/connect/config-entries/:slug*", - destination: "/consul/docs/v1.8.x/agent/config-entries/:slug*", + source: '/consul/docs/v1.8.x/connect/config-entries/:slug*', + destination: '/consul/docs/v1.8.x/agent/config-entries/:slug*', permanent: true, }, { - source: "/consul/docs/architecture/catalog/v1/:slug*", - destination: "/consul/docs/architecture/catalog/:slug*", + source: '/consul/docs/architecture/catalog/v1/:slug*', + destination: '/consul/docs/architecture/catalog/:slug*', permanent: true, }, { - source: "/consul/docs/:version(v1.(?:8|9|10|11|12|13|14|15|16|17).x)/architecture/catalog/:slug*", - destination: "/consul/docs/:version/architecture/catalog/v1/:slug*", + source: + '/consul/docs/:version(v1.(?:8|9|10|11|12|13|14|15|16|17).x)/architecture/catalog/:slug*', + destination: '/consul/docs/:version/architecture/catalog/v1/:slug*', permanent: true, }, { - source: "/consul/docs/nia/network-drivers/terraform-cloud", - destination: "/consul/docs/nia/network-drivers/hcp-terraform", + source: '/consul/docs/nia/network-drivers/terraform-cloud', + destination: '/consul/docs/nia/network-drivers/hcp-terraform', permanent: true, }, { - source: "/consul/docs/:version(v1.(?:8|9|10|11|12|13|14|15|16|17).x)/nia/network-drivers/hcp-terraform", - destination: "/consul/docs/:version/nia/network-drivers/terraform-cloud", + source: + '/consul/docs/:version(v1.(?:8|9|10|11|12|13|14|15|16|17).x)/nia/network-drivers/hcp-terraform', + destination: '/consul/docs/:version/nia/network-drivers/terraform-cloud', permanent: true, }, { - source: "/consul/docs/k8s/multiport/:slug*", - destination: "/consul/docs/architecture/catalog#v2-catalog", + source: '/consul/docs/k8s/multiport/:slug*', + destination: '/consul/docs/architecture/catalog#v2-catalog', permanent: true, }, { - source: "/consul/docs/architecture/v2/:slug*", - destination: "/consul/docs/architecture/catalog#v2-catalog", + source: '/consul/docs/architecture/v2/:slug*', + destination: '/consul/docs/architecture/catalog#v2-catalog', permanent: true, }, { - source: "/consul/commands/resource/:slug*", - destination: "/consul/docs/architecture/catalog#v2-catalog", + source: '/consul/commands/resource/:slug*', + destination: '/consul/docs/architecture/catalog#v2-catalog', permanent: true, }, { - source: "/consul/docs/k8s/dns", - destination: "/consul/docs/k8s/dns/enable", + source: '/consul/docs/k8s/dns', + destination: '/consul/docs/k8s/dns/enable', permanent: true, }, { - source: "/consul/docs/:version(v1.(?:11|12|13|14|15|16|17|18).x)/k8s/dns/enable", - destination: "/consul/docs/:version/k8s/dns", + source: + '/consul/docs/:version(v1.(?:11|12|13|14|15|16|17|18).x)/k8s/dns/enable', + destination: '/consul/docs/:version/k8s/dns', permanent: true, }, { - source: "/consul/api-docs/hcp-link", - destination: "/hcp/docs/consul/concepts/consul-central", + source: '/consul/api-docs/hcp-link', + destination: '/hcp/docs/consul/concepts/consul-central', permanent: true, }, /////////////////////////////////// @@ -265,4274 +273,4943 @@ module.exports = [ /////////////////////////////////// { - source: "/consul/docs/agent", - destination: "/consul/docs/fundamentals/agent", + source: '/consul/docs/agent', + destination: '/consul/docs/fundamentals/agent', permanent: true, }, { - source: "/consul/docs/agent/config", - destination: "/consul/docs/fundamentals/agent", + source: '/consul/docs/agent/config', + destination: '/consul/docs/fundamentals/agent', permanent: true, }, { - source: "/consul/docs/agent/config-entries", - destination: "/consul/docs/fundamentals/config-entry", + source: '/consul/docs/agent/config-entries', + destination: '/consul/docs/fundamentals/config-entry', permanent: true, }, { - source: "/consul/docs/agent/config/cli-flags", - destination: "/consul/commands/agent", + source: '/consul/docs/agent/config/cli-flags', + destination: '/consul/commands/agent', permanent: true, }, { - source: "/consul/docs/agent/config/config-files", - destination: "/consul/docs/reference/agent/configuration-file", + source: '/consul/docs/agent/config/config-files', + destination: '/consul/docs/reference/agent/configuration-file', permanent: true, }, { - source: "/consul/docs/agent/limits", - destination: "/consul/docs/manage/rate-limit", + source: '/consul/docs/agent/limits', + destination: '/consul/docs/manage/rate-limit', permanent: true, }, { - source: "/consul/docs/agent/limits/usage/init-rate-limits", - destination: "/consul/docs/manage/rate-limit/initialize", + source: '/consul/docs/agent/limits/usage/init-rate-limits', + destination: '/consul/docs/manage/rate-limit/initialize', permanent: true, }, { - source: "/consul/docs/agent/limits/usage/limit-request-rates-from-ips", - destination: "/consul/docs/manage/rate-limit/source", + source: '/consul/docs/agent/limits/usage/limit-request-rates-from-ips', + destination: '/consul/docs/manage/rate-limit/source', permanent: true, }, { - source: "/consul/docs/agent/limits/usage/monitor-rate-limits", - destination: "/consul/docs/manage/rate-limit/monitor", + source: '/consul/docs/agent/limits/usage/monitor-rate-limits', + destination: '/consul/docs/manage/rate-limit/monitor', permanent: true, }, { - source: "/consul/docs/agent/limits/usage/set-global-traffic-rate-limits", - destination: "/consul/docs/manage/rate-limit/global", + source: '/consul/docs/agent/limits/usage/set-global-traffic-rate-limits', + destination: '/consul/docs/manage/rate-limit/global', permanent: true, }, { - source: "/consul/docs/agent/monitor/alerts", - destination: "/consul/docs/monitor/alerts", + source: '/consul/docs/agent/monitor/alerts', + destination: '/consul/docs/monitor/alerts', permanent: true, }, { - source: "/consul/docs/agent/monitor/components", - destination: "/consul/docs/monitor", + source: '/consul/docs/agent/monitor/components', + destination: '/consul/docs/monitor', permanent: true, }, { - source: "/consul/docs/agent/monitor/telemetry", - destination: "/consul/docs/monitor/telemetry/agent", + source: '/consul/docs/agent/monitor/telemetry', + destination: '/consul/docs/monitor/telemetry/agent', permanent: true, }, { - source: "/consul/docs/agent/sentinel", - destination: "/consul/docs/secure/acl/sentinel", + source: '/consul/docs/agent/sentinel', + destination: '/consul/docs/secure/acl/sentinel', permanent: true, }, { - source: "/consul/docs/agent/wal-logstore", - destination: "/consul/docs/deploy/server/wal", + source: '/consul/docs/agent/wal-logstore', + destination: '/consul/docs/deploy/server/wal', permanent: true, }, { - source: "/consul/docs/agent/wal-logstore/enable", - destination: "/consul/docs/deploy/server/wal", + source: '/consul/docs/agent/wal-logstore/enable', + destination: '/consul/docs/deploy/server/wal', permanent: true, }, { - source: "/consul/docs/agent/wal-logstore/monitoring", - destination: "/consul/docs/deploy/server/wal/monitor-raft", + source: '/consul/docs/agent/wal-logstore/monitoring', + destination: '/consul/docs/deploy/server/wal/monitor-raft', permanent: true, }, { - source: "/consul/docs/agent/wal-logstore/revert-to-boltdb", - destination: "/consul/docs/deploy/server/wal/revert-boltdb", + source: '/consul/docs/agent/wal-logstore/revert-to-boltdb', + destination: '/consul/docs/deploy/server/wal/revert-boltdb', permanent: true, }, { - source: "/consul/docs/architecture", - destination: "/consul/docs/architecture/control-plane", + source: '/consul/docs/architecture', + destination: '/consul/docs/architecture/control-plane', permanent: true, }, { - source: "/consul/docs/architecture/anti-entropy", - destination: "/consul/docs/concept/consistency", + source: '/consul/docs/architecture/anti-entropy', + destination: '/consul/docs/concept/consistency', permanent: true, }, { - source: "/consul/docs/architecture/capacity-planning", - destination: "/consul/docs/reference/architecture/capacity", + source: '/consul/docs/architecture/capacity-planning', + destination: '/consul/docs/reference/architecture/capacity', permanent: true, }, { - source: "/consul/docs/architecture/catalog", - destination: "/consul/docs/concept/catalog", + source: '/consul/docs/architecture/catalog', + destination: '/consul/docs/concept/catalog', permanent: true, }, { - source: "/consul/docs/architecture/consensus", - destination: "/consul/docs/concept/consensus", + source: '/consul/docs/architecture/consensus', + destination: '/consul/docs/concept/consensus', permanent: true, }, { - source: "/consul/docs/architecture/gossip", - destination: "/consul/docs/concept/gossip", + source: '/consul/docs/architecture/gossip', + destination: '/consul/docs/concept/gossip', permanent: true, }, { - source: "/consul/docs/architecture/improving-consul-resilience", - destination: "/consul/docs/concept/reliability", + source: '/consul/docs/architecture/improving-consul-resilience', + destination: '/consul/docs/concept/reliability', permanent: true, }, { - source: "/consul/docs/architecture/jepsen", - destination: "/consul/docs/concept/consistency", + source: '/consul/docs/architecture/jepsen', + destination: '/consul/docs/concept/consistency', permanent: true, }, { - source: "/consul/docs/architecture/scale", - destination: "/consul/docs/manage/scale", + source: '/consul/docs/architecture/scale', + destination: '/consul/docs/manage/scale', permanent: true, }, { - source: "/consul/docs/concepts/service-discovery", - destination: "/consul/docs/use-case/service-discovery", + source: '/consul/docs/concepts/service-discovery', + destination: '/consul/docs/use-case/service-discovery', permanent: true, }, { - source: "/consul/docs/concepts/service-mesh", - destination: "/consul/docs/use-case/service-mesh", + source: '/consul/docs/concepts/service-mesh', + destination: '/consul/docs/use-case/service-mesh', permanent: true, }, { - source: "/consul/docs/connect/ca", - destination: "/consul/docs/secure-mesh/certificate", + source: '/consul/docs/connect/ca', + destination: '/consul/docs/secure-mesh/certificate', permanent: true, }, { - source: "/consul/docs/connect/ca/aws", - destination: "/consul/docs/secure-mesh/certificate/acm", + source: '/consul/docs/connect/ca/aws', + destination: '/consul/docs/secure-mesh/certificate/acm', permanent: true, }, { - source: "/consul/docs/connect/ca/consul", - destination: "/consul/docs/secure-mesh/certificate/built-in", + source: '/consul/docs/connect/ca/consul', + destination: '/consul/docs/secure-mesh/certificate/built-in', permanent: true, }, { - source: "/consul/docs/connect/ca/vault", - destination: "/consul/docs/secure-mesh/certificate/vault", + source: '/consul/docs/connect/ca/vault', + destination: '/consul/docs/secure-mesh/certificate/vault', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering", - destination: "/consul/docs/east-west/cluster-peering", + source: '/consul/docs/connect/cluster-peering', + destination: '/consul/docs/east-west/cluster-peering', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/tech-specs", - destination: "/consul/docs/east-west/cluster-peering/tech-specs", + source: '/consul/docs/connect/cluster-peering/tech-specs', + destination: '/consul/docs/east-west/cluster-peering/tech-specs', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/usage/create-sameness-groups", - destination: "/consul/docs/multi-tenant/sameness-group/vm", + source: '/consul/docs/connect/cluster-peering/usage/create-sameness-groups', + destination: '/consul/docs/multi-tenant/sameness-group/vm', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/usage/establish-cluster-peering", - destination: "/consul/docs/east-west/cluster-peering/establish/vm", + source: + '/consul/docs/connect/cluster-peering/usage/establish-cluster-peering', + destination: '/consul/docs/east-west/cluster-peering/establish/vm', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/usage/manage-connections", - destination: "/consul/docs/east-west/cluster-peering/manage/vm", + source: '/consul/docs/connect/cluster-peering/usage/manage-connections', + destination: '/consul/docs/east-west/cluster-peering/manage/vm', permanent: true, }, { - source: "/consul/docs/connect/cluster-peering/usage/peering-traffic-management", - destination: "/consul/docs/manage-traffic/cluster-peering/vm", + source: + '/consul/docs/connect/cluster-peering/usage/peering-traffic-management', + destination: '/consul/docs/manage-traffic/cluster-peering/vm', permanent: true, }, { - source: "/consul/docs/connect/config-entries", - destination: "/consul/docs/fundamentals/config-entry", + source: '/consul/docs/connect/config-entries', + destination: '/consul/docs/fundamentals/config-entry', permanent: true, }, { - source: "/consul/docs/connect/config-entries/api-gateway", - destination: "/consul/docs/reference/config-entry/api-gateway", + source: '/consul/docs/connect/config-entries/api-gateway', + destination: '/consul/docs/reference/config-entry/api-gateway', permanent: true, }, { - source: "/consul/docs/connect/config-entries/control-plane-request-limit", - destination: "/consul/docs/reference/config-entry/control-plane-request-limit", + source: '/consul/docs/connect/config-entries/control-plane-request-limit', + destination: + '/consul/docs/reference/config-entry/control-plane-request-limit', permanent: true, }, { - source: "/consul/docs/connect/config-entries/exported-services", - destination: "/consul/docs/reference/config-entry/exported-services", + source: '/consul/docs/connect/config-entries/exported-services', + destination: '/consul/docs/reference/config-entry/exported-services', permanent: true, }, { - source: "/consul/docs/connect/config-entries/file-system-certificate", - destination: "/consul/docs/reference/config-entry/file-system-certificate", + source: '/consul/docs/connect/config-entries/file-system-certificate', + destination: '/consul/docs/reference/config-entry/file-system-certificate', permanent: true, }, { - source: "/consul/docs/connect/config-entries/http-route", - destination: "/consul/docs/reference/config-entry/http-route", + source: '/consul/docs/connect/config-entries/http-route', + destination: '/consul/docs/reference/config-entry/http-route', permanent: true, }, { - source: "/consul/docs/connect/config-entries/ingress-gateway", - destination: "/consul/docs/reference/config-entry/ingress-gateway", + source: '/consul/docs/connect/config-entries/ingress-gateway', + destination: '/consul/docs/reference/config-entry/ingress-gateway', permanent: true, }, { - source: "/consul/docs/connect/config-entries/inline-certificate", - destination: "/consul/docs/reference/config-entry/inline-certificate", + source: '/consul/docs/connect/config-entries/inline-certificate', + destination: '/consul/docs/reference/config-entry/inline-certificate', permanent: true, }, { - source: "/consul/docs/connect/config-entries/jwt-provider", - destination: "/consul/docs/reference/config-entry/jwt-provider", + source: '/consul/docs/connect/config-entries/jwt-provider', + destination: '/consul/docs/reference/config-entry/jwt-provider', permanent: true, }, { - source: "/consul/docs/connect/config-entries/mesh", - destination: "/consul/docs/reference/config-entry/mesh", + source: '/consul/docs/connect/config-entries/mesh', + destination: '/consul/docs/reference/config-entry/mesh', permanent: true, }, { - source: "/consul/docs/connect/config-entries/proxy-defaults", - destination: "/consul/docs/reference/config-entry/proxy-defaults", + source: '/consul/docs/connect/config-entries/proxy-defaults', + destination: '/consul/docs/reference/config-entry/proxy-defaults', permanent: true, }, { - source: "/consul/docs/connect/config-entries/registration", - destination: "/consul/docs/reference/config-entry/registration", + source: '/consul/docs/connect/config-entries/registration', + destination: '/consul/docs/reference/config-entry/registration', permanent: true, }, { - source: "/consul/docs/connect/config-entries/sameness-group", - destination: "/consul/docs/reference/config-entry/sameness-group", + source: '/consul/docs/connect/config-entries/sameness-group', + destination: '/consul/docs/reference/config-entry/sameness-group', permanent: true, }, { - source: "/consul/docs/connect/config-entries/service-defaults", - destination: "/consul/docs/reference/config-entry/service-defaults", + source: '/consul/docs/connect/config-entries/service-defaults', + destination: '/consul/docs/reference/config-entry/service-defaults', permanent: true, }, { - source: "/consul/docs/connect/config-entries/service-intentions", - destination: "/consul/docs/reference/config-entry/service-intentions", + source: '/consul/docs/connect/config-entries/service-intentions', + destination: '/consul/docs/reference/config-entry/service-intentions', permanent: true, }, { - source: "/consul/docs/connect/config-entries/service-resolver", - destination: "/consul/docs/reference/config-entry/service-resolver", + source: '/consul/docs/connect/config-entries/service-resolver', + destination: '/consul/docs/reference/config-entry/service-resolver', permanent: true, }, { - source: "/consul/docs/connect/config-entries/service-router", - destination: "/consul/docs/reference/config-entry/service-router", + source: '/consul/docs/connect/config-entries/service-router', + destination: '/consul/docs/reference/config-entry/service-router', permanent: true, }, { - source: "/consul/docs/connect/config-entries/service-splitter", - destination: "/consul/docs/reference/config-entry/service-splitter", + source: '/consul/docs/connect/config-entries/service-splitter', + destination: '/consul/docs/reference/config-entry/service-splitter', permanent: true, }, { - source: "/consul/docs/connect/config-entries/tcp-route", - destination: "/consul/docs/reference/config-entry/tcp-route", + source: '/consul/docs/connect/config-entries/tcp-route', + destination: '/consul/docs/reference/config-entry/tcp-route', permanent: true, }, { - source: "/consul/docs/connect/config-entries/terminating-gateway", - destination: "/consul/docs/reference/config-entry/terminating-gateway", + source: '/consul/docs/connect/config-entries/terminating-gateway', + destination: '/consul/docs/reference/config-entry/terminating-gateway', permanent: true, }, { - source: "/consul/docs/connect/connect-internals", - destination: "/consul/docs/architecture/data-plane/connect", + source: '/consul/docs/connect/connect-internals', + destination: '/consul/docs/architecture/data-plane/connect', permanent: true, }, { - source: "/consul/docs/connect/connectivity-tasks", - destination: "/consul/docs/architecture/data-plane/gateway", + source: '/consul/docs/connect/connectivity-tasks', + destination: '/consul/docs/architecture/data-plane/gateway', permanent: true, }, { - source: "/consul/docs/connect/dataplane", - destination: "/consul/docs/architecture/control-plane/dataplane", + source: '/consul/docs/connect/dataplane', + destination: '/consul/docs/architecture/control-plane/dataplane', permanent: true, }, { - source: "/consul/docs/connect/dataplane/consul-dataplane", - destination: "/consul/docs/reference/dataplane/cli", + source: '/consul/docs/connect/dataplane/consul-dataplane', + destination: '/consul/docs/reference/dataplane/cli', permanent: true, }, { - source: "/consul/docs/connect/dataplane/telemetry", - destination: "/consul/docs/reference/dataplane/telemetry", + source: '/consul/docs/connect/dataplane/telemetry', + destination: '/consul/docs/reference/dataplane/telemetry', permanent: true, }, { - source: "/consul/docs/connect/dev", - destination: "/consul/docs/troubleshoot/mesh", + source: '/consul/docs/connect/dev', + destination: '/consul/docs/troubleshoot/mesh', permanent: true, }, { - source: "/consul/docs/connect/distributed-tracing", - destination: "/consul/docs/observe/distributed-tracing", + source: '/consul/docs/connect/distributed-tracing', + destination: '/consul/docs/observe/distributed-tracing', permanent: true, }, { - source: "/consul/docs/connect/gateways", - destination: "/consul/docs/architecture/data-plane/gateway", + source: '/consul/docs/connect/gateways', + destination: '/consul/docs/architecture/data-plane/gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway", - destination: "/consul/docs/north-south/api-gateway", + source: '/consul/docs/connect/gateways/api-gateway', + destination: '/consul/docs/north-south/api-gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration", - destination: "/consul/docs/north-south/api-gateway", + source: '/consul/docs/connect/gateways/api-gateway/configuration', + destination: '/consul/docs/north-south/api-gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/gateway", - destination: "/consul/docs/reference/k8s/api-gateway/gateway", + source: '/consul/docs/connect/gateways/api-gateway/configuration/gateway', + destination: '/consul/docs/reference/k8s/api-gateway/gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/gatewayclass", - destination: "/consul/docs/reference/k8s/api-gateway/gatewayclass", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/gatewayclass', + destination: '/consul/docs/reference/k8s/api-gateway/gatewayclass', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/gatewayclassconfig", - destination: "/consul/docs/reference/k8s/api-gateway/gatewayclassconfig", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/gatewayclassconfig', + destination: '/consul/docs/reference/k8s/api-gateway/gatewayclassconfig', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/gatewaypolicy", - destination: "/consul/docs/reference/k8s/api-gateway/gatewaypolicy", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/gatewaypolicy', + destination: '/consul/docs/reference/k8s/api-gateway/gatewaypolicy', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/meshservice", - destination: "/consul/docs/reference/k8s/api-gateway/meshservice", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/meshservice', + destination: '/consul/docs/reference/k8s/api-gateway/meshservice', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/routeauthfilter", - destination: "/consul/docs/reference/k8s/api-gateway/routeauthfilter", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/routeauthfilter', + destination: '/consul/docs/reference/k8s/api-gateway/routeauthfilter', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/routeretryfilter", - destination: "/consul/docs/reference/k8s/api-gateway/routeretryfilter", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/routeretryfilter', + destination: '/consul/docs/reference/k8s/api-gateway/routeretryfilter', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/routes", - destination: "/consul/docs/reference/k8s/api-gateway/routes", + source: '/consul/docs/connect/gateways/api-gateway/configuration/routes', + destination: '/consul/docs/reference/k8s/api-gateway/routes', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter", - destination: "/consul/docs/reference/k8s/api-gateway/routetimeoutfilter", + source: + '/consul/docs/connect/gateways/api-gateway/configuration/routetimeoutfilter', + destination: '/consul/docs/reference/k8s/api-gateway/routetimeoutfilter', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/define-routes/reroute-http-requests", - destination: "/consul/docs/north-south/api-gateway/k8s/reroute", + source: + '/consul/docs/connect/gateways/api-gateway/define-routes/reroute-http-requests', + destination: '/consul/docs/north-south/api-gateway/k8s/reroute', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/define-routes/route-to-peered-services", - destination: "/consul/docs/north-south/api-gateway/k8s/peer", + source: + '/consul/docs/connect/gateways/api-gateway/define-routes/route-to-peered-services', + destination: '/consul/docs/north-south/api-gateway/k8s/peer', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/define-routes/routes-k8s", - destination: "/consul/docs/north-south/api-gateway/k8s/route", + source: + '/consul/docs/connect/gateways/api-gateway/define-routes/routes-k8s', + destination: '/consul/docs/north-south/api-gateway/k8s/route', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/define-routes/routes-vms", - destination: "/consul/docs/north-south/api-gateway/vm/route", + source: + '/consul/docs/connect/gateways/api-gateway/define-routes/routes-vms', + destination: '/consul/docs/north-south/api-gateway/vm/route', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/deploy/listeners-k8s", - destination: "/consul/docs/north-south/api-gateway/k8s/listener", + source: '/consul/docs/connect/gateways/api-gateway/deploy/listeners-k8s', + destination: '/consul/docs/north-south/api-gateway/k8s/listener', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/deploy/listeners-vms", - destination: "/consul/docs/north-south/api-gateway/vm/listener", + source: '/consul/docs/connect/gateways/api-gateway/deploy/listeners-vms', + destination: '/consul/docs/north-south/api-gateway/vm/listener', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/errors", - destination: "/consul/docs/error-messages/api-gateway", + source: '/consul/docs/connect/gateways/api-gateway/errors', + destination: '/consul/docs/error-messages/api-gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/install-k8s", - destination: "/consul/docs/north-south/api-gateway/k8s/enable", + source: '/consul/docs/connect/gateways/api-gateway/install-k8s', + destination: '/consul/docs/north-south/api-gateway/k8s/enable', permanent: true, }, { source: - "/consul/docs/connect/gateways/api-gateway/secure-traffic/encrypt-vms", - destination: "/consul/docs/north-south/api-gateway/secure-traffic/encrypt", + '/consul/docs/connect/gateways/api-gateway/secure-traffic/encrypt-vms', + destination: '/consul/docs/north-south/api-gateway/secure-traffic/encrypt', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/secure-traffic/verify-jwts-k8s", - destination: "/consul/docs/north-south/api-gateway/secure-traffic/jwt/k8s", + source: + '/consul/docs/connect/gateways/api-gateway/secure-traffic/verify-jwts-k8s', + destination: '/consul/docs/north-south/api-gateway/secure-traffic/jwt/k8s', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/secure-traffic/verify-jwts-vms", - destination: "/consul/docs/north-south/api-gateway/secure-traffic/jwt/vm", + source: + '/consul/docs/connect/gateways/api-gateway/secure-traffic/verify-jwts-vms', + destination: '/consul/docs/north-south/api-gateway/secure-traffic/jwt/vm', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/tech-specs", - destination: "/consul/docs/north-south/api-gateway/k8s/tech-specs", + source: '/consul/docs/connect/gateways/api-gateway/tech-specs', + destination: '/consul/docs/north-south/api-gateway/k8s/tech-specs', permanent: true, }, { - source: "/consul/docs/connect/gateways/api-gateway/upgrades-k8s", - destination: "/consul/docs/upgrade/api-gateway", + source: '/consul/docs/connect/gateways/api-gateway/upgrades-k8s', + destination: '/consul/docs/upgrade/api-gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/ingress-gateway", - destination: "/consul/docs/north-south/ingress-gateway", + source: '/consul/docs/connect/gateways/ingress-gateway', + destination: '/consul/docs/north-south/ingress-gateway', permanent: true, }, { source: - "/consul/docs/connect/gateways/ingress-gateway/tls-external-service", - destination: "/consul/docs/north-south/ingress-gateway/external", + '/consul/docs/connect/gateways/ingress-gateway/tls-external-service', + destination: '/consul/docs/north-south/ingress-gateway/external', permanent: true, }, { - source: "/consul/docs/connect/gateways/ingress-gateway/usage", - destination: "/consul/docs/north-south/ingress-gateway/vm", + source: '/consul/docs/connect/gateways/ingress-gateway/usage', + destination: '/consul/docs/north-south/ingress-gateway/vm', permanent: true, }, { - source: "/consul/docs/connect/gateways/mesh-gateway", - destination: "/consul/docs/east-west/mesh-gateway", + source: '/consul/docs/connect/gateways/mesh-gateway', + destination: '/consul/docs/east-west/mesh-gateway', permanent: true, }, { - source: "/consul/docs/connect/gateways/mesh-gateway/peering-via-mesh-gateways", - destination: "/consul/docs/east-west/mesh-gateway/cluster-peer", + source: + '/consul/docs/connect/gateways/mesh-gateway/peering-via-mesh-gateways', + destination: '/consul/docs/east-west/mesh-gateway/cluster-peer', permanent: true, }, { - source: "/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-partitions", - destination: "/consul/docs/east-west/mesh-gateway/admin-partition", + source: + '/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-partitions', + destination: '/consul/docs/east-west/mesh-gateway/admin-partition', permanent: true, }, { - source: "/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-wan-datacenters", - destination: "/consul/docs/east-west/mesh-gateway/federation", + source: + '/consul/docs/connect/gateways/mesh-gateway/service-to-service-traffic-wan-datacenters', + destination: '/consul/docs/east-west/mesh-gateway/federation', permanent: true, }, { - source: "/consul/docs/connect/gateways/mesh-gateway/wan-federation-via-mesh-gateways", - destination: "/consul/docs/east-west/mesh-gateway/enable", + source: + '/consul/docs/connect/gateways/mesh-gateway/wan-federation-via-mesh-gateways', + destination: '/consul/docs/east-west/mesh-gateway/enable', permanent: true, }, { - source: "/consul/docs/connect/gateways/terminating-gateway", - destination: "/consul/docs/north-south/terminating-gateway", + source: '/consul/docs/connect/gateways/terminating-gateway', + destination: '/consul/docs/north-south/terminating-gateway', permanent: true, }, { - source: "/consul/docs/connect/intentions", - destination: "/consul/docs/secure-mesh/intention", + source: '/consul/docs/connect/intentions', + destination: '/consul/docs/secure-mesh/intention', permanent: true, }, { - source: "/consul/docs/connect/intentions/create-manage-intentions", - destination: "/consul/docs/secure-mesh/intention/create", + source: '/consul/docs/connect/intentions/create-manage-intentions', + destination: '/consul/docs/secure-mesh/intention/create', permanent: true, }, { - source: "/consul/docs/connect/intentions/jwt-authorization", - destination: "/consul/docs/secure-mesh/intention/jwt", + source: '/consul/docs/connect/intentions/jwt-authorization', + destination: '/consul/docs/secure-mesh/intention/jwt', permanent: true, }, { - source: "/consul/docs/connect/intentions/legacy", - destination: "/consul/docs/secure-mesh/intention", + source: '/consul/docs/connect/intentions/legacy', + destination: '/consul/docs/secure-mesh/intention', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic", - destination: "/consul/docs/manage-traffic", + source: '/consul/docs/connect/manage-traffic', + destination: '/consul/docs/manage-traffic', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/discovery-chain", - destination: "/consul/docs/manage-traffic/discovery-chain", + source: '/consul/docs/connect/manage-traffic/discovery-chain', + destination: '/consul/docs/manage-traffic/discovery-chain', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/failover", - destination: "/consul/docs/manage-traffic/failover", + source: '/consul/docs/connect/manage-traffic/failover', + destination: '/consul/docs/manage-traffic/failover', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/failover/sameness", - destination: "/consul/docs/manage-traffic/failover/sameness-group", + source: '/consul/docs/connect/manage-traffic/failover/sameness', + destination: '/consul/docs/manage-traffic/failover/sameness-group', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/fault-injection", - destination: "/consul/docs/troubleshoot/fault-injection", + source: '/consul/docs/connect/manage-traffic/fault-injection', + destination: '/consul/docs/troubleshoot/fault-injection', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/limit-request-rates", - destination: "/consul/docs/manage-traffic/rate-limit", + source: '/consul/docs/connect/manage-traffic/limit-request-rates', + destination: '/consul/docs/manage-traffic/rate-limit', permanent: true, }, { - source: "/consul/docs/connect/manage-traffic/route-to-local-upstreams", - destination: "/consul/docs/manage-traffic/route-local", + source: '/consul/docs/connect/manage-traffic/route-to-local-upstreams', + destination: '/consul/docs/manage-traffic/route-local', permanent: true, }, { - source: "/consul/docs/connect/native", - destination: "/consul/docs/automate/native", + source: '/consul/docs/connect/native', + destination: '/consul/docs/automate/native', permanent: true, }, { - source: "/consul/docs/connect/native/go", - destination: "/consul/docs/automate/native/go", + source: '/consul/docs/connect/native/go', + destination: '/consul/docs/automate/native/go', permanent: true, }, { - source: "/consul/docs/connect/observability", - destination: "/consul/docs/observe/tech-specs", + source: '/consul/docs/connect/observability', + destination: '/consul/docs/observe/tech-specs', permanent: true, }, { - source: "/consul/docs/connect/observability/access-logs", - destination: "/consul/docs/observe/access-log", + source: '/consul/docs/connect/observability/access-logs', + destination: '/consul/docs/observe/access-log', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards", - destination: "/consul/docs/observe/grafana", + source: '/consul/docs/connect/observability/grafanadashboards', + destination: '/consul/docs/observe/grafana', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards/consuldataplanedashboard", - destination: "/consul/docs/observe/grafana/dataplane", + source: + '/consul/docs/connect/observability/grafanadashboards/consuldataplanedashboard', + destination: '/consul/docs/observe/grafana/dataplane', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards/consulk8sdashboard", - destination: "/consul/docs/observe/grafana/consul-k8s", + source: + '/consul/docs/connect/observability/grafanadashboards/consulk8sdashboard', + destination: '/consul/docs/observe/grafana/consul-k8s', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards/consulserverdashboard", - destination: "/consul/docs/observe/grafana/server", + source: + '/consul/docs/connect/observability/grafanadashboards/consulserverdashboard', + destination: '/consul/docs/observe/grafana/server', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards/service-to-servicedashboard", - destination: "/consul/docs/observe/grafana/service-to-service", + source: + '/consul/docs/connect/observability/grafanadashboards/service-to-servicedashboard', + destination: '/consul/docs/observe/grafana/service-to-service', permanent: true, }, { - source: "/consul/docs/connect/observability/grafanadashboards/servicedashboard", - destination: "/consul/docs/observe/grafana/service", + source: + '/consul/docs/connect/observability/grafanadashboards/servicedashboard', + destination: '/consul/docs/observe/grafana/service', permanent: true, }, { - source: "/consul/docs/connect/observability/service", - destination: "/consul/docs/observe/grafana/service-to-service", + source: '/consul/docs/connect/observability/service', + destination: '/consul/docs/observe/grafana/service-to-service', permanent: true, }, { - source: "/consul/docs/connect/observability/ui-visualization", - destination: "/consul/docs/observe/telemetry/vm", + source: '/consul/docs/connect/observability/ui-visualization', + destination: '/consul/docs/observe/telemetry/vm', permanent: true, }, { - source: "/consul/docs/connect/proxies", - destination: "/consul/docs/connect/proxy", + source: '/consul/docs/connect/proxies', + destination: '/consul/docs/connect/proxy', permanent: true, }, { - source: "/consul/docs/connect/proxies/built-in", - destination: "/consul/docs/reference/proxy/built-in", + source: '/consul/docs/connect/proxies/built-in', + destination: '/consul/docs/reference/proxy/built-in', permanent: true, }, { - source: "/consul/docs/connect/proxies/deploy-service-mesh-proxies", - destination: "/consul/docs/connect/proxy/mesh", + source: '/consul/docs/connect/proxies/deploy-service-mesh-proxies', + destination: '/consul/docs/connect/proxy/mesh', permanent: true, }, { - source: "/consul/docs/connect/proxies/deploy-sidecar-services", - destination: "/consul/docs/connect/proxy/sidecar", + source: '/consul/docs/connect/proxies/deploy-sidecar-services', + destination: '/consul/docs/connect/proxy/sidecar', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy", - destination: "/consul/docs/reference/proxy/envoy", + source: '/consul/docs/connect/proxies/envoy', + destination: '/consul/docs/reference/proxy/envoy', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions", - destination: "/consul/docs/envoy-extension", + source: '/consul/docs/connect/proxies/envoy-extensions', + destination: '/consul/docs/envoy-extension', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/configuration/ext-authz", - destination: "/consul/docs/reference/proxy/extensions/ext-authz", + source: + '/consul/docs/connect/proxies/envoy-extensions/configuration/ext-authz', + destination: '/consul/docs/reference/proxy/extensions/ext-authz', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/configuration/otel-access-logging", - destination: "/consul/docs/reference/proxy/extensions/otel", + source: + '/consul/docs/connect/proxies/envoy-extensions/configuration/otel-access-logging', + destination: '/consul/docs/reference/proxy/extensions/otel', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/configuration/property-override", - destination: "/consul/docs/reference/proxy/extensions/property-override", + source: + '/consul/docs/connect/proxies/envoy-extensions/configuration/property-override', + destination: '/consul/docs/reference/proxy/extensions/property-override', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/configuration/wasm", - destination: "/consul/docs/reference/proxy/extensions/wasm", + source: '/consul/docs/connect/proxies/envoy-extensions/configuration/wasm', + destination: '/consul/docs/reference/proxy/extensions/wasm', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/apigee-ext-authz", - destination: "/consul/docs/envoy-extension/apigee", + source: + '/consul/docs/connect/proxies/envoy-extensions/usage/apigee-ext-authz', + destination: '/consul/docs/envoy-extension/apigee', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/ext-authz", - destination: "/consul/docs/envoy-extension/ext", + source: '/consul/docs/connect/proxies/envoy-extensions/usage/ext-authz', + destination: '/consul/docs/envoy-extension/ext', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/lambda", - destination: "/consul/docs/envoy-extension/lambda", + source: '/consul/docs/connect/proxies/envoy-extensions/usage/lambda', + destination: '/consul/docs/envoy-extension/lambda', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/lua", - destination: "/consul/docs/envoy-extension/lua", + source: '/consul/docs/connect/proxies/envoy-extensions/usage/lua', + destination: '/consul/docs/envoy-extension/lua', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/otel-access-logging", - destination: "/consul/docs/envoy-extension/otel-access-logging", + source: + '/consul/docs/connect/proxies/envoy-extensions/usage/otel-access-logging', + destination: '/consul/docs/envoy-extension/otel-access-logging', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/property-override", - destination: "/consul/docs/envoy-extension/property-override", + source: + '/consul/docs/connect/proxies/envoy-extensions/usage/property-override', + destination: '/consul/docs/envoy-extension/property-override', permanent: true, }, { - source: "/consul/docs/connect/proxies/envoy-extensions/usage/wasm", - destination: "/consul/docs/envoy-extension/wasm", + source: '/consul/docs/connect/proxies/envoy-extensions/usage/wasm', + destination: '/consul/docs/envoy-extension/wasm', permanent: true, }, { - source: "/consul/docs/connect/proxies/integrate", - destination: "/consul/docs/connect/proxy/custom", + source: '/consul/docs/connect/proxies/integrate', + destination: '/consul/docs/connect/proxy/custom', permanent: true, }, { - source: "/consul/docs/connect/proxies/proxy-config-reference", - destination: "/consul/docs/reference/proxy/connect-proxy", + source: '/consul/docs/connect/proxies/proxy-config-reference', + destination: '/consul/docs/reference/proxy/connect-proxy', permanent: true, }, { - source: "/consul/docs/connect/security", - destination: "/consul/docs/secure-mesh/best-practice", + source: '/consul/docs/connect/security', + destination: '/consul/docs/secure-mesh/best-practice', permanent: true, }, { - source: "/consul/docs/consul-vs-other", - destination: "/consul/docs/use-case", + source: '/consul/docs/consul-vs-other', + destination: '/consul/docs/use-case', permanent: true, }, { - source: "/consul/docs/consul-vs-other/api-gateway-compare", - destination: "/consul/docs/use-case/api-gateway", + source: '/consul/docs/consul-vs-other/api-gateway-compare', + destination: '/consul/docs/use-case/api-gateway', permanent: true, }, { - source: "/consul/docs/consul-vs-other/config-management-compare", - destination: "/consul/docs/use-case/config-management", + source: '/consul/docs/consul-vs-other/config-management-compare', + destination: '/consul/docs/use-case/config-management', permanent: true, }, { - source: "/consul/docs/consul-vs-other/dns-tools-compare", - destination: "/consul/docs/use-case/dns", + source: '/consul/docs/consul-vs-other/dns-tools-compare', + destination: '/consul/docs/use-case/dns', permanent: true, }, { - source: "/consul/docs/consul-vs-other/service-mesh-compare", - destination: "/consul/docs/use-case/service-mesh", + source: '/consul/docs/consul-vs-other/service-mesh-compare', + destination: '/consul/docs/use-case/service-mesh', permanent: true, }, { - source: "/consul/docs/dynamic-app-config/kv", - destination: "/consul/docs/automate/kv", + source: '/consul/docs/dynamic-app-config/kv', + destination: '/consul/docs/automate/kv', permanent: true, }, { - source: "/consul/docs/dynamic-app-config/kv/store", - destination: "/consul/docs/automate/kv/store", + source: '/consul/docs/dynamic-app-config/kv/store', + destination: '/consul/docs/automate/kv/store', permanent: true, }, { - source: "/consul/docs/dynamic-app-config/sessions", - destination: "/consul/docs/automate/session", + source: '/consul/docs/dynamic-app-config/sessions', + destination: '/consul/docs/automate/session', permanent: true, }, { source: - "/consul/docs/dynamic-app-config/sessions/application-leader-election", - destination: "/consul/docs/automate/application-leader-election", + '/consul/docs/dynamic-app-config/sessions/application-leader-election', + destination: '/consul/docs/automate/application-leader-election', permanent: true, }, { - source: "/consul/docs/dynamic-app-config/watches", - destination: "/consul/docs/automate/watch", + source: '/consul/docs/dynamic-app-config/watches', + destination: '/consul/docs/automate/watch', permanent: true, }, { - source: "/consul/docs/ecs/architecture", - destination: "/consul/docs/reference/architecture/ecs", + source: '/consul/docs/ecs/architecture', + destination: '/consul/docs/reference/architecture/ecs', permanent: true, }, { - source: "/consul/docs/ecs/deploy/bind-addresses", - destination: "/consul/docs/register/service/ecs/task-bind-address", + source: '/consul/docs/ecs/deploy/bind-addresses', + destination: '/consul/docs/register/service/ecs/task-bind-address', permanent: true, }, { - source: "/consul/docs/ecs/deploy/configure-routes", - destination: "/consul/docs/connect/ecs", + source: '/consul/docs/ecs/deploy/configure-routes', + destination: '/consul/docs/connect/ecs', permanent: true, }, { - source: "/consul/docs/ecs/deploy/manual", - destination: "/consul/docs/register/service/ecs/manual", + source: '/consul/docs/ecs/deploy/manual', + destination: '/consul/docs/register/service/ecs/manual', permanent: true, }, { - source: "/consul/docs/ecs/deploy/migrate-existing-tasks", - destination: "/consul/docs/register/service/ecs/migrate", + source: '/consul/docs/ecs/deploy/migrate-existing-tasks', + destination: '/consul/docs/register/service/ecs/migrate', permanent: true, }, { - source: "/consul/docs/ecs/deploy/terraform", - destination: "/consul/docs/register/service/ecs", + source: '/consul/docs/ecs/deploy/terraform', + destination: '/consul/docs/register/service/ecs', permanent: true, }, { - source: "/consul/docs/ecs/enterprise", - destination: "/consul/docs/enterprise/ecs", + source: '/consul/docs/ecs/enterprise', + destination: '/consul/docs/enterprise/ecs', permanent: true, }, { - source: "/consul/docs/ecs/reference/compatibility", - destination: "/consul/docs/upgrade/ecs", + source: '/consul/docs/ecs/reference/compatibility', + destination: '/consul/docs/upgrade/ecs', permanent: true, }, { - source: "/consul/docs/ecs/reference/configuration-reference", - destination: "/consul/docs/reference/ecs", + source: '/consul/docs/ecs/reference/configuration-reference', + destination: '/consul/docs/reference/ecs', permanent: true, }, { - source: "/consul/docs/ecs/reference/consul-server-json", - destination: "/consul/docs/reference/ecs/server-json", + source: '/consul/docs/ecs/reference/consul-server-json', + destination: '/consul/docs/reference/ecs/server-json', permanent: true, }, { - source: "/consul/docs/ecs/tech-specs", - destination: "/consul/docs/reference/ecs/tech-specs", + source: '/consul/docs/ecs/tech-specs', + destination: '/consul/docs/reference/ecs/tech-specs', permanent: true, }, { - source: "/consul/docs/ecs/upgrade-to-dataplanes", - destination: "/consul/docs/upgrade/ecs/dataplane", + source: '/consul/docs/ecs/upgrade-to-dataplanes', + destination: '/consul/docs/upgrade/ecs/dataplane', permanent: true, }, { - source: "/consul/docs/enterprise/admin-partitions", - destination: "/consul/docs/multi-tenant/admin-partition", + source: '/consul/docs/enterprise/admin-partitions', + destination: '/consul/docs/multi-tenant/admin-partition', permanent: true, }, { - source: "/consul/docs/enterprise/audit-logging", - destination: "/consul/docs/monitor/log/audit", + source: '/consul/docs/enterprise/audit-logging', + destination: '/consul/docs/monitor/log/audit', permanent: true, }, { - source: "/consul/docs/enterprise/backups", - destination: "/consul/docs/manage/scale/automated-backup", + source: '/consul/docs/enterprise/backups', + destination: '/consul/docs/manage/scale/automated-backup', permanent: true, }, { - source: "/consul/docs/enterprise/ent-to-ce-downgrades", - destination: "/consul/docs/enterprise/downgrade", + source: '/consul/docs/enterprise/ent-to-ce-downgrades', + destination: '/consul/docs/enterprise/downgrade', permanent: true, }, { - source: "/consul/docs/enterprise/federation", - destination: "/consul/docs/east-west/network-area", + source: '/consul/docs/enterprise/federation', + destination: '/consul/docs/east-west/network-area', permanent: true, }, { - source: "/consul/docs/enterprise/fips", - destination: "/consul/docs/deploy/server/fips", + source: '/consul/docs/enterprise/fips', + destination: '/consul/docs/deploy/server/fips', permanent: true, }, { - source: "/consul/docs/enterprise/license/overview", - destination: "/consul/docs/enterprise/license", + source: '/consul/docs/enterprise/license/overview', + destination: '/consul/docs/enterprise/license', permanent: true, }, { - source: "/consul/docs/enterprise/license/utilization-reporting", - destination: "/consul/docs/enterprise/license/reporting", + source: '/consul/docs/enterprise/license/utilization-reporting', + destination: '/consul/docs/enterprise/license/reporting', permanent: true, }, { - source: "/consul/docs/enterprise/long-term-support", - destination: "/consul/docs/upgrade/lts", + source: '/consul/docs/enterprise/long-term-support', + destination: '/consul/docs/upgrade/lts', permanent: true, }, { - source: "/consul/docs/enterprise/namespaces", - destination: "/consul/docs/multi-tenant/namespace", + source: '/consul/docs/enterprise/namespaces', + destination: '/consul/docs/multi-tenant/namespace', permanent: true, }, { - source: "/consul/docs/enterprise/network-segments/create-network-segment", - destination: "/consul/docs/multi-tenant/network-segment/vm", + source: '/consul/docs/enterprise/network-segments/create-network-segment', + destination: '/consul/docs/multi-tenant/network-segment/vm', permanent: true, }, { - source: "/consul/docs/enterprise/network-segments/network-segments-overview", - destination: "/consul/docs/multi-tenant/network-segment", + source: + '/consul/docs/enterprise/network-segments/network-segments-overview', + destination: '/consul/docs/multi-tenant/network-segment', permanent: true, }, { - source: "/consul/docs/enterprise/read-scale", - destination: "/consul/docs/manage/scale/read-replica", + source: '/consul/docs/enterprise/read-scale', + destination: '/consul/docs/manage/scale/read-replica', permanent: true, }, { - source: "/consul/docs/enterprise/redundancy", - destination: "/consul/docs/manage/scale/redundancy-zone", + source: '/consul/docs/enterprise/redundancy', + destination: '/consul/docs/manage/scale/redundancy-zone', permanent: true, }, { - source: "/consul/docs/enterprise/upgrades", - destination: "/consul/docs/upgrade/automated", + source: '/consul/docs/enterprise/upgrades', + destination: '/consul/docs/upgrade/automated', permanent: true, }, { - source: "/consul/docs/guides", - destination: "/consul/tutorials", + source: '/consul/docs/guides', + destination: '/consul/tutorials', permanent: true, }, { - source: "/consul/docs/install", - destination: "/consul/docs/fundamentals/install", + source: '/consul/docs/install', + destination: '/consul/docs/fundamentals/install', permanent: true, }, { - source: "/consul/docs/install/bootstrapping", - destination: "/consul/docs/deploy/server/vm/bootstrap", + source: '/consul/docs/install/bootstrapping', + destination: '/consul/docs/deploy/server/vm/bootstrap', permanent: true, }, { - source: "/consul/docs/install/cloud-auto-join", - destination: "/consul/docs/deploy/server/cloud-auto-join", + source: '/consul/docs/install/cloud-auto-join', + destination: '/consul/docs/deploy/server/cloud-auto-join', permanent: true, }, { - source: "/consul/docs/install/glossary", - destination: "/consul/docs/glossary", + source: '/consul/docs/install/glossary', + destination: '/consul/docs/glossary', permanent: true, }, { - source: "/consul/docs/install/manual-bootstrap", - destination: "/consul/docs/deploy/server/vm/bootstrap", + source: '/consul/docs/install/manual-bootstrap', + destination: '/consul/docs/deploy/server/vm/bootstrap', permanent: true, }, { - source: "/consul/docs/install/performance", - destination: "/consul/docs/reference/architecture/server", + source: '/consul/docs/install/performance', + destination: '/consul/docs/reference/architecture/server', permanent: true, }, { - source: "/consul/docs/install/ports", - destination: "/consul/docs/reference/architecture/ports", + source: '/consul/docs/install/ports', + destination: '/consul/docs/reference/architecture/ports', permanent: true, }, { - source: "/consul/docs/integrate/download-tools", - destination: "/consul/docs/integrate/consul-tools", + source: '/consul/docs/integrate/download-tools', + destination: '/consul/docs/integrate/consul-tools', permanent: true, }, { - source: "/consul/docs/integrate/nia-integration", - destination: "/consul/docs/integrate/nia", + source: '/consul/docs/integrate/nia-integration', + destination: '/consul/docs/integrate/nia', permanent: true, }, { - source: "/consul/docs/integrate/partnerships", - destination: "/consul/docs/integrate/consul", + source: '/consul/docs/integrate/partnerships', + destination: '/consul/docs/integrate/consul', permanent: true, }, { - source: "/consul/docs/internals", - destination: "/consul/docs/architecture", + source: '/consul/docs/internals', + destination: '/consul/docs/architecture', permanent: true, }, { - source: "/consul/docs/internals/acl", - destination: "/consul/docs/secure/acl", + source: '/consul/docs/internals/acl', + destination: '/consul/docs/secure/acl', permanent: true, }, { - source: "/consul/docs/k8s/annotations-and-labels", - destination: "/consul/docs/reference/k8s/annotation-label", + source: '/consul/docs/k8s/annotations-and-labels', + destination: '/consul/docs/reference/k8s/annotation-label', permanent: true, }, { - source: "/consul/docs/k8s/architecture", - destination: "/consul/docs/architecture/control-plane/k8s", + source: '/consul/docs/k8s/architecture', + destination: '/consul/docs/architecture/control-plane/k8s', permanent: true, }, { - source: "/consul/docs/k8s/compatibility", - destination: "/consul/docs/upgrade/k8s/compatibility", + source: '/consul/docs/k8s/compatibility', + destination: '/consul/docs/upgrade/k8s/compatibility', permanent: true, }, { - source: "/consul/docs/k8s/connect", - destination: "/consul/docs/connect/k8s", + source: '/consul/docs/k8s/connect', + destination: '/consul/docs/connect/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/cluster-peering/tech-specs", - destination: "/consul/docs/east-west/cluster-peering/tech-specs/k8s", + source: '/consul/docs/k8s/connect/cluster-peering/tech-specs', + destination: '/consul/docs/east-west/cluster-peering/tech-specs/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/cluster-peering/usage/create-sameness-groups", - destination: "/consul/docs/multi-tenant/sameness-group/k8s", + source: + '/consul/docs/k8s/connect/cluster-peering/usage/create-sameness-groups', + destination: '/consul/docs/multi-tenant/sameness-group/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/cluster-peering/usage/establish-peering", - destination: "/consul/docs/east-west/cluster-peering/establish/k8s", + source: '/consul/docs/k8s/connect/cluster-peering/usage/establish-peering', + destination: '/consul/docs/east-west/cluster-peering/establish/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/cluster-peering/usage/l7-traffic", - destination: "/consul/docs/manage-traffic/cluster-peering/k8s", + source: '/consul/docs/k8s/connect/cluster-peering/usage/l7-traffic', + destination: '/consul/docs/manage-traffic/cluster-peering/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/cluster-peering/usage/manage-peering", - destination: "/consul/docs/east-west/cluster-peering/manage/k8s", + source: '/consul/docs/k8s/connect/cluster-peering/usage/manage-peering', + destination: '/consul/docs/east-west/cluster-peering/manage/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/connect-ca-provider", - destination: "/consul/docs/secure-mesh/certificate/k8s", + source: '/consul/docs/k8s/connect/connect-ca-provider', + destination: '/consul/docs/secure-mesh/certificate/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/health", - destination: "/consul/docs/register/health-check/k8s", + source: '/consul/docs/k8s/connect/health', + destination: '/consul/docs/register/health-check/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/ingress-controllers", - destination: "/consul/docs/north-south/ingress-controller", + source: '/consul/docs/k8s/connect/ingress-controllers', + destination: '/consul/docs/north-south/ingress-controller', permanent: true, }, { - source: "/consul/docs/k8s/connect/ingress-gateways", - destination: "/consul/docs/north-south/ingress-gateway/k8s", + source: '/consul/docs/k8s/connect/ingress-gateways', + destination: '/consul/docs/north-south/ingress-gateway/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/observability/metrics", - destination: "/consul/docs/observe/telemetry/k8s", + source: '/consul/docs/k8s/connect/observability/metrics', + destination: '/consul/docs/observe/telemetry/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/onboarding-tproxy-mode", - destination: "/consul/docs/register/service/k8s/transparent-proxy", + source: '/consul/docs/k8s/connect/onboarding-tproxy-mode', + destination: '/consul/docs/register/service/k8s/transparent-proxy', permanent: true, }, { - source: "/consul/docs/k8s/connect/terminating-gateways", - destination: "/consul/docs/register/external/terminating-gateway/k8s", + source: '/consul/docs/k8s/connect/terminating-gateways', + destination: '/consul/docs/register/external/terminating-gateway/k8s', permanent: true, }, { - source: "/consul/docs/k8s/connect/transparent-proxy", - destination: "/consul/docs/connect/proxy/transparent-proxy", + source: '/consul/docs/k8s/connect/transparent-proxy', + destination: '/consul/docs/connect/proxy/transparent-proxy', permanent: true, }, { - source: "/consul/docs/k8s/connect/transparent-proxy/enable-transparent-proxy", - destination: "/consul/docs/connect/proxy/transparent-proxy/k8s", + source: + '/consul/docs/k8s/connect/transparent-proxy/enable-transparent-proxy', + destination: '/consul/docs/connect/proxy/transparent-proxy/k8s', permanent: true, }, { - source: "/consul/docs/k8s/crds", - destination: "/consul/docs/fundamentals/config-entry", + source: '/consul/docs/k8s/crds', + destination: '/consul/docs/fundamentals/config-entry', permanent: true, }, { - source: "/consul/docs/k8s/crds/upgrade-to-crds", - destination: "/consul/docs/fundamentals/config-entry", + source: '/consul/docs/k8s/crds/upgrade-to-crds', + destination: '/consul/docs/fundamentals/config-entry', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/argo-rollouts-configuration", - destination: "/consul/docs/manage-traffic/progressive-rollouts/argo", + source: + '/consul/docs/k8s/deployment-configurations/argo-rollouts-configuration', + destination: '/consul/docs/manage-traffic/progressive-rollouts/argo', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/clients-outside-kubernetes", - destination: "/consul/docs/register/service/k8s/external", + source: + '/consul/docs/k8s/deployment-configurations/clients-outside-kubernetes', + destination: '/consul/docs/register/service/k8s/external', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/consul-enterprise", - destination: "/consul/docs/deploy/server/k8s/enterprise", + source: '/consul/docs/k8s/deployment-configurations/consul-enterprise', + destination: '/consul/docs/deploy/server/k8s/enterprise', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/datadog", - destination: "/consul/docs/monitor/datadog", + source: '/consul/docs/k8s/deployment-configurations/datadog', + destination: '/consul/docs/monitor/datadog', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/external-service", - destination: "/consul/docs/register/external/esm/k8s", + source: '/consul/docs/k8s/deployment-configurations/external-service', + destination: '/consul/docs/register/external/esm/k8s', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/multi-cluster", - destination: "/consul/docs/east-west/wan-federation", + source: '/consul/docs/k8s/deployment-configurations/multi-cluster', + destination: '/consul/docs/east-west/wan-federation', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/multi-cluster/kubernetes", - destination: "/consul/docs/east-west/wan-federation/k8s", + source: + '/consul/docs/k8s/deployment-configurations/multi-cluster/kubernetes', + destination: '/consul/docs/east-west/wan-federation/k8s', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/multi-cluster/vms-and-kubernetes", - destination: "/consul/docs/east-west/wan-federation/k8s-vm", + source: + '/consul/docs/k8s/deployment-configurations/multi-cluster/vms-and-kubernetes', + destination: '/consul/docs/east-west/wan-federation/k8s-vm', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/servers-outside-kubernetes", - destination: "/consul/docs/deploy/server/k8s/external", + source: + '/consul/docs/k8s/deployment-configurations/servers-outside-kubernetes', + destination: '/consul/docs/deploy/server/k8s/external', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/single-dc-multi-k8s", - destination: "/consul/docs/deploy/server/k8s/multi-cluster", + source: '/consul/docs/k8s/deployment-configurations/single-dc-multi-k8s', + destination: '/consul/docs/deploy/server/k8s/multi-cluster', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault", - destination: "/consul/docs/deploy/server/k8s/vault", + source: '/consul/docs/k8s/deployment-configurations/vault', + destination: '/consul/docs/deploy/server/k8s/vault', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration", - destination: "/consul/docs/deploy/server/k8s/vault/data", + source: '/consul/docs/k8s/deployment-configurations/vault/data-integration', + destination: '/consul/docs/deploy/server/k8s/vault/data', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/bootstrap-token", - destination: "/consul/docs/deploy/server/k8s/vault/data/bootstrap-token", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/bootstrap-token', + destination: '/consul/docs/deploy/server/k8s/vault/data/bootstrap-token', permanent: true, }, { source: - "/consul/docs/k8s/deployment-configurations/vault/data-integration/enterprise-license", - destination: "/consul/docs/deploy/server/k8s/vault/data/enterprise-license", + '/consul/docs/k8s/deployment-configurations/vault/data-integration/enterprise-license', + destination: '/consul/docs/deploy/server/k8s/vault/data/enterprise-license', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/gossip", - destination: "/consul/docs/deploy/server/k8s/vault/data/gossip-key", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/gossip', + destination: '/consul/docs/deploy/server/k8s/vault/data/gossip-key', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/partition-token", - destination: "/consul/docs/deploy/server/k8s/vault/data/partition-token", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/partition-token', + destination: '/consul/docs/deploy/server/k8s/vault/data/partition-token', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/replication-token", - destination: "/consul/docs/deploy/server/k8s/vault/data/replication-token", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/replication-token', + destination: '/consul/docs/deploy/server/k8s/vault/data/replication-token', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/server-tls", - destination: "/consul/docs/deploy/server/k8s/vault/data/tls-certificate", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/server-tls', + destination: '/consul/docs/deploy/server/k8s/vault/data/tls-certificate', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/snapshot-agent-config", - destination: "/consul/docs/deploy/server/k8s/vault/data/snapshot-agent", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/snapshot-agent-config', + destination: '/consul/docs/deploy/server/k8s/vault/data/snapshot-agent', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/data-integration/webhook-certs", - destination: "/consul/docs/deploy/server/k8s/vault/data/webhook-certificate", + source: + '/consul/docs/k8s/deployment-configurations/vault/data-integration/webhook-certs', + destination: + '/consul/docs/deploy/server/k8s/vault/data/webhook-certificate', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/systems-integration", - destination: "/consul/docs/deploy/server/k8s/vault/backend", + source: + '/consul/docs/k8s/deployment-configurations/vault/systems-integration', + destination: '/consul/docs/deploy/server/k8s/vault/backend', permanent: true, }, { - source: "/consul/docs/k8s/deployment-configurations/vault/wan-federation", - destination: "/consul/docs/east-west/wan-federation/vault-backend", + source: '/consul/docs/k8s/deployment-configurations/vault/wan-federation', + destination: '/consul/docs/east-west/wan-federation/vault-backend', permanent: true, }, { - source: "/consul/docs/k8s/dns/enable", - destination: "/consul/docs/manage/dns/forwarding/k8s", + source: '/consul/docs/k8s/dns/enable', + destination: '/consul/docs/manage/dns/forwarding/k8s', permanent: true, }, { - source: "/consul/docs/k8s/dns/views", - destination: "/consul/docs/manage/dns/views", + source: '/consul/docs/k8s/dns/views', + destination: '/consul/docs/manage/dns/views', permanent: true, }, { - source: "/consul/docs/k8s/dns/views/enable", - destination: "/consul/docs/manage/dns/views/enable", + source: '/consul/docs/k8s/dns/views/enable', + destination: '/consul/docs/manage/dns/views/enable', permanent: true, }, { - source: "/consul/docs/k8s/helm", - destination: "/consul/docs/reference/k8s/helm", + source: '/consul/docs/k8s/helm', + destination: '/consul/docs/reference/k8s/helm', permanent: true, }, { - source: "/consul/docs/k8s/installation/install", - destination: "/consul/docs/deploy/server/k8s/helm", + source: '/consul/docs/k8s/installation/install', + destination: '/consul/docs/deploy/server/k8s/helm', permanent: true, }, { - source: "/consul/docs/k8s/installation/install-cli", - destination: "/consul/docs/reference/cli/consul-k8s", + source: '/consul/docs/k8s/installation/install-cli', + destination: '/consul/docs/reference/cli/consul-k8s', permanent: true, }, { - source: "/consul/docs/k8s/k8s-cli", - destination: "/consul/docs/reference/cli/consul-k8s", + source: '/consul/docs/k8s/k8s-cli', + destination: '/consul/docs/reference/cli/consul-k8s', permanent: true, }, { - source: "/consul/docs/k8s/l7-traffic/failover-tproxy", - destination: "/consul/docs/manage-traffic/failover/k8s", + source: '/consul/docs/k8s/l7-traffic/failover-tproxy', + destination: '/consul/docs/manage-traffic/failover/k8s', permanent: true, }, { - source: "/consul/docs/k8s/l7-traffic/route-to-virtual-services", - destination: "/consul/docs/manage-traffic/virtual-service", + source: '/consul/docs/k8s/l7-traffic/route-to-virtual-services', + destination: '/consul/docs/manage-traffic/virtual-service', permanent: true, }, { - source: "/consul/docs/k8s/operations/certificate-rotation", - destination: "/consul/docs/secure/encryption/tls/rotate/k8s", + source: '/consul/docs/k8s/operations/certificate-rotation', + destination: '/consul/docs/secure/encryption/tls/rotate/k8s', permanent: true, }, { - source: "/consul/docs/k8s/operations/gossip-encryption-key-rotation", - destination: "/consul/docs/secure/encryption/gossip/rotate/k8s", + source: '/consul/docs/k8s/operations/gossip-encryption-key-rotation', + destination: '/consul/docs/secure/encryption/gossip/rotate/k8s', permanent: true, }, { - source: "/consul/docs/k8s/operations/tls-on-existing-cluster", - destination: "/consul/docs/secure/encryption/tls/rotate/k8s", + source: '/consul/docs/k8s/operations/tls-on-existing-cluster', + destination: '/consul/docs/secure/encryption/tls/rotate/k8s', permanent: true, }, { - source: "/consul/docs/k8s/operations/uninstall", - destination: "/consul/docs/upgrade/k8s/uninstall", + source: '/consul/docs/k8s/operations/uninstall', + destination: '/consul/docs/upgrade/k8s/uninstall', permanent: true, }, { - source: "/consul/docs/k8s/platforms/self-hosted-kubernetes", - destination: "/consul/docs/deploy/server/k8s/platform/self-hosted", + source: '/consul/docs/k8s/platforms/self-hosted-kubernetes', + destination: '/consul/docs/deploy/server/k8s/platform/self-hosted', permanent: true, }, { - source: "/consul/docs/k8s/service-sync", - destination: "/consul/docs/register/service/k8s/service-sync", + source: '/consul/docs/k8s/service-sync', + destination: '/consul/docs/register/service/k8s/service-sync', permanent: true, }, { - source: "/consul/docs/k8s/upgrade", - destination: "/consul/docs/upgrade/k8s", + source: '/consul/docs/k8s/upgrade', + destination: '/consul/docs/upgrade/k8s', permanent: true, }, { - source: "/consul/docs/k8s/upgrade/upgrade-cli", - destination: "/consul/docs/upgrade/k8s/consul-k8s", + source: '/consul/docs/k8s/upgrade/upgrade-cli', + destination: '/consul/docs/upgrade/k8s/consul-k8s', permanent: true, }, { - source: "/consul/docs/lambda", - destination: "/consul/docs/connect/lambda", + source: '/consul/docs/lambda', + destination: '/consul/docs/connect/lambda', permanent: true, }, { - source: "/consul/docs/lambda/invocation", - destination: "/consul/docs/connect/lambda/function", + source: '/consul/docs/lambda/invocation', + destination: '/consul/docs/connect/lambda/function', permanent: true, }, { - source: "/consul/docs/lambda/invoke-from-lambda", - destination: "/consul/docs/connect/lambda/service", + source: '/consul/docs/lambda/invoke-from-lambda', + destination: '/consul/docs/connect/lambda/service', permanent: true, }, { - source: "/consul/docs/lambda/registration", - destination: "/consul/docs/register/service/lambda", + source: '/consul/docs/lambda/registration', + destination: '/consul/docs/register/service/lambda', permanent: true, }, { - source: "/consul/docs/lambda/registration/automate", - destination: "/consul/docs/register/service/lambda/automatic", + source: '/consul/docs/lambda/registration/automate', + destination: '/consul/docs/register/service/lambda/automatic', permanent: true, }, { - source: "/consul/docs/lambda/registration/manual", - destination: "/consul/docs/register/service/lambda/manual", + source: '/consul/docs/lambda/registration/manual', + destination: '/consul/docs/register/service/lambda/manual', permanent: true, }, { - source: "/consul/docs/nia", - destination: "/consul/docs/automate/infrastructure", + source: '/consul/docs/nia', + destination: '/consul/docs/automate/infrastructure', permanent: true, }, { - source: "/consul/docs/nia/api", - destination: "/consul/docs/reference/cts/api", + source: '/consul/docs/nia/api', + destination: '/consul/docs/reference/cts/api', permanent: true, }, { - source: "/consul/docs/nia/api/health", - destination: "/consul/docs/reference/cts/api/health", + source: '/consul/docs/nia/api/health', + destination: '/consul/docs/reference/cts/api/health', permanent: true, }, { - source: "/consul/docs/nia/api/status", - destination: "/consul/docs/reference/cts/api/status", + source: '/consul/docs/nia/api/status', + destination: '/consul/docs/reference/cts/api/status', permanent: true, }, { - source: "/consul/docs/nia/api/tasks", - destination: "/consul/docs/reference/cts/api/tasks", + source: '/consul/docs/nia/api/tasks', + destination: '/consul/docs/reference/cts/api/tasks', permanent: true, }, { - source: "/consul/docs/nia/architecture", - destination: "/consul/docs/architecture/cts", + source: '/consul/docs/nia/architecture', + destination: '/consul/docs/architecture/cts', permanent: true, }, { - source: "/consul/docs/nia/cli", - destination: "/consul/docs/reference/cli/cts", + source: '/consul/docs/nia/cli', + destination: '/consul/docs/reference/cli/cts', permanent: true, }, { - source: "/consul/docs/nia/cli/start", - destination: "/consul/docs/reference/cli/cts/start", + source: '/consul/docs/nia/cli/start', + destination: '/consul/docs/reference/cli/cts/start', permanent: true, }, { - source: "/consul/docs/nia/cli/task", - destination: "/consul/docs/reference/cli/cts/task", + source: '/consul/docs/nia/cli/task', + destination: '/consul/docs/reference/cli/cts/task', permanent: true, }, { - source: "/consul/docs/nia/compatibility", - destination: "/consul/docs/reference/cts/compatibility", + source: '/consul/docs/nia/compatibility', + destination: '/consul/docs/reference/cts/compatibility', permanent: true, }, { - source: "/consul/docs/nia/configuration", - destination: "/consul/docs/automate/infrastructure/configure", + source: '/consul/docs/nia/configuration', + destination: '/consul/docs/automate/infrastructure/configure', permanent: true, }, { - source: "/consul/docs/nia/enterprise", - destination: "/consul/docs/enterprise/cts", + source: '/consul/docs/nia/enterprise', + destination: '/consul/docs/enterprise/cts', permanent: true, }, { - source: "/consul/docs/nia/enterprise/license", - destination: "/consul/docs/enterprise/license/cts", + source: '/consul/docs/nia/enterprise/license', + destination: '/consul/docs/enterprise/license/cts', permanent: true, }, { - source: "/consul/docs/nia/installation/configure", - destination: "/consul/docs/automate/infrastructure/configure", + source: '/consul/docs/nia/installation/configure', + destination: '/consul/docs/automate/infrastructure/configure', permanent: true, }, { - source: "/consul/docs/nia/installation/install", - destination: "/consul/docs/automate/infrastructure/install", + source: '/consul/docs/nia/installation/install', + destination: '/consul/docs/automate/infrastructure/install', permanent: true, }, { - source: "/consul/docs/nia/network-drivers", - destination: "/consul/docs/automate/infrastructure/network-driver", + source: '/consul/docs/nia/network-drivers', + destination: '/consul/docs/automate/infrastructure/network-driver', permanent: true, }, { - source: "/consul/docs/nia/network-drivers/hcp-terraform", - destination: "/consul/docs/automate/infrastructure/network-driver/hcp-terraform", + source: '/consul/docs/nia/network-drivers/hcp-terraform', + destination: + '/consul/docs/automate/infrastructure/network-driver/hcp-terraform', permanent: true, }, { - source: "/consul/docs/nia/network-drivers/terraform", - destination: "/consul/docs/automate/infrastructure/network-driver/terraform", + source: '/consul/docs/nia/network-drivers/terraform', + destination: + '/consul/docs/automate/infrastructure/network-driver/terraform', permanent: true, }, { - source: "/consul/docs/nia/tasks", - destination: "/consul/docs/automate/infrastructure/task", + source: '/consul/docs/nia/tasks', + destination: '/consul/docs/automate/infrastructure/task', permanent: true, }, { - source: "/consul/docs/nia/terraform-modules", - destination: "/consul/docs/automate/infrastructure/module", + source: '/consul/docs/nia/terraform-modules', + destination: '/consul/docs/automate/infrastructure/module', permanent: true, }, { - source: "/consul/docs/nia/usage/errors-ref", - destination: "/consul/docs/error-messages/cts", + source: '/consul/docs/nia/usage/errors-ref', + destination: '/consul/docs/error-messages/cts', permanent: true, }, { - source: "/consul/docs/nia/usage/requirements", - destination: "/consul/docs/automate/infrastructure/requirements", + source: '/consul/docs/nia/usage/requirements', + destination: '/consul/docs/automate/infrastructure/requirements', permanent: true, }, { - source: "/consul/docs/nia/usage/run", - destination: "/consul/docs/automate/infrastructure/run", + source: '/consul/docs/nia/usage/run', + destination: '/consul/docs/automate/infrastructure/run', permanent: true, }, { - source: "/consul/docs/nia/usage/run-ha", - destination: "/consul/docs/automate/infrastructure/high-availability", + source: '/consul/docs/nia/usage/run-ha', + destination: '/consul/docs/automate/infrastructure/high-availability', permanent: true, }, { - source: "/consul/docs/security", - destination: "/consul/docs/secure", + source: '/consul/docs/security', + destination: '/consul/docs/secure', permanent: true, }, { - source: "/consul/docs/security/acl", - destination: "/consul/docs/secure/acl", + source: '/consul/docs/security/acl', + destination: '/consul/docs/secure/acl', permanent: true, }, { - source: "/consul/docs/security/acl/acl-federated-datacenters", - destination: "/consul/docs/secure/acl/token/federation", + source: '/consul/docs/security/acl/acl-federated-datacenters', + destination: '/consul/docs/secure/acl/token/federation', permanent: true, }, { - source: "/consul/docs/security/acl/acl-policies", - destination: "/consul/docs/secure/acl/policy", + source: '/consul/docs/security/acl/acl-policies', + destination: '/consul/docs/secure/acl/policy', permanent: true, }, { - source: "/consul/docs/security/acl/acl-roles", - destination: "/consul/docs/secure/acl/role", + source: '/consul/docs/security/acl/acl-roles', + destination: '/consul/docs/secure/acl/role', permanent: true, }, { - source: "/consul/docs/security/acl/acl-rules", - destination: "/consul/docs/reference/acl/rule", + source: '/consul/docs/security/acl/acl-rules', + destination: '/consul/docs/reference/acl/rule', permanent: true, }, { - source: "/consul/docs/security/acl/auth-methods", - destination: "/consul/docs/secure/acl/auth-method", + source: '/consul/docs/security/acl/auth-methods', + destination: '/consul/docs/secure/acl/auth-method', permanent: true, }, { - source: "/consul/docs/security/acl/auth-methods/aws-iam", - destination: "/consul/docs/secure/acl/auth-method/aws", + source: '/consul/docs/security/acl/auth-methods/aws-iam', + destination: '/consul/docs/secure/acl/auth-method/aws', permanent: true, }, { - source: "/consul/docs/security/acl/auth-methods/jwt", - destination: "/consul/docs/secure/acl/auth-method/jwt", + source: '/consul/docs/security/acl/auth-methods/jwt', + destination: '/consul/docs/secure/acl/auth-method/jwt', permanent: true, }, { - source: "/consul/docs/security/acl/auth-methods/kubernetes", - destination: "/consul/docs/secure/acl/auth-method/k8s", + source: '/consul/docs/security/acl/auth-methods/kubernetes', + destination: '/consul/docs/secure/acl/auth-method/k8s', permanent: true, }, { - source: "/consul/docs/security/acl/auth-methods/oidc", - destination: "/consul/docs/secure/acl/auth-method/oidc", + source: '/consul/docs/security/acl/auth-methods/oidc', + destination: '/consul/docs/secure/acl/auth-method/oidc', permanent: true, }, { - source: "/consul/docs/security/acl/tokens", - destination: "/consul/docs/secure/acl/token", + source: '/consul/docs/security/acl/tokens', + destination: '/consul/docs/secure/acl/token', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-consul-esm-token", - destination: "/consul/docs/secure/acl/token/esm", + source: '/consul/docs/security/acl/tokens/create/create-a-consul-esm-token', + destination: '/consul/docs/secure/acl/token/esm', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-dns-token", - destination: "/consul/docs/secure/acl/token/dns", + source: '/consul/docs/security/acl/tokens/create/create-a-dns-token', + destination: '/consul/docs/secure/acl/token/dns', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-mesh-gateway-token", - destination: "/consul/docs/secure/acl/token/mesh-gateway", + source: + '/consul/docs/security/acl/tokens/create/create-a-mesh-gateway-token', + destination: '/consul/docs/secure/acl/token/mesh-gateway', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-replication-token", - destination: "/consul/docs/secure/acl/token/replication", + source: + '/consul/docs/security/acl/tokens/create/create-a-replication-token', + destination: '/consul/docs/secure/acl/token/replication', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-service-token", - destination: "/consul/docs/secure/acl/token/service", + source: '/consul/docs/security/acl/tokens/create/create-a-service-token', + destination: '/consul/docs/secure/acl/token/service', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-snapshot-agent-token", - destination: "/consul/docs/secure/acl/token/snapshot-agent", + source: + '/consul/docs/security/acl/tokens/create/create-a-snapshot-agent-token', + destination: '/consul/docs/secure/acl/token/snapshot-agent', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-terminating-gateway-token", - destination: "/consul/docs/secure/acl/token/terminating-gateway", + source: + '/consul/docs/security/acl/tokens/create/create-a-terminating-gateway-token', + destination: '/consul/docs/secure/acl/token/terminating-gateway', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-token-for-vault-consul-storage", - destination: "/consul/docs/secure/acl/token/vault-backend", + source: + '/consul/docs/security/acl/tokens/create/create-a-token-for-vault-consul-storage', + destination: '/consul/docs/secure/acl/token/vault-backend', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-a-ui-token", - destination: "/consul/docs/secure/acl/token/ui", + source: '/consul/docs/security/acl/tokens/create/create-a-ui-token', + destination: '/consul/docs/secure/acl/token/ui', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-an-agent-token", - destination: "/consul/docs/secure/acl/token/agent", + source: '/consul/docs/security/acl/tokens/create/create-an-agent-token', + destination: '/consul/docs/secure/acl/token/agent', permanent: true, }, { - source: "/consul/docs/security/acl/tokens/create/create-an-ingress-gateway-token", - destination: "/consul/docs/secure/acl/token/ingress-gateway", + source: + '/consul/docs/security/acl/tokens/create/create-an-ingress-gateway-token', + destination: '/consul/docs/secure/acl/token/ingress-gateway', permanent: true, }, { - source: "/consul/docs/security/encryption", - destination: "/consul/docs/secure/encryption", + source: '/consul/docs/security/encryption', + destination: '/consul/docs/secure/encryption', permanent: true, }, { - source: "/consul/docs/security/encryption/gossip", - destination: "/consul/docs/secure/encryption/gossip/enable", + source: '/consul/docs/security/encryption/gossip', + destination: '/consul/docs/secure/encryption/gossip/enable', permanent: true, }, { - source: "/consul/docs/security/encryption/mtls", - destination: "/consul/docs/secure/encryption/tls/mtls", + source: '/consul/docs/security/encryption/mtls', + destination: '/consul/docs/secure/encryption/tls/mtls', permanent: true, }, { - source: "/consul/docs/security/security-models", - destination: "/consul/docs/secure/security-model", + source: '/consul/docs/security/security-models', + destination: '/consul/docs/secure/security-model', permanent: true, }, { - source: "/consul/docs/security/security-models/core", - destination: "/consul/docs/secure/security-model/core", + source: '/consul/docs/security/security-models/core', + destination: '/consul/docs/secure/security-model/core', permanent: true, }, { - source: "/consul/docs/security/security-models/nia", - destination: "/consul/docs/secure/security-model/cts", + source: '/consul/docs/security/security-models/nia', + destination: '/consul/docs/secure/security-model/cts', permanent: true, }, { - source: "/consul/docs/services/configuration/checks-configuration-reference", - destination: "/consul/docs/reference/service/health-check", + source: + '/consul/docs/services/configuration/checks-configuration-reference', + destination: '/consul/docs/reference/service/health-check', permanent: true, }, { - source: "/consul/docs/services/configuration/services-configuration-overview", - destination: "/consul/docs/fundamentals/service", + source: + '/consul/docs/services/configuration/services-configuration-overview', + destination: '/consul/docs/fundamentals/service', permanent: true, }, { - source: "/consul/docs/services/configuration/services-configuration-reference", - destination: "/consul/docs/reference/service", + source: + '/consul/docs/services/configuration/services-configuration-reference', + destination: '/consul/docs/reference/service', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-cache", - destination: "/consul/docs/discover/dns/scale", + source: '/consul/docs/services/discovery/dns-cache', + destination: '/consul/docs/discover/dns/scale', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-configuration", - destination: "/consul/docs/discover/dns/configure", + source: '/consul/docs/services/discovery/dns-configuration', + destination: '/consul/docs/discover/dns/configure', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-dynamic-lookups", - destination: "/consul/docs/discover/service/dynamic", + source: '/consul/docs/services/discovery/dns-dynamic-lookups', + destination: '/consul/docs/discover/service/dynamic', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-forwarding", - destination: "/consul/docs/manage/dns/forwarding", + source: '/consul/docs/services/discovery/dns-forwarding', + destination: '/consul/docs/manage/dns/forwarding', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-forwarding/enable", - destination: "/consul/docs/manage/dns/forwarding/enable", + source: '/consul/docs/services/discovery/dns-forwarding/enable', + destination: '/consul/docs/manage/dns/forwarding/enable', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-overview", - destination: "/consul/docs/discover/dns", + source: '/consul/docs/services/discovery/dns-overview', + destination: '/consul/docs/discover/dns', permanent: true, }, { - source: "/consul/docs/services/discovery/dns-static-lookups", - destination: "/consul/docs/discover/service/static", + source: '/consul/docs/services/discovery/dns-static-lookups', + destination: '/consul/docs/discover/service/static', permanent: true, }, { - source: "/consul/docs/services/services", - destination: "/consul/docs/fundamentals/service", + source: '/consul/docs/services/services', + destination: '/consul/docs/fundamentals/service', permanent: true, }, { - source: "/consul/docs/services/usage/checks", - destination: "/consul/docs/register/health-check/vm", + source: '/consul/docs/services/usage/checks', + destination: '/consul/docs/register/health-check/vm', permanent: true, }, { - source: "/consul/docs/services/usage/define-services", - destination: "/consul/docs/register/service/vm/define", + source: '/consul/docs/services/usage/define-services', + destination: '/consul/docs/register/service/vm/define', permanent: true, }, { - source: "/consul/docs/services/usage/register-services-checks", - destination: "/consul/docs/register/service/vm", + source: '/consul/docs/services/usage/register-services-checks', + destination: '/consul/docs/register/service/vm', permanent: true, }, { - source: "/consul/docs/troubleshoot/common-errors", - destination: "/consul/docs/error-messages/consul", + source: '/consul/docs/troubleshoot/common-errors', + destination: '/consul/docs/error-messages/consul', permanent: true, }, { - source: "/consul/docs/troubleshoot/troubleshoot-services", - destination: "/consul/docs/troubleshoot/service-communication", + source: '/consul/docs/troubleshoot/troubleshoot-services', + destination: '/consul/docs/troubleshoot/service-communication', permanent: true, }, { - source: "/consul/docs/upgrading", - destination: "/consul/docs/upgrade", + source: '/consul/docs/upgrading', + destination: '/consul/docs/upgrade', permanent: true, }, { - source: "/consul/docs/upgrading/compatibility", - destination: "/consul/docs/upgrade/compatibility", + source: '/consul/docs/upgrading/compatibility', + destination: '/consul/docs/upgrade/compatibility', permanent: true, }, { - source: "/consul/docs/upgrading/instructions", - destination: "/consul/docs/upgrade/instructions", + source: '/consul/docs/upgrading/instructions', + destination: '/consul/docs/upgrade/instructions', permanent: true, }, { - source: "/consul/docs/upgrading/instructions/general-process", - destination: "/consul/docs/upgrade/instructions/general", + source: '/consul/docs/upgrading/instructions/general-process', + destination: '/consul/docs/upgrade/instructions/general', permanent: true, }, { - source: "/consul/docs/upgrading/instructions/upgrade-to-1-10-x", - destination: "/consul/docs/upgrade/instructions/upgrade-to-1-10-x", + source: '/consul/docs/upgrading/instructions/upgrade-to-1-10-x', + destination: '/consul/docs/upgrade/instructions/upgrade-to-1-10-x', permanent: true, }, { - source: "/consul/docs/upgrading/instructions/upgrade-to-1-2-x", - destination: "/consul/docs/upgrade/instructions/upgrade-to-1-2-x", + source: '/consul/docs/upgrading/instructions/upgrade-to-1-2-x', + destination: '/consul/docs/upgrade/instructions/upgrade-to-1-2-x', permanent: true, }, { - source: "/consul/docs/upgrading/instructions/upgrade-to-1-6-x", - destination: "/consul/docs/upgrade/instructions/upgrade-to-1-6-x", + source: '/consul/docs/upgrading/instructions/upgrade-to-1-6-x', + destination: '/consul/docs/upgrade/instructions/upgrade-to-1-6-x', permanent: true, }, { - source: "/consul/docs/upgrading/instructions/upgrade-to-1-8-x", - destination: "/consul/docs/upgrade/instructions/upgrade-to-1-8-x", + source: '/consul/docs/upgrading/instructions/upgrade-to-1-8-x', + destination: '/consul/docs/upgrade/instructions/upgrade-to-1-8-x', permanent: true, }, { - source: "/consul/docs/upgrading/upgrade-specific", - destination: "/consul/docs/upgrade/version-specific", + source: '/consul/docs/upgrading/upgrade-specific', + destination: '/consul/docs/upgrade/version-specific', permanent: true, }, /////////////////////////////////// // Versioned docs compatibility // /////////////////////////////////// { - source: "/consul/docs/:version(v1\\.(?:11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/agent", - destination: "/consul/docs/:version/agent", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/agent', + destination: '/consul/docs/:version/agent', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry", - destination: "/consul/docs/:version/agent/config-entries", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry', + destination: '/consul/docs/:version/agent/config-entries', + permanent: true, }, { - source: "/consul/commands/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/agent", - destination: "/consul/docs/:version/agent/config/cli-flags", - permanent: true + source: + '/consul/commands/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/agent', + destination: '/consul/docs/:version/agent/config/cli-flags', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/configuration-file", - destination: "/consul/docs/:version/agent/config/config-files", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/configuration-file', + destination: '/consul/docs/:version/agent/config/config-files', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit", - destination: "/consul/docs/:version/agent/limits", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit', + destination: '/consul/docs/:version/agent/limits', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/initialize", - destination: "/consul/docs/:version/agent/limits/usage/init-rate-limits", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/initialize', + destination: '/consul/docs/:version/agent/limits/usage/init-rate-limits', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/source", - destination: "/consul/docs/:version/agent/limits/usage/limit-request-rates-from-ips", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/source', + destination: + '/consul/docs/:version/agent/limits/usage/limit-request-rates-from-ips', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/monitor", - destination: "/consul/docs/:version/agent/limits/usage/monitor-rate-limits", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/monitor', + destination: '/consul/docs/:version/agent/limits/usage/monitor-rate-limits', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/global", - destination: "/consul/docs/:version/agent/limits/usage/set-global-traffic-rate-limits", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/rate-limit/global', + destination: + '/consul/docs/:version/agent/limits/usage/set-global-traffic-rate-limits', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/alerts", - destination: "/consul/docs/:version/agent/monitor/alerts", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/alerts', + destination: '/consul/docs/:version/agent/monitor/alerts', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor", - destination: "/consul/docs/:version/agent/monitor/components", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor', + destination: '/consul/docs/:version/agent/monitor/components', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/agent", - destination: "/consul/docs/:version/agent/monitor/telemetry", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/agent', + destination: '/consul/docs/:version/agent/monitor/telemetry', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/sentinel", - destination: "/consul/docs/:version/agent/sentinel", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/sentinel', + destination: '/consul/docs/:version/agent/sentinel', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal", - destination: "/consul/docs/:version/agent/wal-logstore", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal', + destination: '/consul/docs/:version/agent/wal-logstore', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal", - destination: "/consul/docs/:version/agent/wal-logstore/enable", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal', + destination: '/consul/docs/:version/agent/wal-logstore/enable', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal/monitor-raft", - destination: "/consul/docs/:version/agent/wal-logstore/monitoring", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal/monitor-raft', + destination: '/consul/docs/:version/agent/wal-logstore/monitoring', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal/revert-boltdb", - destination: "/consul/docs/:version/agent/wal-logstore/revert-to-boltdb", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/wal/revert-boltdb', + destination: '/consul/docs/:version/agent/wal-logstore/revert-to-boltdb', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane", - destination: "/consul/docs/:version/architecture", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane', + destination: '/consul/docs/:version/architecture', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consistency", - destination: "/consul/docs/:version/architecture/anti-entropy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consistency', + destination: '/consul/docs/:version/architecture/anti-entropy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/capacity", - destination: "/consul/docs/:version/architecture/capacity-planning", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/capacity', + destination: '/consul/docs/:version/architecture/capacity-planning', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/catalog", - destination: "/consul/docs/:version/architecture/catalog", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/catalog', + destination: '/consul/docs/:version/architecture/catalog', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consensus", - destination: "/consul/docs/:version/architecture/consensus", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consensus', + destination: '/consul/docs/:version/architecture/consensus', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/gossip", - destination: "/consul/docs/:version/architecture/gossip", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/gossip', + destination: '/consul/docs/:version/architecture/gossip', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/reliability", - destination: "/consul/docs/:version/architecture/improving-consul-resilience", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/reliability', + destination: + '/consul/docs/:version/architecture/improving-consul-resilience', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consistency", - destination: "/consul/docs/:version/architecture/jepsen", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/concept/consistency', + destination: '/consul/docs/:version/architecture/jepsen', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale", - destination: "/consul/docs/:version/architecture/scale", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale', + destination: '/consul/docs/:version/architecture/scale', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-discovery", - destination: "/consul/docs/:version/concepts/service-discovery", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-discovery', + destination: '/consul/docs/:version/concepts/service-discovery', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-mesh", - destination: "/consul/docs/:version/concepts/service-mesh", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-mesh', + destination: '/consul/docs/:version/concepts/service-mesh', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate", - destination: "/consul/docs/:version/connect/ca", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate', + destination: '/consul/docs/:version/connect/ca', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/acm", - destination: "/consul/docs/:version/connect/ca/aws", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/acm', + destination: '/consul/docs/:version/connect/ca/aws', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/built-in", - destination: "/consul/docs/:version/connect/ca/consul", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/built-in', + destination: '/consul/docs/:version/connect/ca/consul', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/vault", - destination: "/consul/docs/:version/connect/ca/vault", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/vault', + destination: '/consul/docs/:version/connect/ca/vault', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering", - destination: "/consul/docs/:version/connect/cluster-peering", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering', + destination: '/consul/docs/:version/connect/cluster-peering', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/tech-specs", - destination: "/consul/docs/:version/connect/cluster-peering/tech-specs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/tech-specs', + destination: '/consul/docs/:version/connect/cluster-peering/tech-specs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/sameness-group/vm", - destination: "/consul/docs/:version/connect/cluster-peering/usage/create-sameness-groups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/sameness-group/vm', + destination: + '/consul/docs/:version/connect/cluster-peering/usage/create-sameness-groups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/establish/vm", - destination: "/consul/docs/:version/connect/cluster-peering/usage/establish-cluster-peering", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/establish/vm', + destination: + '/consul/docs/:version/connect/cluster-peering/usage/establish-cluster-peering', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/manage/vm", - destination: "/consul/docs/:version/connect/cluster-peering/usage/manage-connections", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/manage/vm', + destination: + '/consul/docs/:version/connect/cluster-peering/usage/manage-connections', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/cluster-peering/vm", - destination: "/consul/docs/:version/connect/cluster-peering/usage/peering-traffic-management", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/cluster-peering/vm', + destination: + '/consul/docs/:version/connect/cluster-peering/usage/peering-traffic-management', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry", - destination: "/consul/docs/:version/connect/config-entries", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry', + destination: '/consul/docs/:version/connect/config-entries', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/api-gateway", - destination: "/consul/docs/:version/connect/config-entries/api-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/api-gateway', + destination: '/consul/docs/:version/connect/config-entries/api-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/control-plane-request-limit", - destination: "/consul/docs/:version/connect/config-entries/control-plane-request-limit", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/control-plane-request-limit', + destination: + '/consul/docs/:version/connect/config-entries/control-plane-request-limit', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/exported-services", - destination: "/consul/docs/:version/connect/config-entries/exported-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/exported-services', + destination: + '/consul/docs/:version/connect/config-entries/exported-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/file-system-certificate", - destination: "/consul/docs/:version/connect/config-entries/file-system-certificate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/file-system-certificate', + destination: + '/consul/docs/:version/connect/config-entries/file-system-certificate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/http-route", - destination: "/consul/docs/:version/connect/config-entries/http-route", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/http-route', + destination: '/consul/docs/:version/connect/config-entries/http-route', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/ingress-gateway", - destination: "/consul/docs/:version/connect/config-entries/ingress-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/ingress-gateway', + destination: '/consul/docs/:version/connect/config-entries/ingress-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/inline-certificate", - destination: "/consul/docs/:version/connect/config-entries/inline-certificate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/inline-certificate', + destination: + '/consul/docs/:version/connect/config-entries/inline-certificate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/jwt-provider", - destination: "/consul/docs/:version/connect/config-entries/jwt-provider", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/jwt-provider', + destination: '/consul/docs/:version/connect/config-entries/jwt-provider', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/mesh", - destination: "/consul/docs/:version/connect/config-entries/mesh", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/mesh', + destination: '/consul/docs/:version/connect/config-entries/mesh', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/proxy-defaults", - destination: "/consul/docs/:version/connect/config-entries/proxy-defaults", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/proxy-defaults', + destination: '/consul/docs/:version/connect/config-entries/proxy-defaults', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/registration", - destination: "/consul/docs/:version/connect/config-entries/registration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/registration', + destination: '/consul/docs/:version/connect/config-entries/registration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/sameness-group", - destination: "/consul/docs/:version/connect/config-entries/sameness-group", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/sameness-group', + destination: '/consul/docs/:version/connect/config-entries/sameness-group', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-defaults", - destination: "/consul/docs/:version/connect/config-entries/service-defaults", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-defaults', + destination: + '/consul/docs/:version/connect/config-entries/service-defaults', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-intentions", - destination: "/consul/docs/:version/connect/config-entries/service-intentions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-intentions', + destination: + '/consul/docs/:version/connect/config-entries/service-intentions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-resolver", - destination: "/consul/docs/:version/connect/config-entries/service-resolver", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-resolver', + destination: + '/consul/docs/:version/connect/config-entries/service-resolver', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-router", - destination: "/consul/docs/:version/connect/config-entries/service-router", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-router', + destination: '/consul/docs/:version/connect/config-entries/service-router', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-splitter", - destination: "/consul/docs/:version/connect/config-entries/service-splitter", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/service-splitter', + destination: + '/consul/docs/:version/connect/config-entries/service-splitter', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/tcp-route", - destination: "/consul/docs/:version/connect/config-entries/tcp-route", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/tcp-route', + destination: '/consul/docs/:version/connect/config-entries/tcp-route', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/terminating-gateway", - destination: "/consul/docs/:version/connect/config-entries/terminating-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/config-entry/terminating-gateway', + destination: + '/consul/docs/:version/connect/config-entries/terminating-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/connect", - destination: "/consul/docs/:version/connect/connect-internals", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/connect', + destination: '/consul/docs/:version/connect/connect-internals', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/gateway", - destination: "/consul/docs/:version/connect/connectivity-tasks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/gateway', + destination: '/consul/docs/:version/connect/connectivity-tasks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane/dataplane", - destination: "/consul/docs/:version/connect/dataplane", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane/dataplane', + destination: '/consul/docs/:version/connect/dataplane', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dataplane/cli", - destination: "/consul/docs/:version/connect/dataplane/consul-dataplane", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dataplane/cli', + destination: '/consul/docs/:version/connect/dataplane/consul-dataplane', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dataplane/telemetry", - destination: "/consul/docs/:version/connect/dataplane/telemetry", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dataplane/telemetry', + destination: '/consul/docs/:version/connect/dataplane/telemetry', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/mesh", - destination: "/consul/docs/:version/connect/dev", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/mesh', + destination: '/consul/docs/:version/connect/dev', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/distributed-tracing", - destination: "/consul/docs/:version/connect/distributed-tracing", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/distributed-tracing', + destination: '/consul/docs/:version/connect/distributed-tracing', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/gateway", - destination: "/consul/docs/:version/connect/gateways", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/gateway', + destination: '/consul/docs/:version/connect/gateways', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south", - destination: "/consul/docs/:version/connect/gateways/api-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south', + destination: '/consul/docs/:version/connect/gateways/api-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gateway", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gateway', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewayclass", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewayclass", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewayclass', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewayclass', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewayclassconfig", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewayclassconfig", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewayclassconfig', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewayclassconfig', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewaypolicy", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewaypolicy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/gatewaypolicy', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/gatewaypolicy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/meshservice", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/meshservice", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/meshservice', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/meshservice', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routeauthfilter", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/routeauthfilter", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routeauthfilter', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/routeauthfilter', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routeretryfilter", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/routeretryfilter", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routeretryfilter', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/routeretryfilter', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routes", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/routes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routes', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/routes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routetimeoutfilter", - destination: "/consul/docs/:version/connect/gateways/api-gateway/configuration/routetimeoutfilter", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/api-gateway/routetimeoutfilter', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/configuration/routetimeoutfilter', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/reroute", - destination: "/consul/docs/:version/connect/gateways/api-gateway/define-routes/reroute-http-requests", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/reroute', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/define-routes/reroute-http-requests', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/peer", - destination: "/consul/docs/:version/connect/gateways/api-gateway/define-routes/route-to-peered-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/peer', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/define-routes/route-to-peered-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/route", - destination: "/consul/docs/:version/connect/gateways/api-gateway/define-routes/routes-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/route', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/define-routes/routes-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/vm/route", - destination: "/consul/docs/:version/connect/gateways/api-gateway/define-routes/routes-vms", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/vm/route', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/define-routes/routes-vms', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/listener", - destination: "/consul/docs/:version/connect/gateways/api-gateway/deploy/listeners-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/listener', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/deploy/listeners-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/vm/listener", - destination: "/consul/docs/:version/connect/gateways/api-gateway/deploy/listeners-vms", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/vm/listener', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/deploy/listeners-vms', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/api-gateway", - destination: "/consul/docs/:version/connect/gateways/api-gateway/errors", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/api-gateway', + destination: '/consul/docs/:version/connect/gateways/api-gateway/errors', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/enable", - destination: "/consul/docs/:version/connect/gateways/api-gateway/install-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/enable', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/install-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/encrypt", - destination: "/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/encrypt-vms", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/encrypt', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/encrypt-vms', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/jwt/k8s", - destination: "/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/verify-jwts-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/jwt/k8s', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/verify-jwts-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/jwt/vm", - destination: "/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/verify-jwts-vms", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/secure-traffic/jwt/vm', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/secure-traffic/verify-jwts-vms', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/tech-specs", - destination: "/consul/docs/:version/connect/gateways/api-gateway/tech-specs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/api-gateway/k8s/tech-specs', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/tech-specs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/api-gateway", - destination: "/consul/docs/:version/connect/gateways/api-gateway/upgrades-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/api-gateway', + destination: + '/consul/docs/:version/connect/gateways/api-gateway/upgrades-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway", - destination: "/consul/docs/:version/connect/gateways/ingress-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway', + destination: '/consul/docs/:version/connect/gateways/ingress-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/external", - destination: "/consul/docs/:version/connect/gateways/ingress-gateway/tls-external-service", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/external', + destination: + '/consul/docs/:version/connect/gateways/ingress-gateway/tls-external-service', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/vm", - destination: "/consul/docs/:version/connect/gateways/ingress-gateway/usage", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/vm', + destination: '/consul/docs/:version/connect/gateways/ingress-gateway/usage', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway', + destination: '/consul/docs/:version/connect/gateways/mesh-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/cluster-peer", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway/peering-via-mesh-gateways", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/cluster-peer', + destination: + '/consul/docs/:version/connect/gateways/mesh-gateway/peering-via-mesh-gateways', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/admin-partition", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway/service-to-service-traffic-partitions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/admin-partition', + destination: + '/consul/docs/:version/connect/gateways/mesh-gateway/service-to-service-traffic-partitions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/federation", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway/service-to-service-traffic-wan-datacenters", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/federation', + destination: + '/consul/docs/:version/connect/gateways/mesh-gateway/service-to-service-traffic-wan-datacenters', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/enable", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway/wan-federation-via-mesh-gateways", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/mesh-gateway/enable', + destination: + '/consul/docs/:version/connect/gateways/mesh-gateway/wan-federation-via-mesh-gateways', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/terminating-gateway", - destination: "/consul/docs/:version/connect/gateways/terminating-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/terminating-gateway', + destination: '/consul/docs/:version/connect/gateways/terminating-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention", - destination: "/consul/docs/:version/connect/intentions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention', + destination: '/consul/docs/:version/connect/intentions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention/create", - destination: "/consul/docs/:version/connect/intentions/create-manage-intentions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention/create', + destination: + '/consul/docs/:version/connect/intentions/create-manage-intentions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention/jwt", - destination: "/consul/docs/:version/connect/intentions/jwt-authorization", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention/jwt', + destination: '/consul/docs/:version/connect/intentions/jwt-authorization', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention", - destination: "/consul/docs/:version/connect/intentions/legacy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/intention', + destination: '/consul/docs/:version/connect/intentions/legacy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic", - destination: "/consul/docs/:version/connect/manage-traffic", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic', + destination: '/consul/docs/:version/connect/manage-traffic', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/discovery-chain", - destination: "/consul/docs/:version/connect/manage-traffic/discovery-chain", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/discovery-chain', + destination: '/consul/docs/:version/connect/manage-traffic/discovery-chain', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover", - destination: "/consul/docs/:version/connect/manage-traffic/failover", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover', + destination: '/consul/docs/:version/connect/manage-traffic/failover', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/sameness-group", - destination: "/consul/docs/:version/connect/manage-traffic/failover/sameness", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/sameness-group', + destination: + '/consul/docs/:version/connect/manage-traffic/failover/sameness', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/fault-injection", - destination: "/consul/docs/:version/connect/manage-traffic/fault-injection", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/fault-injection', + destination: '/consul/docs/:version/connect/manage-traffic/fault-injection', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/rate-limit", - destination: "/consul/docs/:version/connect/manage-traffic/limit-request-rates", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/rate-limit', + destination: + '/consul/docs/:version/connect/manage-traffic/limit-request-rates', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/route-local", - destination: "/consul/docs/:version/connect/manage-traffic/route-to-local-upstreams", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/route-local', + destination: + '/consul/docs/:version/connect/manage-traffic/route-to-local-upstreams', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/native", - destination: "/consul/docs/:version/connect/native", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/native', + destination: '/consul/docs/:version/connect/native', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/native/go", - destination: "/consul/docs/:version/connect/native/go", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/native/go', + destination: '/consul/docs/:version/connect/native/go', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/tech-specs", - destination: "/consul/docs/:version/connect/observability", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/tech-specs', + destination: '/consul/docs/:version/connect/observability', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/access-log", - destination: "/consul/docs/:version/connect/observability/access-logs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/access-log', + destination: '/consul/docs/:version/connect/observability/access-logs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana", - destination: "/consul/docs/:version/connect/observability/grafanadashboards", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/dataplane", - destination: "/consul/docs/:version/connect/observability/grafanadashboards/consuldataplanedashboard", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/dataplane', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards/consuldataplanedashboard', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/consul-k8s", - destination: "/consul/docs/:version/connect/observability/grafanadashboards/consulk8sdashboard", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/consul-k8s', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards/consulk8sdashboard', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/server", - destination: "/consul/docs/:version/connect/observability/grafanadashboards/consulserverdashboard", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/server', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards/consulserverdashboard', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service-to-service", - destination: "/consul/docs/:version/connect/observability/grafanadashboards/service-to-servicedashboard", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service-to-service', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards/service-to-servicedashboard', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service", - destination: "/consul/docs/:version/connect/observability/grafanadashboards/servicedashboard", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service', + destination: + '/consul/docs/:version/connect/observability/grafanadashboards/servicedashboard', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service-to-service", - destination: "/consul/docs/:version/connect/observability/service", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/grafana/service-to-service', + destination: '/consul/docs/:version/connect/observability/service', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/telemetry/vm", - destination: "/consul/docs/:version/connect/observability/ui-visualization", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/telemetry/vm', + destination: '/consul/docs/:version/connect/observability/ui-visualization', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy", - destination: "/consul/docs/:version/connect/proxies", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy', + destination: '/consul/docs/:version/connect/proxies', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/built-in", - destination: "/consul/docs/:version/connect/proxies/built-in", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/built-in', + destination: '/consul/docs/:version/connect/proxies/built-in', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/mesh", - destination: "/consul/docs/:version/connect/proxies/deploy-service-mesh-proxies", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/mesh', + destination: + '/consul/docs/:version/connect/proxies/deploy-service-mesh-proxies', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/sidecar", - destination: "/consul/docs/:version/connect/proxies/deploy-sidecar-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/sidecar', + destination: + '/consul/docs/:version/connect/proxies/deploy-sidecar-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/envoy", - destination: "/consul/docs/:version/connect/proxies/envoy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/envoy', + destination: '/consul/docs/:version/connect/proxies/envoy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension', + destination: '/consul/docs/:version/connect/proxies/envoy-extensions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/ext-authz", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/configuration/ext-authz", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/ext-authz', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/configuration/ext-authz', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/otel", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/configuration/otel-access-logging", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/otel', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/configuration/otel-access-logging', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/property-override", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/configuration/property-override", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/property-override', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/configuration/property-override', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/wasm", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/configuration/wasm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/extensions/wasm', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/configuration/wasm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/apigee-external-authz", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/apigee-ext-authz", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/apigee-external-authz', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/apigee-ext-authz', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/external-authz", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/ext-authz", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/external-authz', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/ext-authz', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/lambda", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/lambda", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/lambda', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/lambda', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/lua", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/lua", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/lua', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/lua', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/otel-access-logging", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/otel-access-logging", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/otel-access-logging', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/otel-access-logging', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/property-override", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/property-override", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/property-override', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/property-override', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/wasm", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/wasm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/wasm', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/wasm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/custom", - destination: "/consul/docs/:version/connect/proxies/integrate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/custom', + destination: '/consul/docs/:version/connect/proxies/integrate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/connect-proxy", - destination: "/consul/docs/:version/connect/proxies/proxy-config-reference", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/connect-proxy', + destination: '/consul/docs/:version/connect/proxies/proxy-config-reference', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/best-practice", - destination: "/consul/docs/:version/connect/security", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/best-practice', + destination: '/consul/docs/:version/connect/security', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case", - destination: "/consul/docs/:version/consul-vs-other", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case', + destination: '/consul/docs/:version/consul-vs-other', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/api-gateway", - destination: "/consul/docs/:version/consul-vs-other/api-gateway-compare", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/api-gateway', + destination: '/consul/docs/:version/consul-vs-other/api-gateway-compare', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/config-management", - destination: "/consul/docs/:version/consul-vs-other/config-management-compare", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/config-management', + destination: + '/consul/docs/:version/consul-vs-other/config-management-compare', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/dns", - destination: "/consul/docs/:version/consul-vs-other/dns-tools-compare", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/dns', + destination: '/consul/docs/:version/consul-vs-other/dns-tools-compare', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-mesh", - destination: "/consul/docs/:version/consul-vs-other/service-mesh-compare", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/use-case/service-mesh', + destination: '/consul/docs/:version/consul-vs-other/service-mesh-compare', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/kv", - destination: "/consul/docs/:version/dynamic-app-config/kv", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/kv', + destination: '/consul/docs/:version/dynamic-app-config/kv', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/kv/store", - destination: "/consul/docs/:version/dynamic-app-config/kv/store", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/kv/store', + destination: '/consul/docs/:version/dynamic-app-config/kv/store', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/session", - destination: "/consul/docs/:version/dynamic-app-config/sessions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/session', + destination: '/consul/docs/:version/dynamic-app-config/sessions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/application-leader-election", - destination: "/consul/docs/:version/dynamic-app-config/sessions/application-leader-election", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/application-leader-election', + destination: + '/consul/docs/:version/dynamic-app-config/sessions/application-leader-election', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/watch", - destination: "/consul/docs/:version/dynamic-app-config/watches", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/watch', + destination: '/consul/docs/:version/dynamic-app-config/watches', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/ecs", - destination: "/consul/docs/:version/ecs/architecture", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/ecs', + destination: '/consul/docs/:version/ecs/architecture', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/task-bind-address", - destination: "/consul/docs/:version/ecs/deploy/bind-addresses", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/task-bind-address', + destination: '/consul/docs/:version/ecs/deploy/bind-addresses', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/ecs", - destination: "/consul/docs/:version/ecs/deploy/configure-routes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/ecs', + destination: '/consul/docs/:version/ecs/deploy/configure-routes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/manual", - destination: "/consul/docs/:version/ecs/deploy/manual", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/manual', + destination: '/consul/docs/:version/ecs/deploy/manual', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/migrate", - destination: "/consul/docs/:version/ecs/deploy/migrate-existing-tasks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/migrate', + destination: '/consul/docs/:version/ecs/deploy/migrate-existing-tasks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/", - destination: "/consul/docs/:version/ecs/deploy/terraform", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/', + destination: '/consul/docs/:version/ecs/deploy/terraform', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/ecs", - destination: "/consul/docs/:version/ecs/enterprise", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/ecs', + destination: '/consul/docs/:version/ecs/enterprise', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/ecs", - destination: "/consul/docs/:version/ecs/reference/compatibility", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/ecs', + destination: '/consul/docs/:version/ecs/reference/compatibility', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs", - destination: "/consul/docs/:version/ecs/reference/configuration-reference", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs', + destination: '/consul/docs/:version/ecs/reference/configuration-reference', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs/server-json", - destination: "/consul/docs/:version/ecs/reference/consul-server-json", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs/server-json', + destination: '/consul/docs/:version/ecs/reference/consul-server-json', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs/tech-specs", - destination: "/consul/docs/:version/ecs/tech-specs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/ecs/tech-specs', + destination: '/consul/docs/:version/ecs/tech-specs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/ecs/dataplane", - destination: "/consul/docs/:version/ecs/upgrade-to-dataplanes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/ecs/dataplane', + destination: '/consul/docs/:version/ecs/upgrade-to-dataplanes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/admin-partition", - destination: "/consul/docs/:version/enterprise/admin-partitions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/admin-partition', + destination: '/consul/docs/:version/enterprise/admin-partitions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/log/audit", - destination: "/consul/docs/:version/enterprise/audit-logging", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/log/audit', + destination: '/consul/docs/:version/enterprise/audit-logging', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/automated-backup", - destination: "/consul/docs/:version/enterprise/backups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/automated-backup', + destination: '/consul/docs/:version/enterprise/backups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/downgrade", - destination: "/consul/docs/:version/enterprise/ent-to-ce-downgrades", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/downgrade', + destination: '/consul/docs/:version/enterprise/ent-to-ce-downgrades', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/network-area", - destination: "/consul/docs/:version/enterprise/federation", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/network-area', + destination: '/consul/docs/:version/enterprise/federation', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/fips", - destination: "/consul/docs/:version/enterprise/fips", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/fips', + destination: '/consul/docs/:version/enterprise/fips', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license", - destination: "/consul/docs/:version/enterprise/license/overview", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license', + destination: '/consul/docs/:version/enterprise/license/overview', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license/reporting", - destination: "/consul/docs/:version/enterprise/license/utilization-reporting", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license/reporting', + destination: + '/consul/docs/:version/enterprise/license/utilization-reporting', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/lts", - destination: "/consul/docs/:version/enterprise/long-term-support", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/lts', + destination: '/consul/docs/:version/enterprise/long-term-support', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace", - destination: "/consul/docs/:version/enterprise/namespaces", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace', + destination: '/consul/docs/:version/enterprise/namespaces', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/network-segment/vm", - destination: "/consul/docs/:version/enterprise/network-segments/create-network-segment", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/network-segment/vm', + destination: + '/consul/docs/:version/enterprise/network-segments/create-network-segment', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/network-segment", - destination: "/consul/docs/:version/enterprise/network-segments/network-segments-overview", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/network-segment', + destination: + '/consul/docs/:version/enterprise/network-segments/network-segments-overview', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/read-replica", - destination: "/consul/docs/:version/enterprise/read-scale", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/read-replica', + destination: '/consul/docs/:version/enterprise/read-scale', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/redundancy-zone", - destination: "/consul/docs/:version/enterprise/redundancy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/redundancy-zone', + destination: '/consul/docs/:version/enterprise/redundancy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/automated", - destination: "/consul/docs/:version/enterprise/upgrades", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/automated', + destination: '/consul/docs/:version/enterprise/upgrades', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/install", - destination: "/consul/docs/:version/install", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/install', + destination: '/consul/docs/:version/install', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/bootstrap", - destination: "/consul/docs/:version/install/bootstrapping", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/bootstrap', + destination: '/consul/docs/:version/install/bootstrapping', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/cloud-auto-join", - destination: "/consul/docs/:version/install/cloud-auto-join", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/cloud-auto-join', + destination: '/consul/docs/:version/install/cloud-auto-join', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/glossary", - destination: "/consul/docs/:version/install/glossary", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/glossary', + destination: '/consul/docs/:version/install/glossary', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/bootstrap", - destination: "/consul/docs/:version/install/manual-bootstrap", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/bootstrap', + destination: '/consul/docs/:version/install/manual-bootstrap', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/server", - destination: "/consul/docs/:version/install/performance", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/server', + destination: '/consul/docs/:version/install/performance', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/ports", - destination: "/consul/docs/:version/install/ports", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/architecture/ports', + destination: '/consul/docs/:version/install/ports', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/consul-tools", - destination: "/consul/docs/:version/integrate/download-tools", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/consul-tools', + destination: '/consul/docs/:version/integrate/download-tools', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/nia", - destination: "/consul/docs/:version/integrate/nia-integration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/nia', + destination: '/consul/docs/:version/integrate/nia-integration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/consul", - destination: "/consul/docs/:version/integrate/partnerships", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/consul', + destination: '/consul/docs/:version/integrate/partnerships', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture", - destination: "/consul/docs/:version/internals", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture', + destination: '/consul/docs/:version/internals', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl", - destination: "/consul/docs/:version/internals/acl", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl', + destination: '/consul/docs/:version/internals/acl', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/annotation-label", - destination: "/consul/docs/:version/k8s/annotations-and-labels", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/annotation-label', + destination: '/consul/docs/:version/k8s/annotations-and-labels', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane/k8s", - destination: "/consul/docs/:version/k8s/architecture", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/control-plane/k8s', + destination: '/consul/docs/:version/k8s/architecture', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/compatibility", - destination: "/consul/docs/:version/k8s/compatibility", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/compatibility', + destination: '/consul/docs/:version/k8s/compatibility', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s", - destination: "/consul/docs/:version/k8s/connect", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s', + destination: '/consul/docs/:version/k8s/connect', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/tech-specs/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/tech-specs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/tech-specs/k8s', + destination: '/consul/docs/:version/k8s/connect/cluster-peering/tech-specs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/sameness-group/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/usage/create-sameness-groups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/sameness-group/k8s', + destination: + '/consul/docs/:version/k8s/connect/cluster-peering/usage/create-sameness-groups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/establish/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/usage/establish-peering", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/establish/k8s', + destination: + '/consul/docs/:version/k8s/connect/cluster-peering/usage/establish-peering', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/cluster-peering/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/usage/l7-traffic", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/cluster-peering/k8s', + destination: + '/consul/docs/:version/k8s/connect/cluster-peering/usage/l7-traffic', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/manage/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/usage/manage-peering", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/cluster-peering/manage/k8s', + destination: + '/consul/docs/:version/k8s/connect/cluster-peering/usage/manage-peering', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/k8s", - destination: "/consul/docs/:version/k8s/connect/connect-ca-provider", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/k8s', + destination: '/consul/docs/:version/k8s/connect/connect-ca-provider', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/health-check/k8s", - destination: "/consul/docs/:version/k8s/connect/health", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/health-check/k8s', + destination: '/consul/docs/:version/k8s/connect/health', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-controller", - destination: "/consul/docs/:version/k8s/connect/ingress-controllers", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-controller', + destination: '/consul/docs/:version/k8s/connect/ingress-controllers', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/k8s", - destination: "/consul/docs/:version/k8s/connect/ingress-gateways", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/ingress-gateway/k8s', + destination: '/consul/docs/:version/k8s/connect/ingress-gateways', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/telemetry/k8s", - destination: "/consul/docs/:version/k8s/connect/observability/metrics", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/telemetry/k8s', + destination: '/consul/docs/:version/k8s/connect/observability/metrics', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/transparent-proxy", - destination: "/consul/docs/:version/k8s/connect/onboarding-tproxy-mode", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/transparent-proxy', + destination: '/consul/docs/:version/k8s/connect/onboarding-tproxy-mode', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/terminating-gateway/k8s", - destination: "/consul/docs/:version/k8s/connect/terminating-gateways", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/terminating-gateway/k8s', + destination: '/consul/docs/:version/k8s/connect/terminating-gateways', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy", - destination: "/consul/docs/:version/k8s/connect/transparent-proxy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy', + destination: '/consul/docs/:version/k8s/connect/transparent-proxy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy/k8s", - destination: "/consul/docs/:version/k8s/connect/transparent-proxy/enable-transparent-proxy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy/k8s', + destination: + '/consul/docs/:version/k8s/connect/transparent-proxy/enable-transparent-proxy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry", - destination: "/consul/docs/:version/k8s/crds", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry', + destination: '/consul/docs/:version/k8s/crds', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry", - destination: "/consul/docs/:version/k8s/crds/upgrade-to-crds", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/config-entry', + destination: '/consul/docs/:version/k8s/crds/upgrade-to-crds', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/progressive-rollouts/argo", - destination: "/consul/docs/:version/k8s/deployment-configurations/argo-rollouts-configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/progressive-rollouts/argo', + destination: + '/consul/docs/:version/k8s/deployment-configurations/argo-rollouts-configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/external", - destination: "/consul/docs/:version/k8s/deployment-configurations/clients-outside-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/external', + destination: + '/consul/docs/:version/k8s/deployment-configurations/clients-outside-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/enterprise", - destination: "/consul/docs/:version/k8s/deployment-configurations/consul-enterprise", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/enterprise', + destination: + '/consul/docs/:version/k8s/deployment-configurations/consul-enterprise', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/datadog", - destination: "/consul/docs/:version/k8s/deployment-configurations/datadog", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/datadog', + destination: '/consul/docs/:version/k8s/deployment-configurations/datadog', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/k8s", - destination: "/consul/docs/:version/k8s/deployment-configurations/external-service", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/k8s', + destination: + '/consul/docs/:version/k8s/deployment-configurations/external-service', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation", - destination: "/consul/docs/:version/k8s/deployment-configurations/multi-cluster", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation', + destination: + '/consul/docs/:version/k8s/deployment-configurations/multi-cluster', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/k8s", - destination: "/consul/docs/:version/k8s/deployment-configurations/multi-cluster/kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/k8s', + destination: + '/consul/docs/:version/k8s/deployment-configurations/multi-cluster/kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/k8s-vm", - destination: "/consul/docs/:version/k8s/deployment-configurations/multi-cluster/vms-and-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/k8s-vm', + destination: + '/consul/docs/:version/k8s/deployment-configurations/multi-cluster/vms-and-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/external", - destination: "/consul/docs/:version/k8s/deployment-configurations/servers-outside-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/external', + destination: + '/consul/docs/:version/k8s/deployment-configurations/servers-outside-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/multi-cluster", - destination: "/consul/docs/:version/k8s/deployment-configurations/single-dc-multi-k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/multi-cluster', + destination: + '/consul/docs/:version/k8s/deployment-configurations/single-dc-multi-k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault', + destination: '/consul/docs/:version/k8s/deployment-configurations/vault', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/bootstrap-token", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/bootstrap-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/bootstrap-token', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/bootstrap-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/enterprise-license", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/enterprise-license", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/enterprise-license', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/enterprise-license', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/gossip-key", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/gossip", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/gossip-key', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/gossip', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/partition-token", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/partition-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/partition-token', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/partition-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/replication-token", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/replication-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/replication-token', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/replication-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/tls-certificate", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/server-tls", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/tls-certificate', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/server-tls', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/snapshot-agent", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/snapshot-agent-config", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/snapshot-agent', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/snapshot-agent-config', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/webhook-certificate", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/webhook-certs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/webhook-certificate', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/data-integration/webhook-certs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/backend", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/systems-integration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/backend', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/systems-integration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/vault-backend", - destination: "/consul/docs/:version/k8s/deployment-configurations/vault/wan-federation", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/vault-backend', + destination: + '/consul/docs/:version/k8s/deployment-configurations/vault/wan-federation', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding/k8s", - destination: "/consul/docs/:version/k8s/dns/enable", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding/k8s', + destination: '/consul/docs/:version/k8s/dns/enable', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/views", - destination: "/consul/docs/:version/k8s/dns/views", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/views', + destination: '/consul/docs/:version/k8s/dns/views', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/views/enable", - destination: "/consul/docs/:version/k8s/dns/views/enable", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/views/enable', + destination: '/consul/docs/:version/k8s/dns/views/enable', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/helm", - destination: "/consul/docs/:version/k8s/helm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/k8s/helm', + destination: '/consul/docs/:version/k8s/helm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/helm", - destination: "/consul/docs/:version/k8s/installation/install", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/helm', + destination: '/consul/docs/:version/k8s/installation/install', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-k8s", - destination: "/consul/docs/:version/k8s/installation/install-cli", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-k8s', + destination: '/consul/docs/:version/k8s/installation/install-cli', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-k8s", - destination: "/consul/docs/:version/k8s/k8s-cli", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-k8s', + destination: '/consul/docs/:version/k8s/k8s-cli', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/k8s", - destination: "/consul/docs/:version/k8s/l7-traffic/failover-tproxy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/k8s', + destination: '/consul/docs/:version/k8s/l7-traffic/failover-tproxy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/virtual-service", - destination: "/consul/docs/:version/k8s/l7-traffic/route-to-virtual-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/virtual-service', + destination: + '/consul/docs/:version/k8s/l7-traffic/route-to-virtual-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/k8s", - destination: "/consul/docs/:version/k8s/operations/certificate-rotation", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/k8s', + destination: '/consul/docs/:version/k8s/operations/certificate-rotation', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/rotate/k8s", - destination: "/consul/docs/:version/k8s/operations/gossip-encryption-key-rotation", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/rotate/k8s', + destination: + '/consul/docs/:version/k8s/operations/gossip-encryption-key-rotation', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/k8s", - destination: "/consul/docs/:version/k8s/operations/tls-on-existing-cluster", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/k8s', + destination: '/consul/docs/:version/k8s/operations/tls-on-existing-cluster', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/uninstall", - destination: "/consul/docs/:version/k8s/operations/uninstall", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/uninstall', + destination: '/consul/docs/:version/k8s/operations/uninstall', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/self-hosted", - destination: "/consul/docs/:version/k8s/platforms/self-hosted-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/self-hosted', + destination: '/consul/docs/:version/k8s/platforms/self-hosted-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/service-sync", - destination: "/consul/docs/:version/k8s/service-sync", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/service-sync', + destination: '/consul/docs/:version/k8s/service-sync', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s", - destination: "/consul/docs/:version/k8s/upgrade", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s', + destination: '/consul/docs/:version/k8s/upgrade', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/consul-k8s", - destination: "/consul/docs/:version/k8s/upgrade/upgrade-cli", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/consul-k8s', + destination: '/consul/docs/:version/k8s/upgrade/upgrade-cli', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda", - destination: "/consul/docs/:version/lambda", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda', + destination: '/consul/docs/:version/lambda', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda/function", - destination: "/consul/docs/:version/lambda/invocation", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda/function', + destination: '/consul/docs/:version/lambda/invocation', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda/service", - destination: "/consul/docs/:version/lambda/invoke-from-lambda", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/lambda/service', + destination: '/consul/docs/:version/lambda/invoke-from-lambda', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda", - destination: "/consul/docs/:version/lambda/registration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda', + destination: '/consul/docs/:version/lambda/registration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda/automatic", - destination: "/consul/docs/:version/lambda/registration/automate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda/automatic', + destination: '/consul/docs/:version/lambda/registration/automate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda/manual", - destination: "/consul/docs/:version/lambda/registration/manual", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/lambda/manual', + destination: '/consul/docs/:version/lambda/registration/manual', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure", - destination: "/consul/docs/:version/nia", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure', + destination: '/consul/docs/:version/nia', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api", - destination: "/consul/docs/:version/nia/api", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api', + destination: '/consul/docs/:version/nia/api', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/health", - destination: "/consul/docs/:version/nia/api/health", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/health', + destination: '/consul/docs/:version/nia/api/health', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/status", - destination: "/consul/docs/:version/nia/api/status", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/status', + destination: '/consul/docs/:version/nia/api/status', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/tasks", - destination: "/consul/docs/:version/nia/api/tasks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/api/tasks', + destination: '/consul/docs/:version/nia/api/tasks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/cts", - destination: "/consul/docs/:version/nia/architecture", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/cts', + destination: '/consul/docs/:version/nia/architecture', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts", - destination: "/consul/docs/:version/nia/cli", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts', + destination: '/consul/docs/:version/nia/cli', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts/start", - destination: "/consul/docs/:version/nia/cli/start", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts/start', + destination: '/consul/docs/:version/nia/cli/start', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts/task", - destination: "/consul/docs/:version/nia/cli/task", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/cts/task', + destination: '/consul/docs/:version/nia/cli/task', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/compatibility", - destination: "/consul/docs/:version/nia/compatibility", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts/compatibility', + destination: '/consul/docs/:version/nia/compatibility', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/configure", - destination: "/consul/docs/:version/nia/configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/configure', + destination: '/consul/docs/:version/nia/configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/cts", - destination: "/consul/docs/:version/nia/enterprise", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/cts', + destination: '/consul/docs/:version/nia/enterprise', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license/cts", - destination: "/consul/docs/:version/nia/enterprise/license", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/enterprise/license/cts', + destination: '/consul/docs/:version/nia/enterprise/license', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/configure", - destination: "/consul/docs/:version/nia/installation/configure", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/configure', + destination: '/consul/docs/:version/nia/installation/configure', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/install", - destination: "/consul/docs/:version/nia/installation/install", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/install', + destination: '/consul/docs/:version/nia/installation/install', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver", - destination: "/consul/docs/:version/nia/network-drivers", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver', + destination: '/consul/docs/:version/nia/network-drivers', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver/hcp-terraform", - destination: "/consul/docs/:version/nia/network-drivers/hcp-terraform", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver/hcp-terraform', + destination: '/consul/docs/:version/nia/network-drivers/hcp-terraform', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver/terraform", - destination: "/consul/docs/:version/nia/network-drivers/terraform", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/network-driver/terraform', + destination: '/consul/docs/:version/nia/network-drivers/terraform', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/task", - destination: "/consul/docs/:version/nia/tasks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/task', + destination: '/consul/docs/:version/nia/tasks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/module", - destination: "/consul/docs/:version/nia/terraform-modules", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/module', + destination: '/consul/docs/:version/nia/terraform-modules', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/cts", - destination: "/consul/docs/:version/nia/usage/errors-ref", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/cts', + destination: '/consul/docs/:version/nia/usage/errors-ref', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/requirements", - destination: "/consul/docs/:version/nia/usage/requirements", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/requirements', + destination: '/consul/docs/:version/nia/usage/requirements', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/run", - destination: "/consul/docs/:version/nia/usage/run", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/run', + destination: '/consul/docs/:version/nia/usage/run', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/high-availability", - destination: "/consul/docs/:version/nia/usage/run-ha", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/infrastructure/high-availability', + destination: '/consul/docs/:version/nia/usage/run-ha', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure", - destination: "/consul/docs/:version/security", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure', + destination: '/consul/docs/:version/security', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl", - destination: "/consul/docs/:version/security/acl", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl', + destination: '/consul/docs/:version/security/acl', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/federation", - destination: "/consul/docs/:version/security/acl/acl-federated-datacenters", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/federation', + destination: '/consul/docs/:version/security/acl/acl-federated-datacenters', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/policy", - destination: "/consul/docs/:version/security/acl/acl-policies", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/policy', + destination: '/consul/docs/:version/security/acl/acl-policies', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/role", - destination: "/consul/docs/:version/security/acl/acl-roles", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/role', + destination: '/consul/docs/:version/security/acl/acl-roles', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/rule", - destination: "/consul/docs/:version/security/acl/acl-rules", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/rule', + destination: '/consul/docs/:version/security/acl/acl-rules', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method", - destination: "/consul/docs/:version/security/acl/auth-methods", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method', + destination: '/consul/docs/:version/security/acl/auth-methods', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/aws", - destination: "/consul/docs/:version/security/acl/auth-methods/aws-iam", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/aws', + destination: '/consul/docs/:version/security/acl/auth-methods/aws-iam', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/jwt", - destination: "/consul/docs/:version/security/acl/auth-methods/jwt", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/jwt', + destination: '/consul/docs/:version/security/acl/auth-methods/jwt', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/k8s", - destination: "/consul/docs/:version/security/acl/auth-methods/kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/k8s', + destination: '/consul/docs/:version/security/acl/auth-methods/kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/oidc", - destination: "/consul/docs/:version/security/acl/auth-methods/oidc", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/auth-method/oidc', + destination: '/consul/docs/:version/security/acl/auth-methods/oidc', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token", - destination: "/consul/docs/:version/security/acl/tokens", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token', + destination: '/consul/docs/:version/security/acl/tokens', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/esm", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-consul-esm-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/esm', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-consul-esm-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/dns", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-dns-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/dns', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-dns-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/mesh-gateway", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-mesh-gateway-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/mesh-gateway', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-mesh-gateway-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/replication", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-replication-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/replication', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-replication-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/service", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-service-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/service', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-service-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/snapshot-agent", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-snapshot-agent-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/snapshot-agent', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-snapshot-agent-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/terminating-gateway", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-terminating-gateway-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/terminating-gateway', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-terminating-gateway-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/vault-backend", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-token-for-vault-consul-storage", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/vault-backend', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-token-for-vault-consul-storage', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/ui", - destination: "/consul/docs/:version/security/acl/tokens/create/create-a-ui-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/ui', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-a-ui-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/agent", - destination: "/consul/docs/:version/security/acl/tokens/create/create-an-agent-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/agent', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-an-agent-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/ingress-gateway", - destination: "/consul/docs/:version/security/acl/tokens/create/create-an-ingress-gateway-token", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/token/ingress-gateway', + destination: + '/consul/docs/:version/security/acl/tokens/create/create-an-ingress-gateway-token', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption", - destination: "/consul/docs/:version/security/encryption", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption', + destination: '/consul/docs/:version/security/encryption', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/enable", - destination: "/consul/docs/:version/security/encryption/gossip", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/enable', + destination: '/consul/docs/:version/security/encryption/gossip', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/mtls", - destination: "/consul/docs/:version/security/encryption/mtls", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/mtls', + destination: '/consul/docs/:version/security/encryption/mtls', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model", - destination: "/consul/docs/:version/security/security-models", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model', + destination: '/consul/docs/:version/security/security-models', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model/core", - destination: "/consul/docs/:version/security/security-models/core", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model/core', + destination: '/consul/docs/:version/security/security-models/core', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model/cts", - destination: "/consul/docs/:version/security/security-models/nia", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/security-model/cts', + destination: '/consul/docs/:version/security/security-models/nia', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/service/health-check", - destination: "/consul/docs/:version/services/configuration/checks-configuration-reference", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/service/health-check', + destination: + '/consul/docs/:version/services/configuration/checks-configuration-reference', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/service", - destination: "/consul/docs/:version/services/configuration/services-configuration-overview", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/service', + destination: + '/consul/docs/:version/services/configuration/services-configuration-overview', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/service", - destination: "/consul/docs/:version/services/configuration/services-configuration-reference", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/service', + destination: + '/consul/docs/:version/services/configuration/services-configuration-reference', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/scale", - destination: "/consul/docs/:version/services/discovery/dns-cache", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/scale', + destination: '/consul/docs/:version/services/discovery/dns-cache', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/configure", - destination: "/consul/docs/:version/services/discovery/dns-configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/configure', + destination: '/consul/docs/:version/services/discovery/dns-configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/service/dynamic", - destination: "/consul/docs/:version/services/discovery/dns-dynamic-lookups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/service/dynamic', + destination: '/consul/docs/:version/services/discovery/dns-dynamic-lookups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding", - destination: "/consul/docs/:version/services/discovery/dns-forwarding", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding', + destination: '/consul/docs/:version/services/discovery/dns-forwarding', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding/enable", - destination: "/consul/docs/:version/services/discovery/dns-forwarding/enable", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/dns/forwarding/enable', + destination: + '/consul/docs/:version/services/discovery/dns-forwarding/enable', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns", - destination: "/consul/docs/:version/services/discovery/dns-overview", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns', + destination: '/consul/docs/:version/services/discovery/dns-overview', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/service/static", - destination: "/consul/docs/:version/services/discovery/dns-static-lookups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/service/static', + destination: '/consul/docs/:version/services/discovery/dns-static-lookups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/service", - destination: "/consul/docs/:version/services/services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/service', + destination: '/consul/docs/:version/services/services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/health-check/vm", - destination: "/consul/docs/:version/services/usage/checks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/health-check/vm', + destination: '/consul/docs/:version/services/usage/checks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/vm/define", - destination: "/consul/docs/:version/services/usage/define-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/vm/define', + destination: '/consul/docs/:version/services/usage/define-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/vm", - destination: "/consul/docs/:version/services/usage/register-services-checks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/vm', + destination: + '/consul/docs/:version/services/usage/register-services-checks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/consul", - destination: "/consul/docs/:version/troubleshoot/common-errors", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/consul', + destination: '/consul/docs/:version/troubleshoot/common-errors', + permanent: true, }, - { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/service-communication", - destination: "/consul/docs/:version/troubleshoot/troubleshoot-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot/service-communication', + destination: '/consul/docs/:version/troubleshoot/troubleshoot-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade", - destination: "/consul/docs/:version/upgrading", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade', + destination: '/consul/docs/:version/upgrading', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/compatibility", - destination: "/consul/docs/:version/upgrading/compatibility", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/compatibility', + destination: '/consul/docs/:version/upgrading/compatibility', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions", - destination: "/consul/docs/:version/upgrading/instructions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions', + destination: '/consul/docs/:version/upgrading/instructions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/general", - destination: "/consul/docs/:version/upgrading/instructions/general-process", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/general', + destination: '/consul/docs/:version/upgrading/instructions/general-process', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-10-x", - destination: "/consul/docs/:version/upgrading/instructions/upgrade-to-1-10-x", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-10-x', + destination: + '/consul/docs/:version/upgrading/instructions/upgrade-to-1-10-x', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-2-x", - destination: "/consul/docs/:version/upgrading/instructions/upgrade-to-1-2-x", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-2-x', + destination: + '/consul/docs/:version/upgrading/instructions/upgrade-to-1-2-x', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-6-x", - destination: "/consul/docs/:version/upgrading/instructions/upgrade-to-1-6-x", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-6-x', + destination: + '/consul/docs/:version/upgrading/instructions/upgrade-to-1-6-x', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-8-x", - destination: "/consul/docs/:version/upgrading/instructions/upgrade-to-1-8-x", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/instructions/upgrade-to-1-8-x', + destination: + '/consul/docs/:version/upgrading/instructions/upgrade-to-1-8-x', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/version-specific", - destination: "/consul/docs/:version/upgrading/upgrade-specific", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/version-specific', + destination: '/consul/docs/:version/upgrading/upgrade-specific', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh", - destination: "/consul/docs/:version/connect/security", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh', + destination: '/consul/docs/:version/connect/security', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane", - destination: "/consul/docs/:version/connect/connect-internals", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane', + destination: '/consul/docs/:version/connect/connect-internals', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/service", - destination: "/consul/docs/:version/services/usage/define-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/data-plane/service', + destination: '/consul/docs/:version/services/usage/define-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/backend", - destination: "/consul/docs/:version/agent/wal-logstore", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/backend', + destination: '/consul/docs/:version/agent/wal-logstore', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/security", - destination: "/consul/docs/:version/security", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/architecture/security', + destination: '/consul/docs/:version/security', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/editions", - destination: "/consul/docs/:version/enterprise", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/editions', + destination: '/consul/docs/:version/enterprise', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/install/dev", - destination: "/consul/docs/:version/agent", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/install/dev', + destination: '/consul/docs/:version/agent', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/api", - destination: "/consul/api-docs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/api', + destination: '/consul/api-docs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/cli", - destination: "/consul/docs/commands", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/cli', + destination: '/consul/docs/commands', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/ui", - destination: "/consul/docs/:version/connect/observability/ui-visualization", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/interface/ui', + destination: '/consul/docs/:version/connect/observability/ui-visualization', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/identity", - destination: "/consul/docs/:version/agent", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/identity', + destination: '/consul/docs/:version/agent', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/tf", - destination: "https://registry.terraform.io/providers/hashicorp/consul/latest/docs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/fundamentals/tf', + destination: + 'https://registry.terraform.io/providers/hashicorp/consul/latest/docs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy", - destination: "/consul/docs/:version/install/bootstrapping", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy', + destination: '/consul/docs/:version/install/bootstrapping', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server", - destination: "/consul/docs/:version/install/bootstrapping", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server', + destination: '/consul/docs/:version/install/bootstrapping', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm", - destination: "/consul/docs/:version/install/bootstrapping", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm', + destination: '/consul/docs/:version/install/bootstrapping', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/requirements", - destination: "/consul/docs/:version/install/performance", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/vm/requirements', + destination: '/consul/docs/:version/install/performance', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s", - destination: "/consul/:version/k8s/installation/install", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s', + destination: '/consul/:version/k8s/installation/install', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/requirements", - destination: "/consul/docs/:version/k8s/compatibility", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/requirements', + destination: '/consul/docs/:version/k8s/compatibility', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/consul-k8s", - destination: "/consul/docs/:version/installation/install-cli", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/consul-k8s', + destination: '/consul/docs/:version/installation/install-cli', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/minikube", - destination: "/consul/docs/deploy/server/k8s/platform/minikube", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/minikube', + destination: '/consul/docs/deploy/server/k8s/platform/minikube', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/kind", - destination: "/consul/docs/deploy/server/k8s/platform/kind", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/kind', + destination: '/consul/docs/deploy/server/k8s/platform/kind', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/aks", - destination: "/consul/docs/deploy/server/k8s/platform/aks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/aks', + destination: '/consul/docs/deploy/server/k8s/platform/aks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/eks", - destination: "/consul/docs/deploy/server/k8s/platform/eks", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/eks', + destination: '/consul/docs/deploy/server/k8s/platform/eks', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/gke", - destination: "/consul/docs/deploy/server/k8s/platform/gke", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/gke', + destination: '/consul/docs/deploy/server/k8s/platform/gke', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/openshift", - destination: "/consul/docs/deploy/server/k8s/platform/openshift", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/platform/openshift', + destination: '/consul/docs/deploy/server/k8s/platform/openshift', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/mesh-ca", - destination: "/consul/docs/:version/connect/ca/vault", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/vault/data/mesh-ca', + destination: '/consul/docs/:version/connect/ca/vault', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/uninstall", - destination: "/consul/docs/deploy/server/k8s/uninstall", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/k8s/uninstall', + destination: '/consul/docs/deploy/server/k8s/uninstall', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/ecs", - destination: "/consul/docs/:version/ecs/deploy/terraform", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/ecs', + destination: '/consul/docs/:version/ecs/deploy/terraform', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/ecs/manual", - destination: "/consul/docs/:version/ecs/deploy/manual", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/server/ecs/manual', + destination: '/consul/docs/:version/ecs/deploy/manual', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload", - destination: "/consul/docs/deploy/workload", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload', + destination: '/consul/docs/deploy/workload', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/client/vm", - destination: "/consul/docs/deploy/workload/client/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/client/vm', + destination: '/consul/docs/deploy/workload/client/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/workload/client/k8s", - destination: "/consul/docs/:version/k8s/deployment-configurations/clients-outside-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/workload/client/k8s', + destination: + '/consul/docs/:version/k8s/deployment-configurations/clients-outside-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/client/docker", - destination: "/consul/docs//deploy/workload/client/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/client/docker', + destination: '/consul/docs//deploy/workload/client/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/dataplane/k8s", - destination: "/consul/docs/:version/connect/dataplane", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/dataplane/k8s', + destination: '/consul/docs/:version/connect/dataplane', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/dataplane/ecs", - destination: "/consul/docs/:version/ecs/upgrade-to-dataplanes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/deploy/workload/dataplane/ecs', + destination: '/consul/docs/:version/ecs/upgrade-to-dataplanes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl", - destination: "/consul/docs/secure/acl", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl', + destination: '/consul/docs/secure/acl', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/rule", - destination: "/consul/docs/:version/security/acl/acl-rules", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/rule', + destination: '/consul/docs/:version/security/acl/acl-rules', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/bootstrap", - destination: "/consul/docs/secure/acl/bootstrap", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/bootstrap', + destination: '/consul/docs/secure/acl/bootstrap', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/reset", - destination: "/consul/docs/secure/acl/reset", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/reset', + destination: '/consul/docs/secure/acl/reset', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/legacy", - destination: "/consul/docs/secure/acl/legacy", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/legacy', + destination: '/consul/docs/secure/acl/legacy', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/vault/vm", - destination: "/consul/docs/secure/acl/vault/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/vault/vm', + destination: '/consul/docs/secure/acl/vault/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/troubleshoot", - destination: "/consul/docs/secure/acl/troubleshoot", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/acl/troubleshoot', + destination: '/consul/docs/secure/acl/troubleshoot', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/enable/existing", - destination: "/consul/docs/:version/security/encryption", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/enable/existing', + destination: '/consul/docs/:version/security/encryption', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/rotate/vm", - destination: "/consul/docs/secure/encryption/gossip/rotate/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/gossip/rotate/vm', + destination: '/consul/docs/secure/encryption/gossip/rotate/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/mtls", - destination: "/consul/docs/secure/encryption/tls/mtls", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/mtls', + destination: '/consul/docs/secure/encryption/tls/mtls', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/new/builtin", - destination: "/consul/docs/secure/encryption/tls/enable/new/builtin", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/new/builtin', + destination: '/consul/docs/secure/encryption/tls/enable/new/builtin', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/new/openssl", - destination: "/consul/docs/secure/encryption/tls/enable/new/openssl", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/new/openssl', + destination: '/consul/docs/secure/encryption/tls/enable/new/openssl', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/existing/vm", - destination: "/consul/docs/secure/encryption/tls/enable/existing/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/existing/vm', + destination: '/consul/docs/secure/encryption/tls/enable/existing/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/existing/k8s", - destination: "/consul/docs/:version/k8s/operations/tls-on-existing-cluster", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/enable/existing/k8s', + destination: '/consul/docs/:version/k8s/operations/tls-on-existing-cluster', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/vm", - destination: "/consul/docs/secure/encryption/tls/rotate/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/encryption/tls/rotate/vm', + destination: '/consul/docs/secure/encryption/tls/rotate/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/auto-config/docker", - destination: "/consul/docs/secure/auto-config/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/auto-config/docker', + destination: '/consul/docs/secure/auto-config/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/sso/auth0", - destination: "/consul/docs/secure/sso/auth0", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure/sso/auth0', + destination: '/consul/docs/secure/sso/auth0', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant", - destination: "/consul/docs/multi-tenant", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant', + destination: '/consul/docs/multi-tenant', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/admin-partition/k8s", - destination: "/consul/docs/:version/enterprise/admin-partitions", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/admin-partition/k8s', + destination: '/consul/docs/:version/enterprise/admin-partitions', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace/vm/:slug*", - destination: "/consul/docs/:version/enterprise/namespaces", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace/vm/:slug*', + destination: '/consul/docs/:version/enterprise/namespaces', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace/k8s", - destination: "/consul/docs/:version/enterprise/namespaces", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/multi-tenant/namespace/k8s', + destination: '/consul/docs/:version/enterprise/namespaces', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage", - destination: "/consul/docs/manage", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage', + destination: '/consul/docs/manage', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/k8s/dns/enable", - destination: "/consul/docs/:version/k8s/dns", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/k8s/dns/enable', + destination: '/consul/docs/:version/k8s/dns', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/disaster-recovery/:slug*", - destination: "/consul/docs/manage/disaster-recovery/:slug*", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/disaster-recovery/:slug*', + destination: '/consul/docs/manage/disaster-recovery/:slug*', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/autopilot", - destination: "/consul/docs/manage/scale/autopilot", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage/scale/autopilot', + destination: '/consul/docs/manage/scale/autopilot', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/dataplane", - destination: "/consul/docs/:version/connect/dataplane/telemetry", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/dataplane', + destination: '/consul/docs/:version/connect/dataplane/telemetry', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/telegraf", - destination: "/consul/docs/monitor/telemetry/telegraf", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/telegraf', + destination: '/consul/docs/monitor/telemetry/telegraf', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/appdynamics", - destination: "/consul/docs/monitor/telemetry/appdynamics", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/telemetry/appdynamics', + destination: '/consul/docs/monitor/telemetry/appdynamics', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/log/agent", - destination: "/consul/docs/monitor/log/agent", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/monitor/log/agent', + destination: '/consul/docs/monitor/log/agent', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/federated", - destination: "/consul/docs/upgrade/federated", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/federated', + destination: '/consul/docs/upgrade/federated', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/openshift", - destination: "/consul/docs/upgrade/k8s/openshift", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/openshift', + destination: '/consul/docs/upgrade/k8s/openshift', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/crds", - destination: "/consul/docs/:version/k8s/crds/upgrade-to-crds", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/upgrade/k8s/crds', + destination: '/consul/docs/:version/k8s/crds/upgrade-to-crds', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/release-notes/consul/v1_21_x", - destination: "/consul/docs/release-notes/consul/v1_21_x", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/release-notes/consul/v1_21_x', + destination: '/consul/docs/release-notes/consul/v1_21_x', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register", - destination: "/consul/docs/:version/services/services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register', + destination: '/consul/docs/:version/services/services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/annotations", - destination: "/consul/docs/:version/k8s/annotations-and-labels#service-sync", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/k8s/annotations', + destination: + '/consul/docs/:version/k8s/annotations-and-labels#service-sync', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/namespace", - destination: "/consul/docs/register/service/namespace", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/namespace', + destination: '/consul/docs/register/service/namespace', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/docker", - destination: "/consul/docs/register/service/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/docker', + destination: '/consul/docs/register/service/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/aws", - destination: "/consul/docs/register/service/aws", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/aws', + destination: '/consul/docs/register/service/aws', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/requirements", - destination: "/consul/docs/:version/ecs/tech-specs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs/requirements', + destination: '/consul/docs/:version/ecs/tech-specs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs", - destination: "/consul/docs/:version/ecs/deploy/terraform", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/ecs', + destination: '/consul/docs/:version/ecs/deploy/terraform', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/nomad", - destination: "/consul/docs/:version/nomad", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/service/nomad', + destination: '/consul/docs/:version/nomad', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/esm", - destination: "/consul/docs/register/external/esm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/esm', + destination: '/consul/docs/register/external/esm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/esm/k8s", - destination: "/consul/docs/register/external/esm/k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/esm/k8s', + destination: '/consul/docs/register/external/esm/k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/terminating-gateway", - destination: "/consul/docs/register/external/terminating-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/terminating-gateway', + destination: '/consul/docs/register/external/terminating-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/permissive-mtls", - destination: "/consul/docs/:version/k8s/connect/onboarding-tproxy-mode", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/register/external/permissive-mtls', + destination: '/consul/docs/:version/k8s/connect/onboarding-tproxy-mode', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover", - destination: "/consul/docs/:version/services/discovery/dns-overview", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover', + destination: '/consul/docs/:version/services/discovery/dns-overview', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/k8s", - destination: "/consul/docs/:version/k8s/dns/enable", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/k8s', + destination: '/consul/docs/:version/k8s/dns/enable', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/docker", - destination: "/consul/docs/discover/dns/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/docker', + destination: '/consul/docs/discover/dns/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/pas", - destination: "/consul/docs/discover/dns/pas", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/dns/pas', + destination: '/consul/docs/discover/dns/pas', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/load-balancer/:slug*", - destination: "/consul/docs/discover/load-balancer/:slug*", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/load-balancer/:slug*', + destination: '/consul/docs/discover/load-balancer/:slug*', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/vm", - destination: "/consul/docs/discover/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/vm', + destination: '/consul/docs/discover/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/k8s", - destination: "/consul/docs/discover/k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/k8s', + destination: '/consul/docs/discover/k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/docker", - destination: "/consul/docs/discover/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/discover/docker', + destination: '/consul/docs/discover/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/enable", - destination: "/consul/docs/:version/connect/configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/enable', + destination: '/consul/docs/:version/connect/configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy/ecs", - destination: "/consul/docs/connect/proxy/transparent-proxy/ecs", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/proxy/transparent-proxy/ecs', + destination: '/consul/docs/connect/proxy/transparent-proxy/ecs', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot", - destination: "/consul/docs/:version/troubleshoot/troubleshoot-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot', + destination: '/consul/docs/:version/troubleshoot/troubleshoot-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot/debug", - destination: "/consul/docs/:version/connect/dev", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot/debug', + destination: '/consul/docs/:version/connect/dev', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot/service-to-service", - destination: "/consul/docs/:version/troubleshoot/troubleshoot-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/troubleshoot/service-to-service', + destination: '/consul/docs/:version/troubleshoot/troubleshoot-services', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/vm", - destination: "/consul/docs/connect/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/vm', + destination: '/consul/docs/connect/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/inject", - destination: "/consul/docs/:version/k8s/connect", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/inject', + destination: '/consul/docs/:version/k8s/connect', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/crds", - destination: "/consul/docs/:version/k8s/crds", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/crds', + destination: '/consul/docs/:version/k8s/crds', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/workload", - destination: "/consul/docs/:version/k8s/connect", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/connect/k8s/workload', + destination: '/consul/docs/:version/k8s/connect', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south", - destination: "/consul/docs/:version/connect/gateways/api-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south', + destination: '/consul/docs/:version/connect/gateways/api-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/vm", - destination: "/consul/docs/:version/connect/gateways/api-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/vm', + destination: '/consul/docs/:version/connect/gateways/api-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/k8s", - destination: "/consul/docs/:version/connect/gateways/api-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/north-south/k8s', + destination: '/consul/docs/:version/connect/gateways/api-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west", - destination: "/consul/docs/:version/connect/gateways/mesh-gateway", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west', + destination: '/consul/docs/:version/connect/gateways/mesh-gateway', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/vms", - destination: "/consul/docs/east-west/wan-federation/vms", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/wan-federation/vms', + destination: '/consul/docs/east-west/wan-federation/vms', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/vm", - destination: "/consul/docs/east-west/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/vm', + destination: '/consul/docs/east-west/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/k8s", - destination: "/consul/docs/:version/east-west/k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/east-west/k8s', + destination: '/consul/docs/:version/east-west/k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh", - destination: "/consul/docs/secure-mesh", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh', + destination: '/consul/docs/secure-mesh', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/bootstrap", - destination: "/consul/docs/secure-mesh/certificate/bootstrap", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/bootstrap', + destination: '/consul/docs/secure-mesh/certificate/bootstrap', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/rotate", - destination: "/consul/docs/secure-mesh/certificate/rotate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/rotate', + destination: '/consul/docs/secure-mesh/certificate/rotate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/existing", - destination: "/consul/docs/:version/k8s/operations/tls-on-existing-cluster", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/existing', + destination: '/consul/docs/:version/k8s/operations/tls-on-existing-cluster', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/permissive-mtls", - destination: "/consul/docs/secure-mesh/certificate/permissive-mtls", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/certificate/permissive-mtls', + destination: '/consul/docs/secure-mesh/certificate/permissive-mtls', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/vm", - destination: "/consul/docs/:version/secure-mesh/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/vm', + destination: '/consul/docs/:version/secure-mesh/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/k8s", - destination: "/consul/docs/secure-mesh/k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/secure-mesh/k8s', + destination: '/consul/docs/secure-mesh/k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/prepared-query", - destination: "/consul/docs/manage-traffic/failover/prepared-query", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/failover/prepared-query', + destination: '/consul/docs/manage-traffic/failover/prepared-query', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/vm", - destination: "/consul/docs/:version/connect/cluster-peering/usage/peering-traffic-management", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/vm', + destination: + '/consul/docs/:version/connect/cluster-peering/usage/peering-traffic-management', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/k8s", - destination: "/consul/docs/:version/k8s/connect/cluster-peering/usage/l7-traffic", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/manage-traffic/k8s', + destination: + '/consul/docs/:version/k8s/connect/cluster-peering/usage/l7-traffic', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe", - destination: "/consul/docs/:version/connect/observability", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe', + destination: '/consul/docs/:version/connect/observability', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/docker", - destination: "/consul/docs/observe/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/observe/docker', + destination: '/consul/docs/observe/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate", - destination: "/consul/docs/automate", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate', + destination: '/consul/docs/automate', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/consul-template/:slug*", - destination: "/consul/docs/automate/consul-template/:slug*", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/automate/consul-template/:slug*', + destination: '/consul/docs/automate/consul-template/:slug*', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/vm", - destination: "/consul/docs/vm", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/vm', + destination: '/consul/docs/vm', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/docker", - destination: "/consul/docs/docker", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/docker', + destination: '/consul/docs/docker', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/openshift", - destination: "/consul/docs/:version/openshift", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/openshift', + destination: '/consul/docs/:version/openshift', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate", - destination: "/consul/docs/:version/integrate/partnerships", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate', + destination: '/consul/docs/:version/integrate/partnerships', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/hcdiag", - destination: "/consul/docs/integrate/hcdiag", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/hcdiag', + destination: '/consul/docs/integrate/hcdiag', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/vault/k8s", - destination: "/consul/docs/integrate/vault/k8s", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/integrate/vault/k8s', + destination: '/consul/docs/integrate/vault/k8s', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/apigee", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/apigee-ext-authz", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/apigee', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/apigee-ext-authz', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/ext", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/ext-authz", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/ext', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/ext-authz', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/otel", - destination: "/consul/docs/:version/connect/proxies/envoy-extensions/usage/otel-access-logging", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/envoy-extension/otel', + destination: + '/consul/docs/:version/connect/proxies/envoy-extensions/usage/otel-access-logging', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/k8s", - destination: "/consul/docs/:version/troubleshoot/common-errors#common-errors-on-kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/error-messages/k8s', + destination: + '/consul/docs/:version/troubleshoot/common-errors#common-errors-on-kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot", - destination: "/consul/docs/troubleshoot", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/troubleshoot', + destination: '/consul/docs/troubleshoot', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-aws", - destination: "/consul/docs/reference/cli/consul-aws", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cli/consul-aws', + destination: '/consul/docs/reference/cli/consul-aws', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/aws-iam", - destination: "/consul/docs/:version/security/acl/auth-methods/aws-iam", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/aws-iam', + destination: '/consul/docs/:version/security/acl/auth-methods/aws-iam', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/jwt", - destination: "/consul/docs/:version/security/acl/auth-methods/jwt", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/jwt', + destination: '/consul/docs/:version/security/acl/auth-methods/jwt', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/k8s", - destination: "/consul/docs/:version/security/acl/auth-methods/kubernetes", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/k8s', + destination: '/consul/docs/:version/security/acl/auth-methods/kubernetes', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/oidc", - destination: "/consul/docs/:version/security/acl/auth-methods/oidc", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/auth-method/oidc', + destination: '/consul/docs/:version/security/acl/auth-methods/oidc', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/token", - destination: "/consul/docs/:version/security/acl/tokens", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/token', + destination: '/consul/docs/:version/security/acl/tokens', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/role", - destination: "/consul/docs/:version/security/acl/acl-roles", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/role', + destination: '/consul/docs/:version/security/acl/acl-roles', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/policy", - destination: "/consul/docs/:version/security/acl/acl-policies", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/acl/policy', + destination: '/consul/docs/:version/security/acl/acl-policies', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/configuration-file/:slug*", - destination: "/consul/docs/:version/agent/config/config-files", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/configuration-file/:slug*', + destination: '/consul/docs/:version/agent/config/config-files', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/telemetry", - destination: "/consul/docs/:version/agent/monitor/telemetry", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/agent/telemetry', + destination: '/consul/docs/:version/agent/monitor/telemetry', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/docs/reference/consul-template/:slug*", - destination: "/consul/docs/docs/reference/consul-template/:slug*", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/docs/reference/consul-template/:slug*', + destination: '/consul/docs/docs/reference/consul-template/:slug*', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts", - destination: "/consul/docs/:version/nia/configuration", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/cts', + destination: '/consul/docs/:version/nia/configuration', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dns", - destination: "/consul/docs/:version/services/discovery/dns-static-lookups", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/dns', + destination: '/consul/docs/:version/services/discovery/dns-static-lookups', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/namespace", - destination: "/consul/docs/:version/enterprise/namespaces", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/namespace', + destination: '/consul/docs/:version/enterprise/namespaces', + permanent: true, }, { - source: "/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/sidecar", - destination: "/consul/docs/:version/connect/proxies/deploy-sidecar-services", - permanent: true + source: + '/consul/docs/:version(v1\\.(?:8|9|10|11|12|13|14|15|16|17|18|19|20)\\.x)/reference/proxy/sidecar', + destination: + '/consul/docs/:version/connect/proxies/deploy-sidecar-services', + permanent: true, }, /////////////////////////////////// // Tutorial --> Docs conversions // /////////////////////////////////// { - source: "/consul/tutorials/production-vms/security", - destination: "/consul/docs/secure", + source: '/consul/tutorials/production-vms/security', + destination: '/consul/docs/secure', + permanent: true, + }, + { + source: '/consul/tutorials/archive/docker-container-agents', + destination: '/consul/docs/docker', permanent: true, }, { - source: "/consul/tutorials/archive/docker-container-agents", - destination: "/consul/docs/docker", + source: '/consul/tutorials/archive/tls-encryption-secure', + destination: '/consul/docs/secure/encryption/tls/mtls', permanent: true, }, { - source: "/consul/tutorials/archive/tls-encryption-secure", - destination: "/consul/docs/secure/encryption/tls/mtls", + source: '/consul/tutorials/archive/dns-forwarding', + destination: '/consul/docs/manage/dns/forwarding', permanent: true, }, { - source: "/consul/tutorials/archive/dns-forwarding", - destination: "/consul/docs/manage/dns/forwarding", + source: '/consul/tutorials/archive/get-started-explore-the-ui', + destination: '/consul/docs/fundamentals/interface/ui', permanent: true, }, { - source: "/consul/tutorials/archive/get-started-explore-the-ui", - destination: "/consul/docs/fundamentals/interface/ui", + source: '/consul/tutorials/archive/application-leader-elections', + destination: '/consul/docs/automate/application-leader-election', permanent: true, }, { - source: "/consul/tutorials/archive/application-leader-elections", - destination: "/consul/docs/automate/application-leader-election", + source: '/consul/tutorials/operate-consul/vault-consul-secrets', + destination: '/consul/docs/secure/acl/vault/vm', permanent: true, }, { - source: "/consul/tutorials/operate-consul/vault-consul-secrets", - destination: "/consul/docs/secure/acl/vault/vm", + source: '/consul/tutorials/archive/docker-compose-auto-config', + destination: '/consul/docs/secure/auto-config/docker', permanent: true, }, { - source: "/consul/tutorials/archive/docker-compose-auto-config", - destination: "/consul/docs/secure/auto-config/docker", + source: '/consul/tutorials/archive/load-balancing-haproxy', + destination: '/consul/docs/discover/load-balancer/ha', permanent: true, }, { - source: "/consul/tutorials/archive/load-balancing-haproxy", - destination: "/consul/docs/discover/load-balancer/ha", + source: '/consul/tutorials/archive/tls-encryption-openssl-secure', + destination: '/consul/docs/secure/encryption/tls/enable/new/openssl', permanent: true, }, { - source: "/consul/tutorials/archive/tls-encryption-openssl-secure", - destination: "/consul/docs/secure/encryption/tls/enable/new/openssl", + source: '/consul/tutorials/operate-consul/backup-and-restore', + destination: '/consul/docs/manage/disaster-recovery/backup-restore', permanent: true, }, { - source: "/consul/tutorials/operate-consul/backup-and-restore", - destination: "/consul/docs/manage/disaster-recovery/backup-restore", + source: '/consul/docs/manage/disaster-recovery/federation', + destination: '/consul/docs/manage/disaster-recovery', permanent: true, }, { - source: "/consul/tutorials/operate-consul/vault-pki-consul-secure-tls", - destination: "/consul/docs/automate/consul-template/vault/mtls", + source: '/consul/tutorials/operate-consul/vault-pki-consul-secure-tls', + destination: '/consul/docs/automate/consul-template/vault/mtls', permanent: true, }, { - source: "/consul/tutorials/archive/federation-gossip-wan", - destination: "/consul/docs/east-west/wan-federation/create", + source: '/consul/tutorials/archive/federation-gossip-wan', + destination: '/consul/docs/east-west/wan-federation/create', permanent: true, }, { - source: "/consul/tutorials/archive/docker-compose-observability", - destination: "/consul/docs/observe/docker", + source: '/consul/tutorials/archive/docker-compose-observability', + destination: '/consul/docs/observe/docker', permanent: true, }, { - source: "/consul/tutorials/archive/troubleshooting", - destination: "/consul/docs/fundamentals/troubleshoot", + source: '/consul/tutorials/archive/troubleshooting', + destination: '/consul/docs/fundamentals/troubleshoot', permanent: true, }, { - source: "/consul/tutorials/operate-consul/disaster-recovery", - destination: "/consul/docs/manage/disaster-recovery", + source: '/consul/tutorials/operate-consul/disaster-recovery', + destination: '/consul/docs/manage/disaster-recovery', permanent: true, }, { source: - "/consul/tutorials/archive/tls-encryption-secure-existing-datacenter", - destination: "/consul/docs/secure/encryption/tls/enable/existing/vm", + '/consul/tutorials/archive/tls-encryption-secure-existing-datacenter', + destination: '/consul/docs/secure/encryption/tls/enable/existing/vm', permanent: true, }, { source: - "/consul/tutorials/operate-consul/kubernetes-vault-consul-secrets-management", - destination: "/consul/docs/integrate/vault/k8s", + '/consul/tutorials/operate-consul/kubernetes-vault-consul-secrets-management', + destination: '/consul/docs/integrate/vault/k8s', permanent: true, }, { - source: "/consul/tutorials/archive/kubernetes-openshift-red-hat", - destination: "/consul/docs/deploy/server/k8s/platform/openshift", + source: '/consul/tutorials/archive/kubernetes-openshift-red-hat', + destination: '/consul/docs/deploy/server/k8s/platform/openshift', permanent: true, }, { - source: "/consul/tutorials/archive/autopilot-datacenter-operations", - destination: "/consul/docs/manage/scale/autopilot", + source: '/consul/tutorials/archive/autopilot-datacenter-operations', + destination: '/consul/docs/manage/scale/autopilot', permanent: true, }, { - source: "/consul/tutorials/operate-consul/vault-kv-consul-secure-gossip", - destination: "/consul/docs/automate/consul-template/vault/gossip", + source: '/consul/tutorials/operate-consul/vault-kv-consul-secure-gossip', + destination: '/consul/docs/automate/consul-template/vault/gossip', permanent: true, }, { - source: "/consul/tutorials/archive/single-sign-on-auth0", - destination: "/consul/docs/secure/sso/auth0", + source: '/consul/tutorials/archive/single-sign-on-auth0', + destination: '/consul/docs/secure/sso/auth0', permanent: true, }, { - source: "/consul/tutorials/archive/federation-network-areas", - destination: "/consul/docs/east-west/network-area", + source: '/consul/tutorials/archive/federation-network-areas', + destination: '/consul/docs/east-west/network-area', permanent: true, }, { - source: "/consul/tutorials/observe-your-network/audit-logging", - destination: "/consul/docs/monitor/log/audit", + source: '/consul/tutorials/observe-your-network/audit-logging', + destination: '/consul/docs/monitor/log/audit', permanent: true, }, { source: - "/consul/tutorials/implement-multi-tenancy/namespaces-share-datacenter-access", - destination: "/consul/docs/register/service/namespace", + '/consul/tutorials/implement-multi-tenancy/namespaces-share-datacenter-access', + destination: '/consul/docs/register/service/namespace', permanent: true, }, { - source: "/consul/tutorials/operate-consul/recovery-outage-primary", - destination: "/consul/docs/manage/disaster-recovery/federation", + source: '/consul/tutorials/operate-consul/recovery-outage-primary', + destination: '/consul/docs/manage/disaster-recovery/federation', permanent: true, }, { - source: "/consul/tutorials/archive/upgrade-automation", - destination: "/consul/docs/upgrade/automated", + source: '/consul/tutorials/archive/upgrade-automation', + destination: '/consul/docs/upgrade/automated', permanent: true, }, { - source: "/consul/tutorials/archive/sync-aws-services", - destination: "/consul/docs/register/service/aws", + source: '/consul/tutorials/archive/sync-aws-services', + destination: '/consul/docs/register/service/aws', permanent: true, }, { - source: "/consul/tutorials/archive/gossip-encryption-rotate", - destination: "/consul/docs/secure/encryption/gossip/rotate/vm", + source: '/consul/tutorials/archive/gossip-encryption-rotate', + destination: '/consul/docs/secure/encryption/gossip/rotate/vm', permanent: true, }, { - source: "/consul/tutorials/archive/monitor-health-telegraf", - destination: "/consul/docs/monitor/telemetry/telegraf", + source: '/consul/tutorials/archive/monitor-health-telegraf', + destination: '/consul/docs/monitor/telemetry/telegraf', permanent: true, }, { source: - "/consul/tutorials/production-multi-cluster/multi-disaster-recovery", - destination: "/consul/docs/manage/disaster-recovery", + '/consul/tutorials/production-multi-cluster/multi-disaster-recovery', + destination: '/consul/docs/manage/disaster-recovery', permanent: true, }, { source: - "/consul/tutorials/implement-multi-tenancy/namespaces-secure-shared-access", - destination: "/consul/docs/multi-tenant/namespace/vm", + '/consul/tutorials/implement-multi-tenancy/namespaces-secure-shared-access', + destination: '/consul/docs/multi-tenant/namespace/vm', permanent: true, }, { - source: "/consul/tutorials/archive/upgrade-federated-environment", - destination: "/consul/docs/upgrade/federated", + source: '/consul/tutorials/archive/upgrade-federated-environment', + destination: '/consul/docs/upgrade/federated', permanent: true, }, { - source: "/consul/tutorials/operate-consul/hcdiag-with-consul", - destination: "/consul/docs/integrate/hcdiag", + source: '/consul/tutorials/operate-consul/hcdiag-with-consul', + destination: '/consul/docs/integrate/hcdiag', permanent: true, }, { - source: "/consul/tutorials/archive/sync-pivotal-cloud-services", - destination: "/consul/docs/discover/dns/pas", + source: '/consul/tutorials/archive/sync-pivotal-cloud-services', + destination: '/consul/docs/discover/dns/pas', permanent: true, }, { - source: "/consul/tutorials/archive/monitor-with-appdynamics", - destination: "/consul/docs/monitor/telemetry/appdynamics", + source: '/consul/tutorials/archive/monitor-with-appdynamics', + destination: '/consul/docs/monitor/telemetry/appdynamics', permanent: true, }, ] From 081031a61144ea7a9e8cc7dca9fefc5ff02ef5d9 Mon Sep 17 00:00:00 2001 From: danielehc <40759828+danielehc@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:21:46 +0200 Subject: [PATCH 3/7] Apply suggestions from code review Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com> --- .../content/docs/error-messages/consul.mdx | 2 +- .../disaster-preparation.mdx | 55 ++++++++++--------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/website/content/docs/error-messages/consul.mdx b/website/content/docs/error-messages/consul.mdx index f10f88b5955c..6d3413aa7b94 100644 --- a/website/content/docs/error-messages/consul.mdx +++ b/website/content/docs/error-messages/consul.mdx @@ -171,7 +171,7 @@ There are three possible workarounds: 1. Always use unique node names for your Consul datacenters so that there is no risk of conflicts. You can configure node names for your Consul agent nodes using the [`node_name`](/consul/docs/reference/agent/configuration-file/node#_node) configuration parameter. -1. Perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. Once servers are restarted, the node ids will be set to the expected value and this will resolve the errors in the logs. +1. Perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. Once all servers are restarted, the node ids will be set to the expected value, resolving the errors in the logs. ## ACL not found diff --git a/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx b/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx index d8b147096ff5..efd72b7ceb25 100644 --- a/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx +++ b/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx @@ -7,7 +7,7 @@ description: >- # Disaster preparation strategy -This topic provides an overview of the best practices for preparing a disaster recovery strategy for your Consul cluster. +This topic provides an overview of the concerns and recommendations you should consider to help you prepare a disaster recovery strategy for your Consul cluster. ## Introduction @@ -53,43 +53,44 @@ If you are using Kubernetes refer to the following documentation: - [Consul and Kubernetes deployment guide](/consul/tutorials/production-kubernetes/kubernetes-deployment-guide). -To learn more about best practices for your deployments you can also refer to HashiCorp's [Well-Architected Framework](/well-architected-framework/what-is) documentation for a list of best practices that can help you define and automate your processes, optimize your resources and costs, design reliable systems, and secure your infrastructure and services. +You can also refer to HashiCorp's [Well-Architected Framework documentation](/well-architected-framework/what-is) for a list of best practices that can help you define and automate your processes, optimize your resources and costs, design reliable systems, and secure your infrastructure and services. ## Implement a backup strategy -A Consul datacenter's state is more than just the initial configuration, it includes data that is generated during normal operations such as KV entries, ACL tokens, and intentions. When your datacenter fails, this information is lost and cannot be manually recreated without a backup. +A Consul datacenter's state is more than just the initial configuration. It includes data that is generated during normal operations, such as KV entries, ACL tokens, and intentions. When your datacenter fails, this information is lost and cannot be manually recreated without a backup. -Restoring from a snapshot ensures all the intentions, KV entries and ACL tokens are reintroduced. +Restoring from a snapshot ensures that previously configured intentions, KV entries, and ACL tokens are reintroduced to your Consul datacenter. -You can follow [Backup Consul Data and State](/consul/tutorials/production-deploy/backup-and-restore) to learn how to perform a snapshot of your Consul datacenter to use in case of disaster. +Follow the instructions in [Backup and restore a Consul datacenter](/consul/tutorials/production-deploy/backup-and-restore) to create a snapshot of your Consul datacenter. ## TLS certificate distribution process -Certificates are stored on the agent disk and are not saved in a snapshot. This means you will have to re-generate them in case you lose access to the agent's data. +Certificates are stored on the agent disk and are not saved in a snapshot. As a result, you must re-generate them when you lose access to the agent's data. -Consul comes equipped with a command, [`consul tls cert create`](/consul/commands/tls/cert), that permits you to generate TLS certificates for the agents. This simplifies the automation of deployment by giving you the ability to generate a CA and TLS certificates as part of the process. +The Consul CLI includes a command, [`consul tls cert create`](/consul/commands/tls/cert), that generates new TLS certificates for the agents. This command can streamline deployment automations, lowering Consul's overall recovery time. -As an alternative, we suggest you use Vault as a CA and TLS certificate generator to help you automate the process. Refer to [Generate mTLS Certificates for Consul with Vault](/consul/docs/automate/consul-template/vault/mtls) to learn how to automate certificate generation and distribution for your Consul server agents. +Alternatively, we recommend using Vault as a CA and TLS certificate generator to help you automate the process. Refer to [Generate mTLS Certificates for Consul with Vault](/consul/docs/automate/consul-template/vault/mtls) to learn how to automate certificate generation and distribution for your Consul server agents. ## ACL down policy -When your primary datacenter is down you lose your ability to validate ACL policies. To mitigate this, Consul has a configuration parameter, [`acl.down_policy`](/consul/docs/reference/agent/configuration-file/acl#acl_down_policy), that tells Consul which strategy to follow if ACLs cannot be validated against the primary datacenter. +When your primary datacenter is down, you lose your ability to validate ACL policies in a WAN-federated environment. To mitigate this effect, Consul has a configuration parameter, [`acl.down_policy`](/consul/docs/reference/agent/configuration-file/acl#acl_down_policy), that defines a strategy for Consul agents to follow when ACLs cannot be validated against the primary datacenter. -By default, Consul adopts the `extend-cache` approach, meaning that in case of an outage Consul will allow cached ACL objects to be used, ignoring their TTL values. If a non-cached ACL is used, `extend-cache` acts like `deny`. +Consul adopts the `extend-cache` approach by default. During an outage, Consul allows cached ACL objects to be used, and it ignores their TTL values. When a non-cached ACL is used, `extend-cache` enforces the `deny` rule. -If you changed the `down_policy` to the more restrictive value of `deny`, you will be impacted more severely from the outage, since all ACL protected operations in the secondary datacenter will be denied until the primary datacenter is restored. +If you change the `acl.down_policy` to a more restrictive value, an outage will have a greater impact because all ACL-protected operations in the secondary datacenter will be denied until the primary datacenter is restored. ### Client ACL tokens reconfiguration -When you restore a snapshot to a new Consul cluster, depending on the initial configuration you might need to reconfigure the ACL tokens for the client agents. +After you restore a Consul cluster from a snapshot, you may need to reconfigure the ACL tokens for the client agents, depending on your initial configuration. -- If token persistence was enabled before the snapshot was captured, using the [`enable_token_persistence`](/consul/docs/reference/agent/configuration-file/acl#acl_enable_token_persistence) configuration flag, then the client agents will resume function after the snapshot restore in the cluster's server agents, without the need for reconfiguration. -- If the ACL tokens for the agents were specified directly in the client agent configuration before the snapshot was captured, using the [`acl.tokens.agent`](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) parameter, then the client agents will resume function after the snapshot restore in the cluster's server agents, without the need for reconfiguration. -- If none of the previous options were enabled, then ACL tokens will not be persisted after a restore. This means that Consul clients will not be able to re-join the datacenter because they do not have the required permissions and they require an extra configuration to be restored. Use the [`consul acl set-agent-token` command](/consul/commands/acl/set-agent-token#agent), the [`acl.tokens.agent`](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) configuration parameter, or the `CONSUL_HTTP_TOKEN` variable to update the token on client agents. +- If token persistence was enabled before you created the snapshot, then the client agents resume function after the snapshot restore in the cluster's server agents, without the need for additional reconfiguration. To learn more, refer to [`enable_token_persistence` in the agent configuration reference](/consul/docs/reference/agent/configuration-file/acl#acl_enable_token_persistence). +- If you used the [`acl.tokens.agent`](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent) parameter to specify the ACL tokens for the agents directly in the client agent configuration, then the client agents resume function after the snapshot restore in the cluster's server agents, without the need for additional reconfiguration. + +If neither option was enabled, then Consul will not persist ACL tokens after a restore. As a result, Consul clients cannot automatically re-join the datacenter because they do not have the required permissions. You can use the [`consul acl set-agent-token` command](/consul/commands/acl/set-agent-token#agent), the [`acl.tokens.agent` configuration parameter](/consul/docs/reference/agent/configuration-file/acl#acl_tokens_agent), or the `CONSUL_HTTP_TOKEN` environment variable to update the token on each client agent. The table below offers an overview of the different configuration possibilities and an indication over the need for Consul clients' reconfiguration. @@ -102,11 +103,11 @@ The table below offers an overview of the different configuration possibilities | No | No | Yes | -## Federation strategies to mitigate outages +## Multi-cluster strategies to mitigate outages -Introducing Consul federation in your environment, by having multiple Consul datacenters federated using WAN or cluster peering, can increase your resilience to disruptive events by replicating services across multiple datacenters, regions, and cloud providers. +Connecting multiple Consul datacenters using WAN federation or cluster peering can increase your resilience to disruptive events by replicating services across multiple datacenters, regions, and cloud providers. -Implementing federation in your environment you can leverage Consul functionalities that increase resilience towards service failure: +Multi-cluster Consul networks increase resilience towards service failure in the following ways: - Within a single datacenter, Consul provides automatic failover for services by omitting failed service instances from DNS lookups. - WAN federated clusters can use [prepared queries](/consul/docs/manage-traffic/failover/prepared-query) to let users define failover policies in a centralized way. @@ -119,16 +120,16 @@ To deploy a multi-datacenter federated Consul cluster you can refer to the follo If you are using Consul's service mesh in your WAN-Federated environment, you should also set [`enable_central_service_config = true`](/consul/docs/reference/agent/configuration-file/general#enable_central_service_config) on your Consul clients, which allows you to centrally configure the sidecar and mesh gateway proxies. -To make use of the mesh gateway functionality, refer to the [Mesh gateways ](/consul/docs/east-west/mesh-gateway) documentation. +To learn about using mesh gateways to secure communications between Consul datacenters, refer to [Mesh gateways](/consul/docs/east-west/mesh-gateway). ## Primary Consul datacenter outage impact -When you design and architect your WAN-federated Consul environment, it is important to consider the critical role of the primary datacenter in the multi-cluster deployment. The primary Consul datacenter serves as the source of truth for the following data. +When you design and architect your WAN-federated Consul environment, it is important to consider the critical role of the primary datacenter in the multi-cluster deployment. The primary Consul datacenter serves as the source of truth for the following data: -1. Certificate Authority management, if you use the built-in Consul CA. The root CA resides in the primary Consul datacenter and must sign the certificates for the additional Consul datacenters. -1. ACLs -1. Intentions +- ACL operations, including tokens and policies. +- Service intentions for secure service-to-service communication. +- Certificate Authority management, if you use the built-in Consul CA. The root CA resides in the primary Consul datacenter and must sign the certificates for the additional Consul datacenters. The table below shows the impact on Consul operations of a full outage of the primary Consul datacenter. @@ -147,12 +148,14 @@ For the TLS certificate management you can greatly reduce the impact of a primar ### Clientless primary Consul datacenter -Once you establish and federate a primary Consul datacenter, you cannot migrate, change, or move it. An effective pattern for large Consul multi-cluster deployments is to have a dedicated primary Consul datacenter with the sole purpose of serving as a primary. You would only include Consul servers in this primary datacenter and not connect any client nodes or services. This primary Consul datacenter can then be federated normally with other Consul datacenters, which will each contain both servers and clients. +Once you establish a primary Consul datacenter for your federated deployment, you cannot migrate, change, or move it. + +One effective pattern for large Consul multi-cluster deployments is to have a dedicated primary Consul datacenter with the sole purpose of serving as the primary datacenter. You would only include Consul servers in this primary datacenter and not connect any client nodes or services. This primary Consul datacenter can then be federated normally with other Consul datacenters, which contain both servers and clients. This approach provides two distinct advantages. -- It becomes easier to move the primary Consul datacenter. For example, you may want to migrate it from an on premises datacenter to a cloud environment. Typically, this would entail performing a backup and restore of the primary Consul datacenter to the alternate location. Review the [Disaster Recovery for the Primary Datacenter](/consul/tutorials/datacenter-operations/recovery-outage-primary) tutorial for guidance on restoring a Consul cluster. -- In the event of a disaster, the additional Consul datacenters can still continue to function independently of the primary Consul datacenter although functionality will be reduced until the primary Consul datacenter is brought back online. +- It becomes easier to move the primary Consul datacenter. For example, you may want to migrate it from an on premises datacenter to a cloud environment. Typically, this process entails performing a backup and restore of the primary Consul datacenter to the alternate location. For more information, refer to [Backup and restore a Consul datacenter](/consul/docs/manage/disaster-recovery/backup-restore). +- If your primary datacenter experiences a disaster, the other Consul datacenters can still continue to function independently. They will operate with reduced functionality until the primary Consul datacenter is brought back online. ## Additional guidance From 06b831d2ab274e4b69b21f988de43ccfe8a62b27 Mon Sep 17 00:00:00 2001 From: danielehc <40759828+danielehc@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:23:58 +0200 Subject: [PATCH 4/7] Apply suggestions from code review Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com> --- .../docs/manage/disaster-recovery/index.mdx | 32 +++++++++-------- .../disaster-recovery/restore-federated.mdx | 34 +++++++++---------- .../disaster-recovery/restore-primary.mdx | 18 +++++----- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/website/content/docs/manage/disaster-recovery/index.mdx b/website/content/docs/manage/disaster-recovery/index.mdx index 2c5c22797384..9bbd2ad0b449 100644 --- a/website/content/docs/manage/disaster-recovery/index.mdx +++ b/website/content/docs/manage/disaster-recovery/index.mdx @@ -11,44 +11,46 @@ This page provides an overview of the resources available for preparing a disast ## Overview -Disaster recovery is an important part of business continuity planning. When operating a Consul datacenter, standalone or composed of multiple datacenters, you need to prepare a strategy that includes many outage possibilities. +Disaster recovery is an important part of business continuity planning. When operating a Consul environment, you need to prepare a strategy that includes many outage possibilities. You should also take into account the unique outage possibilities that can occur when your network is composed of multiple Consul datacenters. -Each outage possibility can have different implications, depending on your configuration, but there are strategies that can help you mitigate the damage in case of disaster. The strategy you adopt should include recovery plans for the most severe cases, like a complete outage of one of your physical datacenters, or a cloud provider outage that might make one of the components of your environment temporarily or permanently unavailable. +You should prepare a disaster recovery process for the most severe cases, like a complete outage of one of your physical datacenters, or a cloud provider outage that might make one of the components of your environment temporarily or permanently unavailable. Each outage possibility depends on your configurations, but there are strategies that can help you mitigate the impact when disaster occurs. -To prepare for an outage in your Consul environment follow these logical steps. +To prepare for an outage in your Consul deployment, you should learn how to do the following: -- Learn how to [backup and restore](#backup-and-restore) a Consul datacenter. -- Create a [disaster preparation strategy](#disaster-preparation-strategy) to reduce risks and be prepared for all possible outage cases. -- Learn how to [restore a primary datacenter](#restore-a-primary-datacenter). -- If using Consul in a federated environment, learn how to [restore a federated datacenter](#restore-a-federated-datacenter). +- [Backup and restore a Consul datacenter](#backup-and-restore) +- [Plan a disaster preparation strategy](#disaster-preparation-strategy) specific to your network and application requirements +- [Restore a primary datacenter](#restore-a-primary-datacenter) +- [Restore a federated datacenter](#restore-a-federated-datacenter), if you connect multiple Consul datacenters in a single environment ## Backup and restore -Our recommended method for backing up Consul state uses the built-in Consul snapshot feature, which is available through the HTTP API, using the [`/v1/snapshot`](/consul/api-docs/snapshot) endpoint, or CLI, using the [`consul snapshot`](/consul/commands/snapshot) command. +We recommend backing up Consul's state using the built-in Consul snapshot feature, which is available through the [HTTP API's `/v1/snapshot` endpoint](/consul/api-docs/snapshot), or the [CLI's `consul snapshot` command](/consul/commands/snapshot). -The [Backup and restore a Consul datacenter](/consul/docs/manage/disaster-recovery/backup-restore) documentation covers this in further detail. +For step-by-step instructions, refer to [Backup and restore a Consul datacenter](/consul/docs/manage/disaster-recovery/backup-restore). -You should take snapshots of Consul clusters on a regular basis and store them on mounted or external storage. We recommend to avoid local or ephemeral storage, and we suggest the use of object storage versus block or file based storage, such as Azure blobs, Google Cloud storage, or AWS S3 storage. +We also recommend that you take snapshots of Consul clusters on a regular basis and store them on mounted or external storage. We recommend that you avoid local or ephemeral storage. We also suggest object storage, instead of block or file based storage. Enterprise customers can automate the backup process by using the [Automated Backups](/consul/docs/manage/scale/automated-backup) functionality. ## Disaster preparation strategy -We recommend to regularly test and validate the restore process for critical systems to ensure that everything works as expected. This testing process is typically defined in a _Disaster recovery plan (DRP)_, which is a formal document created by an organization that contains the processes used to recover access to systems and data after a catastrophic event. DRPs typically also include a set of processes for testing and validating disaster recovery procedures and establish a defined process to tackle these events. +We recommend to regularly test and validate the restore process for critical systems to ensure that everything works as expected. -The [Disaster preparation strategy](/consul/docs/manage/disaster-recovery/disaster-preparation) page offers you a list of best practices to make your Consul datacenter more resilient to possible outages. +This testing process is typically defined in a _Disaster recovery plan (DRP)_, which is a formal document created by an organization that contains the processes used to recover access to systems and data after a catastrophic event. DRPs typically also include a set of processes for testing and validating disaster recovery procedures and establish a defined process to tackle these events. + +For more information about best practices and considerations for your own deployments, refer to [Disaster preparation strategy](/consul/docs/manage/disaster-recovery/disaster-preparation). ## Restore a primary datacenter -When an outage happens in the primary datacenter, a lot of the Consul cluster functionalities become unavailable. Refer to [Restore primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary) to learn how to restore a single Consul datacenter functionalities. You should use the instruction provided, adapted to your environment, to build up and internal operations manual for disaster recovery. +When an outage happens in the primary datacenter, many of the Consul cluster's functions become unavailable. To learn how to restore functionality to a single Consul datacenter, refer to [Restore primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. We also provide tutorials on disaster recovery to help you test the commands in a sandbox environment: - [Disaster recovery for Consul clusters](/consul/tutorials/operate-consul/recovery-outage) - [Disaster Recovery for Consul on Kubernetes](/consul/tutorials/production-kubernetes/kubernetes-disaster-recovery) -## Restore a federated datacenter +## Restore a federated (secondary) datacenter -A secondary datacenter outage, while not as tragic as a primary datacenter loss, can still impact deeply your environment. Refer to [Restore federated datacenter](/consul/docs/manage/disaster-recovery/restore-federated) to learn how to restore a federated Consul datacenter functionalities. You should use the instruction provided, adapted to your environment, to build up and internal operations manual for disaster recovery. +When a secondary datacenter experiences an outage, it can still impact your environment even though the primary datacenter never stopped operations. To learn how to restore a federated Consul datacenter's functionality, refer to [Restore federated datacenter](/consul/docs/manage/disaster-recovery/restore-federated). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. diff --git a/website/content/docs/manage/disaster-recovery/restore-federated.mdx b/website/content/docs/manage/disaster-recovery/restore-federated.mdx index df0c9710369c..991be1a1e20d 100644 --- a/website/content/docs/manage/disaster-recovery/restore-federated.mdx +++ b/website/content/docs/manage/disaster-recovery/restore-federated.mdx @@ -7,33 +7,33 @@ description: >- # Restore federated datacenter -This topic provides an overview of the best practices for restoring a federated datacenter in case of an outage. +This topic provides an overview of the best practices for restoring a secondary datacenter in a WAN-federated deployment that experiences an outage. ## Introduction -If you are operating a WAN federated datacenter and you experience an outage there are multiple levels of disruption that can occur. +If you operate a WAN-federated environment and you experience an outage in a secondary datacenter, there are multiple levels of disruption that can occur. -- **Loss of quorum in the secondary datacenter.** This is an outage where the datacenter has less than *(N/2)+1* servers available, where N is the total number of servers. While some of the nodes are unaffected, there are not enough healthy nodes to form a quorum. -- **Complete loss of the secondary datacenter.** This is either a disaster event that completely wipes an entire facility or a major outage of your cloud provider. -- **Loss of federation due to primary datacenter restore.** This is an outage where, after a primary datacenter restore, the newly deployed primary datacenter nodes have different IP addresses than the ones used in your secondary datacenter configuration for WAN federation. +- **Loss of quorum in the secondary datacenter.** When the datacenter has less than *(N/2)+1* servers available, where N is the total number of servers, it loses quorum. In this situation, some of the nodes are unaffected but there are not enough healthy nodes to form a quorum. +- **Complete loss of the secondary datacenter.** When a disaster event at a facility completely wipes out your cluster, or a major outage occurs with your cloud provider. +- **Loss of federation due to primary datacenter restore.** After you restore a primary datacenter , the newly deployed primary datacenter nodes have different IP addresses than the ones used the configurations of your secondary datacenters. ## Loss of quorum in the secondary datacenter -This case is equivalent to a loss of quorum in your primary datacenter with the advantage that the issue does not affect any other datacenters. +This situation is equivalent to a loss of quorum in your primary datacenter, but the issue is limited to the secondary datacenter does not affect the rest of your Consul environment. -Follow instruction in [Loss of quorum in the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#loss-of-quorum-in-the-primary-datacenter) to restore the affected datacenter. +To restore the datacenter, follow the instructions in [Loss of quorum in the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#loss-of-quorum-in-the-primary-datacenter). ## Complete loss of the secondary datacenter -This case is equivalent to a complete loss of your primary datacenter with the advantage that the issue does not affect any other datacenters. +This situation is equivalent to a complete loss of your primary datacenter, but the issue is limited to the secondary datacenter does not affect the rest of your Consul environment. -Follow instruction in [Complete loss of the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#complete-loss-of-the-primary-datacenter) to restore the affected datacenter. +To restore the affected datacenter, follow the instructions in [Complete loss of the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#complete-loss-of-the-primary-datacenter). -## Loss of federation due to primary datacenter restore. +## Connection to primary datacenter lost -In the case of primary datacenter recovery, after an outage, it is possible that the new servers will have a different IP than the one used to wan join them from the secondary datacenter. In that scenario, the federation will be broken. +After recovering a primary datacenter, it is possible that the new servers will have a different IP address than the one used to join them from the secondary datacenter. In that situation, the secondary datacenters cannot reconnect to the primary datacenter. -To verify the federation you can use the [`consul members -wan`](/consul/commands/members) command on the primary datacenter. +To verify the federation on the primary datacenter, use the [`consul members -wan` command](/consul/commands/members). ```shell-session $ consul members -wan @@ -45,9 +45,9 @@ consul-server-2.primary 172.20.0.14:8302 alive server 1.21.4 2 p In this example, the command only shows servers from the primary datacenter, indicating that the federation is not in place. -To restore the federation you must perform a rolling restart of the secondary datacenter servers using the new primary datacenter servers' IP in the [`retry-join-wan`](/consul/docs/reference/agent/configuration-file/join#_retry_join_wan) configuration parameter. +To restore federation, you must perform a rolling restart of the secondary datacenter servers using the new IP of the primary datacenter servers in the [`retry-join-wan` agent configuration parameter](/consul/docs/reference/agent/configuration-file/join#_retry_join_wan). -For the example provided, an example configuration for the `retry-join-wan` parameter could be the following: +A configuration for the `retry-join-wan` parameter resembles the following example: @@ -61,7 +61,7 @@ retry_join_wan = [ "172.20.0.10", "172.20.0.9", "172.20.0.14" ] -After changing the configuration in all secondary datacenter's server nodes, perform a rolling restart. If the new configuration is correct you will be able to observe it from the logs. +After you update the configuration in each of secondary datacenter's server nodes, perform a rolling restart of the nodes. If the new configuration is correct you will be able to observe it from the logs. @@ -72,7 +72,7 @@ After changing the configuration in all secondary datacenter's server nodes, pe -After the rolling restart, the `consul members -wan` command output will now show all the servers. +After the rolling restart, running the `consul members -wan` command on the primary datacenter should return all of the servers. ```shell-session $ consul members -wan @@ -85,7 +85,7 @@ consul-server-1.secondary 172.20.0.4:8302 alive server 1.21.4 2 s consul-server-2.secondary 172.20.0.8:8302 alive server 1.21.4 2 secondary default ``` -To prevent this kind of outages, you can either use hostnames instead of IP addresses or, for cloud providers that support it, use [cloud auto join](/consul/docs/deploy/server/cloud-auto-join) functionality. +To prevent these kinds of outages, you can use hostnames instead of IP addresses, or for cloud providers that support it, you can use Consul's [cloud auto join feature](/consul/docs/deploy/server/cloud-auto-join). ## Additional guidance diff --git a/website/content/docs/manage/disaster-recovery/restore-primary.mdx b/website/content/docs/manage/disaster-recovery/restore-primary.mdx index c6adbd64e24f..24ccf099b447 100644 --- a/website/content/docs/manage/disaster-recovery/restore-primary.mdx +++ b/website/content/docs/manage/disaster-recovery/restore-primary.mdx @@ -7,27 +7,25 @@ description: >- # Restore primary datacenter -This topic provides an overview of the best practices for restoring a primary datacenter in case of an outage. +This describes the process to restore a primary datacenter after an outage. ## Introduction -Depending on your configuration, multiple levels of outage can occur. +When the primary datacenter is unable to serve requests after an outage, there are two possible scenarios: -This page covers how to handle outages that render the primary datacenter unable to serve requests, including service discovery requests to Consul DNS and intention validation. This can happen in many possible ways, but the two extremes of the spectrum are the following: +- **Loss of quorum in the primary datacenter.** The datacenter has less than *(N/2)+1* servers available, where N is the total number of servers. While some of the nodes are unaffected, there are not enough healthy nodes to form a quorum. +- **Complete loss of the primary datacenter.** When a disaster event at a facility completely wipes out your cluster, or a major outage occurs with your cloud provider. -- **Loss of quorum in the primary datacenter.** This is an outage where the datacenter has less than *(N/2)+1* servers available, where N is the total number of servers. While some of the nodes are unaffected, there are not enough healthy nodes to form a quorum. -- **Complete loss of the primary datacenter.** This is either a disaster event that completely wipes an entire facility or a major outage of your cloud provider. - -For the topics discussed in this page, we use the definition _primary datacenter_ to define both the only datacenter in the environment and the primary datacenter in a federated environment. The reason for this is that, in both cases, an outage in the datacenter impact the functionalities of the whole environment. +In Consul, _primary datacenter_ can refer to the only datacenter in the environment, or it can refer to the main datacenter in a WAN-federated environment. ## Loss of quorum in the primary datacenter -In the scenario where you have lost enough servers in your primary datacenter that a quorum cannot be reached, you will experience the same level service failure as if the whole +If you lost enough servers that your primary datacenter cannot reach quorum, you will experience service failure as if the whole datacenter is unavailable. -If the outage is limited to the server nodes, or did not severely impact your client fleet, it might not be practical to rebuild the whole datacenter only to re-establish a quorum. +If the outage is limited to the server nodes, or did not severely impact your client fleet, it may be possible to resume operations by re-establishing quorum. -In this scenario, you can follow the [Outage Recovery](/consul/tutorials/operate-consul/recovery-outage#server-failure-in-a-multi-server-cluster-losing-quorum) tutorial to restore your server nodes and make sure they are able to reform the raft cluster and elect a leader. +The [Outage Recovery tutorial](/consul/tutorials/operate-consul/recovery-outage#server-failure-in-a-multi-server-cluster-losing-quorum) provides a guide to restore your server nodes and make sure they are reform the raft cluster and elect a leader. Once the raft cluster is reformed, and the datacenter is again operational, you can now restart any client agents that might have been affected by the outage. From f1a73bfb485f2d435b1fecf3053859a4a2c6f9c8 Mon Sep 17 00:00:00 2001 From: danielehc <40759828+danielehc@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:25:00 +0200 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com> --- .../disaster-recovery/restore-primary.mdx | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/website/content/docs/manage/disaster-recovery/restore-primary.mdx b/website/content/docs/manage/disaster-recovery/restore-primary.mdx index 24ccf099b447..9d5b22cc5176 100644 --- a/website/content/docs/manage/disaster-recovery/restore-primary.mdx +++ b/website/content/docs/manage/disaster-recovery/restore-primary.mdx @@ -27,17 +27,17 @@ If the outage is limited to the server nodes, or did not severely impact your cl The [Outage Recovery tutorial](/consul/tutorials/operate-consul/recovery-outage#server-failure-in-a-multi-server-cluster-losing-quorum) provides a guide to restore your server nodes and make sure they are reform the raft cluster and elect a leader. -Once the raft cluster is reformed, and the datacenter is again operational, you can now restart any client agents that might have been affected by the outage. +After the cluster regains quorum and the datacenter is operational, you can restart any client agents that might have been affected by the outage. They should join the server nodes and resume operation. ## Complete loss of the primary datacenter -The worst case scenario in Consul environment, federated or not, is the loss of the primary datacenter. +The worst case scenario in a Consul environment is the loss of the primary datacenter. -In this scenario, the course of action should aim to restore the lost datacenter as quickly as possible. The following sections will guide you through the necessary steps to perform a restore and to make sure all functionalities are re-established. +You should aim to restore the lost datacenter as quickly as possible. ## Restore primary datacenter -The steps necessary to restore your environment after a full outage of your primary datacenter are the following: +To restore your Consul environment after your primary datacenter experiences a full outage, complete the following steps: 1. [Restore datacenter nodes](#restore-datacenter-nodes). 1. [Restore the last snapshot](#restore-snapshot) to the newly recovered datacenter. @@ -48,21 +48,21 @@ The steps necessary to restore your environment after a full outage of your prim ### Restore datacenter nodes -The first step for your recovery is to re-deploy your Consul datacenter. For this you can follow the same process you used for the initial deploy of your Consul datacenter. +The first step for recovery is to re-deploy your Consul datacenter. You can follow the same process you used for the initial deploy of your Consul datacenter. -This process should be automated as much as possible to reduce downtime and to reduce human errors. +We recommend automating this process as much as possible to reduce downtime and to prevent human errors. -In a federated environment, to make sure the new deployment is able to communicate with the secondary datacenters, you need to ensure that the recovered datacenter uses the same: +For the new deployment to communicate with federated secondary datacenters, the recovered datacenter must use the same: - CA certificate - CA key - Gossip encryption key -as the ones used in the failed environment. This process can be simplified by introducing Vault both to [generate mTLS Certificates for Consul agents](/consul/docs/automate/consul-template/vault/mtls) and as a [Consul service mesh certification authority](/consul/tutorials/operate-consul/vault-pki-consul-connect-ca). +One way to automate this process is to use Vault to [generate mTLS Certificates for Consul agents](/consul/docs/automate/consul-template/vault/mtls) and [operate as the Consul service mesh certification authority](/consul/tutorials/operate-consul/vault-pki-consul-connect-ca). ### Restore snapshot -After the datacenter has been restored, restore the latest snapshot using the [`consul snapshot restore`](/consul/commands/snapshot/restore) command. +After you re-deploy the datacenter, restore the latest snapshot using the [`consul snapshot restore` command](/consul/commands/snapshot/restore). ```shell-session $ consul snapshot restore -token= backup.snap @@ -72,18 +72,18 @@ Restored snapshot -The `token` used for the snapshot restore procedure needs to be a token valid for the newly restored datacenter. If your restored datacenter does not have ACL enabled, you can restore the snapshot without a token. +The `token` you use for the snapshot restore procedure must be valid for the newly restored datacenter. If your restored datacenter does not have ACL enabled, you can restore the snapshot without a token. ### Set Consul ACL agent tokens -The newly restarted nodes will now be missing the ACL tokens needed to successfully join the datacenter. Once you restored the ACL system with the snapshot restore you will be able to set the tokens for the different nodes using the [`consul acl`](/consul/commands/acl) commands. +The newly restarted nodes lack the ACL tokens they need to successfully join the datacenter. -The following operations require a token with `acl = write` privileges. Also, after the snapshot is restored the ACL system will now contain the previous tokens created before the outage. You can use the any management token you had in your datacenter before the outage. To setup the token for the request you can either use the `CONSUL_HTTP_TOKEN` environment +To set the tokens for the server nodes using the [`consul acl` commands](/consul/commands/acl), you need a token with `acl = write` privileges. After the snapshot is restored, the ACL system contains the tokens created before the outage. You can use any management token you had in your datacenter before the outage if you set it to the `CONSUL_HTTP_TOKEN` environment variable or to pass it directly using the `-token=` command parameter. -If you lost the management token in the outage, you can follow [Reset Access Control List (ACL) system](/consul/docs/secure/acl/reset) to generate a new one. +If you lost the management token in the outage, you can [Reset the Access Control List (ACL) system](/consul/docs/secure/acl/reset) to generate a new one. First, retrieve the tokens available in the datacenter. @@ -103,7 +103,7 @@ Policies: ... ``` -Then, retrieve the token using the `AccessorID`. +Then retrieve the token using the `AccessorID`. ```shell-session $ consul acl token read -id 6e5516f1-c29d-4503-82bc-016f7957a5c9 @@ -125,12 +125,12 @@ $ consul acl set-agent-token agent e26bd23e-5edd-4aa4-bf7d-3ef5963e0ec0 ACL token "agent" set successfully ``` -You will have to set the token for all the server nodes in order to get them able to re-join the datacenter successfully. Depending on your configuration you might have different tokens for each server or re-use the same token for all server agents but in both cases the token needs to be set on all server agents otherwise they will not be able to successfully join the datacenter. +You must set the token for each server node for them to re-join the datacenter successfully. Depending on your configuration you might have different tokens for each server, or you may reuse the same token for all server agents. In both cases, the token must be set on all server agents, otherwise they cannot successfully join the datacenter. ### Perform a rolling restart of the servers -After the snapshot is restored and the tokens have been set on the nodes, you will observe errors in the server logs about duplicate node ids. This happens because the servers received new node ids when they were reinstalled, and these node ids are different from the ones stored in the snapshot. +After you restore from the snapshot and set the tokens on all nodes, you may observe errors in the server logs indicating duplicate node ids. This error occurs because the servers received new node ids when they were reinstalled, which are different from the ones stored in the snapshot. @@ -144,7 +144,7 @@ After the snapshot is restored and the tokens have been set on the nodes, you wi -To resolve these errors, perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. Once servers are restarted, the node ids will be set to the expected value and this will resolve the errors in the logs. +To resolve these errors, perform a [`consul leave`](/consul/commands/leave) on each server and then start the server again. Do this one server at a time. After you restart every server, the node ids will be set to the expected value and the error in the logs will be resolved. @@ -154,15 +154,15 @@ For more information on this error and for more ways to resolve it, refer to [Sn ### Perform a rolling restart of the clients -The same log errors will be present on the clients. After completing the server restarts, perform the same operations on the clients to resolve the log errors. +The same node id errors will be present on the client nodes as well. After you complete the server restarts, perform the same operations on the clients to resolve the log errors. ## Restore and validate federation -If you have a federated environment, after the primary datacenter restore it is possible that the IP addresses of the Consul server agents changed. +If you have a federated environment, it is possible that the IP addresses of the Consul server agents changed when the primary datacenter was restored. -Depending on the configuration of your secondary datacenters' server agents, you might need to re-establish federation by updating the server configuration. +Depending on how you configured the server agents in your secondary datacenter, you may need to re-establish federation by updating the secondary datacenter configurations as well. -Refer to [Loss of federation due to primary datacenter restore.](/consul/docs/manage/disaster-recovery/restore-federated#loss-of-federation-due-to-primary-datacenter-restore) for more information on this. +For more information, refer to [Loss of federation due to primary datacenter restore](/consul/docs/manage/disaster-recovery/restore-federated#loss-of-federation-due-to-primary-datacenter-restore). ## Additional guidance From ddad2c23b3955691183dd8e591c8fd0c6ea99e79 Mon Sep 17 00:00:00 2001 From: danielehc Date: Tue, 30 Sep 2025 16:57:27 +0200 Subject: [PATCH 6/7] Change navigation --- .../docs/manage/disaster-recovery/index.mdx | 2 +- .../{disaster-preparation.mdx => prepare.mdx} | 0 .../primary.mdx} | 0 .../secondary.mdx} | 6 +++--- website/data/docs-nav-data.json | 19 ++++++++++++------- 5 files changed, 16 insertions(+), 11 deletions(-) rename website/content/docs/manage/disaster-recovery/{disaster-preparation.mdx => prepare.mdx} (100%) rename website/content/docs/manage/disaster-recovery/{restore-primary.mdx => restore/primary.mdx} (100%) rename website/content/docs/manage/disaster-recovery/{restore-federated.mdx => restore/secondary.mdx} (97%) diff --git a/website/content/docs/manage/disaster-recovery/index.mdx b/website/content/docs/manage/disaster-recovery/index.mdx index 9bbd2ad0b449..b9dcac563553 100644 --- a/website/content/docs/manage/disaster-recovery/index.mdx +++ b/website/content/docs/manage/disaster-recovery/index.mdx @@ -38,7 +38,7 @@ We recommend to regularly test and validate the restore process for critical sys This testing process is typically defined in a _Disaster recovery plan (DRP)_, which is a formal document created by an organization that contains the processes used to recover access to systems and data after a catastrophic event. DRPs typically also include a set of processes for testing and validating disaster recovery procedures and establish a defined process to tackle these events. -For more information about best practices and considerations for your own deployments, refer to [Disaster preparation strategy](/consul/docs/manage/disaster-recovery/disaster-preparation). +For more information about best practices and considerations for your own deployments, refer to [Disaster preparation strategy](/consul/docs/manage/disaster-recovery/prepare). ## Restore a primary datacenter diff --git a/website/content/docs/manage/disaster-recovery/disaster-preparation.mdx b/website/content/docs/manage/disaster-recovery/prepare.mdx similarity index 100% rename from website/content/docs/manage/disaster-recovery/disaster-preparation.mdx rename to website/content/docs/manage/disaster-recovery/prepare.mdx diff --git a/website/content/docs/manage/disaster-recovery/restore-primary.mdx b/website/content/docs/manage/disaster-recovery/restore/primary.mdx similarity index 100% rename from website/content/docs/manage/disaster-recovery/restore-primary.mdx rename to website/content/docs/manage/disaster-recovery/restore/primary.mdx diff --git a/website/content/docs/manage/disaster-recovery/restore-federated.mdx b/website/content/docs/manage/disaster-recovery/restore/secondary.mdx similarity index 97% rename from website/content/docs/manage/disaster-recovery/restore-federated.mdx rename to website/content/docs/manage/disaster-recovery/restore/secondary.mdx index 991be1a1e20d..fe3c49c71195 100644 --- a/website/content/docs/manage/disaster-recovery/restore-federated.mdx +++ b/website/content/docs/manage/disaster-recovery/restore/secondary.mdx @@ -1,11 +1,11 @@ --- layout: docs -page_title: Restore federated datacenter +page_title: Restore secondary datacenters description: >- - Restore federated Consul datacenter in the event of an outage. + Restore secondary Consul datacenters in the event of an outage. --- -# Restore federated datacenter +# Restore secondary datacenters This topic provides an overview of the best practices for restoring a secondary datacenter in a WAN-federated deployment that experiences an outage. diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json index 67fbfcd10145..61420753c23f 100644 --- a/website/data/docs-nav-data.json +++ b/website/data/docs-nav-data.json @@ -908,15 +908,20 @@ }, { "title": "Disaster preparation strategy", - "path": "manage/disaster-recovery/disaster-preparation" + "path": "manage/disaster-recovery/prepare" }, { - "title": "Restore primary datacenter", - "path": "manage/disaster-recovery/restore-primary" - }, - { - "title": "Restore federated datacenters", - "path": "manage/disaster-recovery/restore-federated" + "title": "Restore federated clusters", + "routes": [ + { + "title": "Restore primary datacenter", + "path": "manage/disaster-recovery/restore/primary" + }, + { + "title": "Restore secondary datacenters", + "path": "manage/disaster-recovery/restore/secondary" + } + ] }, { "title": "Reset ACL system", From e9a3f09e4ae1d9c96a42ddfb4bdce38b3d1a6aa5 Mon Sep 17 00:00:00 2001 From: danielehc Date: Tue, 30 Sep 2025 17:31:20 +0200 Subject: [PATCH 7/7] Fix links --- .../content/docs/manage/disaster-recovery/backup-restore.mdx | 2 +- website/content/docs/manage/disaster-recovery/index.mdx | 4 ++-- .../content/docs/manage/disaster-recovery/restore/primary.mdx | 2 +- .../docs/manage/disaster-recovery/restore/secondary.mdx | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/website/content/docs/manage/disaster-recovery/backup-restore.mdx b/website/content/docs/manage/disaster-recovery/backup-restore.mdx index f7c4f6d97c02..f64973573183 100644 --- a/website/content/docs/manage/disaster-recovery/backup-restore.mdx +++ b/website/content/docs/manage/disaster-recovery/backup-restore.mdx @@ -92,4 +92,4 @@ Restored snapshot For more information on disaster recovery, including detailed instructions on how to backup and restore Consul datacenters, refer to the following resources: - [Consul Disaster Recovery](/consul/docs/manage/disaster-recovery) -- [Disaster recovery for WAN-federated datacenters](/consul/docs/manage/disaster-recovery/restore-federated) +- [Disaster recovery for WAN-federated datacenters](/consul/docs/manage/disaster-recovery/restore/secondary) diff --git a/website/content/docs/manage/disaster-recovery/index.mdx b/website/content/docs/manage/disaster-recovery/index.mdx index b9dcac563553..37f6884a0dc3 100644 --- a/website/content/docs/manage/disaster-recovery/index.mdx +++ b/website/content/docs/manage/disaster-recovery/index.mdx @@ -42,7 +42,7 @@ For more information about best practices and considerations for your own deploy ## Restore a primary datacenter -When an outage happens in the primary datacenter, many of the Consul cluster's functions become unavailable. To learn how to restore functionality to a single Consul datacenter, refer to [Restore primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. +When an outage happens in the primary datacenter, many of the Consul cluster's functions become unavailable. To learn how to restore functionality to a single Consul datacenter, refer to [Restore primary datacenter](/consul/docs/manage/disaster-recovery/restore/primary). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. We also provide tutorials on disaster recovery to help you test the commands in a sandbox environment: @@ -51,6 +51,6 @@ We also provide tutorials on disaster recovery to help you test the commands in ## Restore a federated (secondary) datacenter -When a secondary datacenter experiences an outage, it can still impact your environment even though the primary datacenter never stopped operations. To learn how to restore a federated Consul datacenter's functionality, refer to [Restore federated datacenter](/consul/docs/manage/disaster-recovery/restore-federated). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. +When a secondary datacenter experiences an outage, it can still impact your environment even though the primary datacenter never stopped operations. To learn how to restore a federated Consul datacenter's functionality, refer to [Restore federated datacenter](/consul/docs/manage/disaster-recovery/restore/secondary). You should adapt these instructions to your environment as you build your internal operations manual for disaster recovery. diff --git a/website/content/docs/manage/disaster-recovery/restore/primary.mdx b/website/content/docs/manage/disaster-recovery/restore/primary.mdx index 9d5b22cc5176..ed1fb46493d1 100644 --- a/website/content/docs/manage/disaster-recovery/restore/primary.mdx +++ b/website/content/docs/manage/disaster-recovery/restore/primary.mdx @@ -162,7 +162,7 @@ If you have a federated environment, it is possible that the IP addresses of the Depending on how you configured the server agents in your secondary datacenter, you may need to re-establish federation by updating the secondary datacenter configurations as well. -For more information, refer to [Loss of federation due to primary datacenter restore](/consul/docs/manage/disaster-recovery/restore-federated#loss-of-federation-due-to-primary-datacenter-restore). +For more information, refer to [Loss of federation due to primary datacenter restore](/consul/docs/manage/disaster-recovery/restore/secondary#loss-of-federation-due-to-primary-datacenter-restore). ## Additional guidance diff --git a/website/content/docs/manage/disaster-recovery/restore/secondary.mdx b/website/content/docs/manage/disaster-recovery/restore/secondary.mdx index fe3c49c71195..37a846927cd7 100644 --- a/website/content/docs/manage/disaster-recovery/restore/secondary.mdx +++ b/website/content/docs/manage/disaster-recovery/restore/secondary.mdx @@ -21,13 +21,13 @@ If you operate a WAN-federated environment and you experience an outage in a sec This situation is equivalent to a loss of quorum in your primary datacenter, but the issue is limited to the secondary datacenter does not affect the rest of your Consul environment. -To restore the datacenter, follow the instructions in [Loss of quorum in the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#loss-of-quorum-in-the-primary-datacenter). +To restore the datacenter, follow the instructions in [Loss of quorum in the primary datacenter](/consul/docs/manage/disaster-recovery/restore/primary#loss-of-quorum-in-the-primary-datacenter). ## Complete loss of the secondary datacenter This situation is equivalent to a complete loss of your primary datacenter, but the issue is limited to the secondary datacenter does not affect the rest of your Consul environment. -To restore the affected datacenter, follow the instructions in [Complete loss of the primary datacenter](/consul/docs/manage/disaster-recovery/restore-primary#complete-loss-of-the-primary-datacenter). +To restore the affected datacenter, follow the instructions in [Complete loss of the primary datacenter](/consul/docs/manage/disaster-recovery/restore/primary#complete-loss-of-the-primary-datacenter). ## Connection to primary datacenter lost