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. |