From 0e0e2e1443301dd5095430fa7abcd0537aa42e0c Mon Sep 17 00:00:00 2001
From: keefetangcf <133301316+keefetangcf@users.noreply.github.com>
Date: Wed, 14 May 2025 22:16:11 +1000
Subject: [PATCH 1/5] Create terraform-example for bulk redirect
Adding a new page to demonstrate an example terraform config file
---
.../bulk-redirects/terraform-example.mdx | 112 ++++++++++++++++++
1 file changed, 112 insertions(+)
create mode 100644 src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
diff --git a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
new file mode 100644
index 000000000000000..75021ce96f55e10
--- /dev/null
+++ b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
@@ -0,0 +1,112 @@
+---
+title: Create a bulk redirect rule using Terraform
+pcx_content_type: configuration
+sidebar:
+ order: 6
+ label: Create bulk redirect using Terraform
+---
+
+import { Render } from "~/components";
+
+
+
+The following example defines bulk redirect rules for an account using Terraform. The rule creates a redirect list item and a bulk URL redirect rule from the list to visitors based on the defined redirect list.
+
+```tf
+# Cloudflare account ID
+variable "cloudflare_account_id" {
+ default = ""
+}
+
+# Bulk redirect list description
+variable "bulk_redirect_list_description" {
+ default = "my bulk redirect description"
+}
+
+# Bulk redirect list name
+variable "bulk_redirect_list_name" {
+ default = "my_bulk_redirect_list_name"
+}
+
+# Bulk redirect list item
+variable "bulk_redirects" {
+ type = map(object({
+ source_url = string
+ target_url = string
+ status_code = number
+ }))
+
+ default = {
+ "redirect1" = {
+ source_url = "https://source.url/redirect/1"
+ target_url = "https://target.url/?redirect=1"
+ status_code = 301
+ }
+ "redirect2" = {
+ source_url = "https://source.url/redirect/2"
+ target_url = "https://target.url/?redirect=2"
+ status_code = 302
+ }
+ "redirect3" = {
+ source_url = "https://source.url/redirect/3"
+ target_url = "https://target.url/?redirect=3"
+ status_code = 307
+ }
+ }
+}
+
+# Create redirect list
+resource "cloudflare_list" "bulk_redirect_to_id" {
+ account_id = var.cloudflare_account_id
+ name = var.bulk_redirect_list_name
+ description = var.bulk_redirect_list_description
+ kind = "redirect"
+}
+
+# Add redirect item into the redirect list
+resource "cloudflare_list_item" "bulk_redirect_to_id_item" {
+ for_each = { for redirect in var.bulk_redirects : "${redirect.source_url}" => redirect }
+
+ account_id = var.cloudflare_account_id
+ list_id = cloudflare_list.bulk_redirect_to_id.id
+
+ redirect {
+ source_url = each.value.source_url
+ target_url = each.value.target_url
+ status_code = each.value.status_code
+ }
+
+ depends_on = [
+ cloudflare_list.bulk_redirect_to_id
+ ]
+
+}
+
+# Create bulk redirect and attach redirect list
+resource "cloudflare_ruleset" "bulk_root_redirect_to_id" {
+ account_id = var.cloudflare_account_id
+ name = var.bulk_redirect_list_name
+ description = var.bulk_redirect_list_description
+ kind = "root"
+ phase = "http_request_redirect"
+
+ rules {
+ action = "redirect"
+ action_parameters {
+ from_list {
+ name = var.bulk_redirect_list_name
+ key = "http.request.full_uri"
+ }
+ }
+ expression = "http.request.full_uri in ${"$"}${var.bulk_redirect_list_name}"
+ description = var.bulk_redirect_list_description
+ enabled = true
+ }
+
+ depends_on = [
+ cloudflare_list_item.bulk_redirect_to_id_item
+ ]
+}
+```
+
+
From ce67f9746a9cfd8ed8bfeacc3264d1e2c80900b4 Mon Sep 17 00:00:00 2001
From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com>
Date: Tue, 17 Jun 2025 08:54:19 +0100
Subject: [PATCH 2/5] PCX update (based on SME review)
---
.../bulk-redirects/terraform-example.mdx | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
index 75021ce96f55e10..15068d83a5a5c19 100644
--- a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
+++ b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
@@ -1,16 +1,16 @@
---
-title: Create a bulk redirect rule using Terraform
+title: Configure Bulk Redirects using Terraform
pcx_content_type: configuration
sidebar:
order: 6
- label: Create bulk redirect using Terraform
+ label: Configure using Terraform
---
import { Render } from "~/components";
-The following example defines bulk redirect rules for an account using Terraform. The rule creates a redirect list item and a bulk URL redirect rule from the list to visitors based on the defined redirect list.
+This Terraform example configures account-level Bulk Redirects. It creates a [Bulk Redirect List](/rules/url-forwarding/bulk-redirects/concepts/#bulk-redirect-lists) populated with [URL redirects](/rules/url-forwarding/bulk-redirects/concepts/#url-redirects) and a corresponding [Bulk Redirect Rule](/rules/url-forwarding/bulk-redirects/concepts/#bulk-redirect-rules) to activate them.
```tf
# Cloudflare account ID
@@ -28,7 +28,7 @@ variable "bulk_redirect_list_name" {
default = "my_bulk_redirect_list_name"
}
-# Bulk redirect list item
+# Bulk redirect list item (URL redirect)
variable "bulk_redirects" {
type = map(object({
source_url = string
@@ -37,8 +37,8 @@ variable "bulk_redirects" {
}))
default = {
- "redirect1" = {
- source_url = "https://source.url/redirect/1"
+ "redirect1" = {
+ source_url = "https://source.url/redirect/1"
target_url = "https://target.url/?redirect=1"
status_code = 301
}
From 9a08f7dd89091986ef873ee2e9df1596086070dc Mon Sep 17 00:00:00 2001
From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com>
Date: Tue, 17 Jun 2025 09:02:32 +0100
Subject: [PATCH 3/5] Update page order
---
.../rules/url-forwarding/bulk-redirects/terraform-example.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
index 15068d83a5a5c19..75a796e17cb3e00 100644
--- a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
+++ b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
@@ -2,7 +2,7 @@
title: Configure Bulk Redirects using Terraform
pcx_content_type: configuration
sidebar:
- order: 6
+ order: 8
label: Configure using Terraform
---
From fa799b322f00a2aa1254c8ea046e997b533f5fa9 Mon Sep 17 00:00:00 2001
From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com>
Date: Tue, 17 Jun 2025 09:16:37 +0100
Subject: [PATCH 4/5] Add required permissions
---
.../bulk-redirects/terraform-example.mdx | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
index 75a796e17cb3e00..bd4d4e66cb01a51 100644
--- a/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
+++ b/src/content/docs/rules/url-forwarding/bulk-redirects/terraform-example.mdx
@@ -6,7 +6,7 @@ sidebar:
label: Configure using Terraform
---
-import { Render } from "~/components";
+import { Render, Tabs, TabItem } from "~/components";
@@ -109,4 +109,20 @@ resource "cloudflare_ruleset" "bulk_root_redirect_to_id" {
}
```
+## Required token permissions
+
+Your API token must have at least the following [permissions](/fundamentals/api/reference/permissions/):
+
+
+
+- Account Filter Lists > Edit
+- Bulk URL Redirects > Edit
+
+
+
+- Account Rule Lists Write
+- Bulk URL Redirects Write
+
+
+
From 7b667773e2c77db4465aee583346e791338defbe Mon Sep 17 00:00:00 2001
From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com>
Date: Tue, 17 Jun 2025 09:16:50 +0100
Subject: [PATCH 5/5] Update permissions description
---
.../partials/fundamentals/account-permissions-table.mdx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/content/partials/fundamentals/account-permissions-table.mdx b/src/content/partials/fundamentals/account-permissions-table.mdx
index ac75ee15c9ca8b9..4f270c3a4b77a0b 100644
--- a/src/content/partials/fundamentals/account-permissions-table.mdx
+++ b/src/content/partials/fundamentals/account-permissions-table.mdx
@@ -47,8 +47,8 @@ import { Markdown } from "~/components";
| { props.src === "api" && "Account" } API Gateway {props.editWord} | Grants write access to [API Gateway (including API Shield)](/api-shield/) for all domains in an account. |
| Billing Read | Grants read access to [billing profile, subscriptions, and access to fetch invoices](/billing/) and entitlements. |
| Billing {props.editWord} | Grants write access to [billing profile, subscriptions, and access to fetch invoices and entitlements](/billing/). |
-| Bulk URL Redirects Read | Grants read access to [Bulk URL Redirects](/rules/url-forwarding/bulk-redirects/). |
-| Bulk URL Redirects {props.editWord} | Grants write access to [Bulk URL Redirects](/rules/url-forwarding/bulk-redirects/). |
+| Bulk URL Redirects Read | Grants read access to [Bulk Redirects](/rules/url-forwarding/bulk-redirects/). |
+| Bulk URL Redirects {props.editWord} | Grants write access to [Bulk Redirects](/rules/url-forwarding/bulk-redirects/). |
| China Network Steering Read | Grants read access to [China Network Steering](/china-network/). |
| China Network Steering {props.editWord} | Grants write access to [China Network Steering](/china-network/). |
| Cloudchamber Read | Grants read access to Cloudchamber deployments. |