feat(tf): system records

This commit is contained in:
arcnmx 2024-01-15 11:00:45 -08:00
parent e7f87e4892
commit 9d274bbe73
8 changed files with 191 additions and 7 deletions

View file

@ -0,0 +1,27 @@
variable "local_subdomains" {
type = list(string)
default = []
}
locals {
cname_records = concat(
[for subdomain in var.local_subdomains : {
name = "${subdomain}.local",
value = "${local.local_name}.${var.zone_zone}",
}],
local.has_tailscale ? [for subdomain in var.local_subdomains : {
name = "${subdomain}.tail",
value = "${local.tailscale_name}.${var.zone_zone}",
}] : [],
)
}
resource "cloudflare_record" "cname_records" {
for_each = { for i, cname in local.cname_records : cname.name => i }
name = local.cname_records[each.value].name
proxied = false
ttl = 360
type = "CNAME"
value = local.cname_records[each.value].value
zone_id = var.zone_id
}

View file

@ -0,0 +1,114 @@
variable "zone_id" {
type = string
}
variable "zone_zone" {
type = string
}
variable "name" {
type = string
}
variable "tailscale_name" {
type = string
default = null
}
variable "tailscale_v4" {
type = string
default = null
}
variable "tailscale_v6" {
type = string
default = null
}
variable "local_name" {
type = string
default = null
}
variable "local_v4" {
type = string
default = null
}
variable "local_v6" {
type = string
default = null
}
variable "global_name" {
type = string
default = null
}
variable "global_v4" {
type = string
default = null
}
variable "global_v6" {
type = string
default = null
}
locals {
local_name = coalesce(var.local_name, "${var.name}.local")
tailscale_name = coalesce(var.tailscale_name, "${var.name}.tail")
global_name = coalesce(var.global_name, var.name)
has_tailscale = var.tailscale_v4 != null || var.tailscale_v6 != null
a_records = [
{
name = local.local_name,
value = var.local_v4,
},
{
name = local.global_name,
value = var.global_v4,
},
{
name = local.tailscale_name,
value = var.tailscale_v4,
}
]
aaaa_records = [
{
name = local.local_name,
value = var.local_v6,
},
{
name = local.global_name,
value = var.global_v6,
},
{
name = local.tailscale_name,
value = var.tailscale_v6,
}
]
}
resource "cloudflare_record" "a_records" {
for_each = { for i, a in local.a_records : a.name => i if a.value != null }
name = local.a_records[each.value].name
proxied = false
ttl = 3600
type = "A"
value = local.a_records[each.value].value
zone_id = var.zone_id
}
resource "cloudflare_record" "aaaa_records" {
for_each = { for i, aaaa in local.aaaa_records : aaaa.name => i if aaaa.value != null }
name = local.aaaa_records[each.value].name
proxied = false
ttl = 3600
type = "AAAA"
value = local.aaaa_records[each.value].value
zone_id = var.zone_id
}

View file

@ -0,0 +1,10 @@
terraform {
required_version = ">= 1.6.0"
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = ">= 4.22.0"
}
}
}