feat: manage cloudflare pages project within projects tf (#147)

This commit is contained in:
Zack Pollard
2025-06-10 17:26:58 +01:00
committed by GitHub
parent 27c88db7e5
commit eaa4cebab9
10 changed files with 115 additions and 1 deletions
@@ -0,0 +1,5 @@
locals {
env = get_env("TF_VAR_env")
app_name = replace(get_env("TF_VAR_app_name"), "-", "_")
}
@@ -0,0 +1,25 @@
# This file is maintained automatically by "tofu init".
# Manual edits may be lost in future updates.
provider "registry.opentofu.org/cloudflare/cloudflare" {
version = "4.52.0"
constraints = "~> 4.46, 4.52.0"
hashes = [
"h1:NTaOQfYINA0YTG/V1/9+SYtgX1it63+cBugj4WK4FWc=",
"zh:19be1a91c982b902c42aba47766860dfa5dc151eed1e95fd39ca642229381ef0",
"zh:1de451c4d1ecf7efbe67b6dace3426ba810711afdd644b0f1b870364c8ae91f8",
"zh:352b4a2120173298622e669258744554339d959ac3a95607b117a48ee4a83238",
"zh:3c6f1346d9154afbd2d558fabb4b0150fc8d559aa961254144fe1bc17fe6032f",
"zh:4c4c92d53fb535b1e0eff26f222bbd627b97d3b4c891ec9c321268676d06152f",
"zh:53276f68006c9ceb7cdb10a6ccf91a5c1eadd1407a28edb5741e84e88d7e29e8",
"zh:7925a97773948171a63d4f65bb81ee92fd6d07a447e36012977313293a5435c9",
"zh:7dfb0a4496cfe032437386d0a2cd9229a1956e9c30bd920923c141b0f0440060",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:8d4aa79f0a414bb4163d771063c70cd991c8fac6c766e685bac2ee12903c5bd6",
"zh:a67540c13565616a7e7e51ee9366e88b0dc60046e1d75c72680e150bd02725bb",
"zh:a936383a4767f5393f38f622e92bf2d0c03fe04b69c284951f27345766c7b31b",
"zh:d4887d73c466ff036eecf50ad6404ba38fd82ea4855296b1846d244b0f13c380",
"zh:e9093c8bd5b6cd99c81666e315197791781b8f93afa14fc2e0f732d1bb2a44b7",
"zh:efd3b3f1ec59a37f635aa1d4efcf178734c2fcf8ddb0d56ea690bec342da8672",
]
}
@@ -0,0 +1,11 @@
terraform {
backend "pg" {}
required_version = "~> 1.7"
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.52.0"
}
}
}
@@ -0,0 +1,13 @@
module "pages_project" {
source = "git::https://github.com/immich-app/devtools.git//tf/shared/modules/cloudflare-pages-project?ref=main"
cloudflare_api_token = data.terraform_remote_state.api_keys_state.outputs.terraform_key_cloudflare_docs
cloudflare_account_id = data.terraform_remote_state.cloudflare_account.outputs.cloudflare_account_id
app_name = var.app_name
env = var.env
}
output "pages_project" {
value = module.pages_project.pages_project
}
@@ -0,0 +1,17 @@
data "terraform_remote_state" "api_keys_state" {
backend = "pg"
config = {
conn_str = var.tf_state_postgres_conn_str
schema_name = "prod_cloudflare_api_keys"
}
}
data "terraform_remote_state" "cloudflare_account" {
backend = "pg"
config = {
conn_str = var.tf_state_postgres_conn_str
schema_name = "prod_cloudflare_account"
}
}
@@ -0,0 +1,25 @@
terraform {
source = "."
extra_arguments custom_vars {
commands = get_terraform_commands_that_need_vars()
}
}
include {
path = find_in_parent_folders("state.hcl")
}
locals {
env = get_env("TF_VAR_env")
app_name = replace(get_env("TF_VAR_app_name"), "-", "_")
}
remote_state {
backend = "pg"
config = {
conn_str = get_env("TF_VAR_tf_state_postgres_conn_str")
schema_name = "cloudflare_pages_project_immich_app_${local.app_name}_${local.env}"
}
}
@@ -0,0 +1,3 @@
variable "tf_state_postgres_conn_str" {}
variable "env" {}
variable "app_name" {}
@@ -4,7 +4,7 @@ module "static_pages" {
cloudflare_api_token = data.terraform_remote_state.api_keys_state.outputs.terraform_key_cloudflare_docs cloudflare_api_token = data.terraform_remote_state.api_keys_state.outputs.terraform_key_cloudflare_docs
cloudflare_account_id = data.terraform_remote_state.cloudflare_account.outputs.cloudflare_account_id cloudflare_account_id = data.terraform_remote_state.cloudflare_account.outputs.cloudflare_account_id
pages_project = data.terraform_remote_state.cloudflare_account.outputs.pages_projects["${var.app_name}.immich.app"] pages_project = data.terraform_remote_state.cloudflare_pages_project.outputs.pages_project
app_name = var.app_name app_name = var.app_name
stage = var.stage stage = var.stage
@@ -15,3 +15,12 @@ data "terraform_remote_state" "cloudflare_account" {
schema_name = "prod_cloudflare_account" schema_name = "prod_cloudflare_account"
} }
} }
data "terraform_remote_state" "cloudflare_pages_project" {
backend = "pg"
config = {
conn_str = var.tf_state_postgres_conn_str
schema_name = "cloudflare_pages_project_immich_app_${var.app_name}_${var.env}"
}
}
@@ -24,3 +24,9 @@ remote_state {
schema_name = "cloudflare_immich_app_${local.app_name}_${local.env}${local.stage}" schema_name = "cloudflare_immich_app_${local.app_name}_${local.env}${local.stage}"
} }
} }
dependencies {
paths = [
"../pages-project",
]
}