change: Add further DNS records to terraform

feat: Support MX-only domains
feat: Support Uberspace domain key
This commit is contained in:
2026-02-07 16:57:22 +01:00
parent b10724b6b6
commit 1ce0fb8a36
5 changed files with 140 additions and 38 deletions
+56 -26
View File
@@ -1,74 +1,104 @@
import { import {
to = hcloud_zone.twomartens_de to = module.keycloak_domain.hcloud_zone_rrset.a[0]
id = "2martens.de"
}
import {
to = module.keycloak_domain.hcloud_zone_rrset.a
id = "2martens.de/id/A" id = "2martens.de/id/A"
} }
import { import {
to = module.keycloak_domain.hcloud_zone_rrset.aaaa to = module.keycloak_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/id/AAAA" id = "2martens.de/id/AAAA"
} }
import { import {
to = module.keycloak_domain.hcloud_zone_rrset.mx[0] to = module.keycloak_domain.hcloud_zone_rrset.uberspace_domain_key[0]
id = "2martens.de/id/MX" id = "2martens.de/uberspace._domainkey.id/TXT"
} }
import { import {
to = module.keycloak_domain.hcloud_zone_rrset.txt[0] to = module.gitea_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/id/TXT"
}
import {
to = module.gitea_domain.hcloud_zone_rrset.a
id = "2martens.de/git/A" id = "2martens.de/git/A"
} }
import { import {
to = module.gitea_domain.hcloud_zone_rrset.aaaa to = module.gitea_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/git/AAAA" id = "2martens.de/git/AAAA"
} }
import { import {
to = module.helm-repo_domain.hcloud_zone_rrset.a to = module.helm-repo_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/repo/A" id = "2martens.de/repo/A"
} }
import { import {
to = module.helm-repo_domain.hcloud_zone_rrset.aaaa to = module.helm-repo_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/repo/AAAA" id = "2martens.de/repo/AAAA"
} }
import { import {
to = module.statping_domain.hcloud_zone_rrset.a to = module.statping_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/status/A" id = "2martens.de/status/A"
} }
import { import {
to = module.statping_domain.hcloud_zone_rrset.aaaa to = module.statping_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/status/AAAA" id = "2martens.de/status/AAAA"
} }
import { import {
to = module.personal_website_domain.hcloud_zone_rrset.a to = module.personal_website_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/@/A" id = "2martens.de/@/A"
} }
import { import {
to = module.personal_website_domain.hcloud_zone_rrset.aaaa to = module.personal_website_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/@/AAAA" id = "2martens.de/@/AAAA"
} }
import { import {
to = module.personal_website_domain.hcloud_zone_rrset.mx[0] to = module.personal_website_domain.hcloud_zone_rrset.uberspace_domain_key[0]
id = "2martens.de/@/MX" id = "2martens.de/uberspace._domainkey/TXT"
} }
import { import {
to = module.personal_website_domain.hcloud_zone_rrset.txt[0] to = module.medium_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/@/TXT" id = "2martens.de/medium/A"
}
import {
to = module.medium_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/medium/AAAA"
}
import {
to = module.appreview_domain.hcloud_zone_rrset.mx[0]
id = "2martens.de/appreview/MX"
}
import {
to = module.appreview_domain.hcloud_zone_rrset.txt[0]
id = "2martens.de/appreview/TXT"
}
import {
to = module.appreview_domain.hcloud_zone_rrset.uberspace_domain_key[0]
id = "2martens.de/uberspace._domainkey.appreview/TXT"
}
import {
to = module.cms_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/cms/A"
}
import {
to = module.cms_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/cms/AAAA"
}
import {
to = module.nas_domain.hcloud_zone_rrset.a[0]
id = "2martens.de/nas/A"
}
import {
to = module.nas_domain.hcloud_zone_rrset.aaaa[0]
id = "2martens.de/nas/AAAA"
} }
+17
View File
@@ -1,4 +1,6 @@
resource "hcloud_zone_rrset" "a" { resource "hcloud_zone_rrset" "a" {
count = var.hasIPRecords ? 1 : 0
zone = var.domain zone = var.domain
name = var.subdomain != "" ? var.subdomain : "@" name = var.subdomain != "" ? var.subdomain : "@"
type = "A" type = "A"
@@ -10,6 +12,8 @@ resource "hcloud_zone_rrset" "a" {
} }
resource "hcloud_zone_rrset" "aaaa" { resource "hcloud_zone_rrset" "aaaa" {
count = var.hasIPRecords ? 1 : 0
zone = var.domain zone = var.domain
name = var.subdomain != "" ? var.subdomain : "@" name = var.subdomain != "" ? var.subdomain : "@"
type = "AAAA" type = "AAAA"
@@ -46,3 +50,16 @@ resource "hcloud_zone_rrset" "txt" {
{ value = provider::hcloud::txt_record(txtValue) } { value = provider::hcloud::txt_record(txtValue) }
] ]
} }
resource "hcloud_zone_rrset" "uberspace_domain_key" {
count = var.uberspaceDomainKey != "" ? 1 : 0
zone = var.domain
name = var.subdomain != "" ? format("%s.%s", "uberspace._domainkey", var.subdomain) : "uberspace._domainkey"
type = "TXT"
ttl = 3600
records = [
{ value = provider::hcloud::txt_record(var.uberspaceDomainKey) }
]
}
+13
View File
@@ -1,9 +1,11 @@
variable "ipv4" { variable "ipv4" {
type = string type = string
default = ""
} }
variable "ipv6" { variable "ipv6" {
type = string type = string
default = ""
} }
variable "domain" { variable "domain" {
@@ -12,6 +14,7 @@ variable "domain" {
variable "subdomain" { variable "subdomain" {
type = string type = string
default = ""
} }
variable "hasMXRecord" { variable "hasMXRecord" {
@@ -19,6 +22,11 @@ variable "hasMXRecord" {
default = false default = false
} }
variable "hasIPRecords" {
type = bool
default = true
}
variable "hostName" { variable "hostName" {
type = string type = string
default = "" default = ""
@@ -33,3 +41,8 @@ variable "txtValues" {
type = list(string) type = list(string)
default = [] default = []
} }
variable "uberspaceDomainKey" {
type = string
default = ""
}
+15
View File
@@ -7,3 +7,18 @@ resource "hcloud_zone" "twomartens_de" {
delete_protection = true delete_protection = true
} }
module "medium_domain" {
source = "./modules/domain"
domain = hcloud_zone.twomartens_de.name
subdomain = "medium"
ipv4 = "162.159.153.4"
ipv6 = "2606:4700:7::a29f:9804"
}
module "nas_domain" {
source = "./modules/domain"
domain = hcloud_zone.twomartens_de.name
subdomain = "nas"
ipv4 = "31.19.63.181"
ipv6 = "2a02:8108:c19:c400:9209:d0ff:fe70:7570"
}
+27
View File
@@ -9,6 +9,7 @@ module "keycloak_domain" {
hostName = "monoceres.uberspace.de" hostName = "monoceres.uberspace.de"
mxPrio = 0 mxPrio = 0
txtValues = ["v=spf1 include:spf.uberspace.de ~all"] txtValues = ["v=spf1 include:spf.uberspace.de ~all"]
uberspaceDomainKey = "v=DKIM1;t=s;n=core;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqs3bFL8W77z7VJHCFbsJ3o68Y1uBbVsbIS1y35CMfRv6wp7si7aIG2ZeKqzdh2dTMsvtvSMaYVq1gT/EtRmTbU/BYC21ff8sqcVqn/ll5nNsk5jKWXTYAlTQp4LBQN7icw94ZNGr5/SDYcnv2nsBYFf2GUviObWXGHX4RaBFNj9NVUNWNin/HicvW+LsbfYq37QtlhjmUn9K96VCwKcTV1mx+Ek0osErYefcOVNawqWIlVRQDLkHZhk1StLsOpRqV+qEjhzTk4n4ZiNtLJG1D9CpHl24d5DKsQDyVFdEfqHimFTSNgiitlkuXg+i+NMiRA9G3gNJtvw8uvfN8f+stQIDAQAB"
} }
// Angular frontends // Angular frontends
@@ -61,6 +62,7 @@ module "personal_website_domain" {
"google-site-verification=nUFiHQFxBpBMdX96ELH3TcfyIfXf2ZlwMFYtXjVq5lo", "google-site-verification=nUFiHQFxBpBMdX96ELH3TcfyIfXf2ZlwMFYtXjVq5lo",
"v=spf1 include:spf.uberspace.de ~all" "v=spf1 include:spf.uberspace.de ~all"
] ]
uberspaceDomainKey = "v=DKIM1;t=s;n=core;p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3inJYRQRdWD0NQf9WRVcct8Z+GF74WYCK9Q9E/hl9qRSrqHLbm4AZ8gDWZDUQ7O0WbsQ4wcBa2SLB0znpW2UmVrp0iMhqGXVU5USWTHLgAPOVo9DKKbY5wCuugftQe99hvW1Z5BNhzvGUczknQHW/oZF/a7l1nwkYuAZ9YyzQY+sB8o3euuZ0QxaVde0UNDMGpjUO/Nd8MRZj1WBNNyy12ppKVskg7GzuVpulkskslM/mAWdTJ7HKZh1HHPjjGS2ttyDMGWU7/sxuenZ5Z46PvKWQ37djwEsXqXuqYrLI+QBoefolhisHNhHA9cwuUU3bq/+zXhLTN4bYZVPeV31mM6cguKJibPXg0HgYUImJ0A/sADYcd4q7ryZ/sAzCydPT4FDrx64apRPlaIhugSU1KCz+N+7UtCjrQaJLA8i/F4+krfZpfiYr5MJrI8jTAZFW9lzGL7NTVLe1yDf/9aJGc7R/TyI/c5uGFGUnu0C+AKC5KJCIf/I2hJ9ARRRzKe1RtmiTJMAxi8FqzRQoEQwfSDi+vGXtrUC4JCV2Zh7xgwmZV+lMiP5M6x3aOM7FI26WPx+7tdRlzWiYu7okS5ayAgu26EYoKjGuWWHGUuKSKNqjTy3oBunZv3LzdnhOAn4eOrE7+2qn8hiL8SLa9oGcUv1BI0KQmopIAY+BiaX6JkCAwEAAQ=="
} }
// Nextcloud // Nextcloud
@@ -75,3 +77,28 @@ module "personal_website_domain" {
# mxPrio = 0 # mxPrio = 0
# mxSpf = "v=spf1 include:spf.uberspace.de ~all" # mxSpf = "v=spf1 include:spf.uberspace.de ~all"
# } # }
// App Review (Mail only)
module "appreview_domain" {
source = "./modules/domain"
domain = hcloud_zone.twomartens_de.name
subdomain = "appreview"
hasIPRecords = false
hasMXRecord = true
hostName = "wolf.uberspace.de"
mxPrio = 0
txtValues = [
"v=spf1 include:spf.uberspace.de ~all"
]
uberspaceDomainKey = "v=DKIM1;t=s;n=core;p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuzbMYDHwmAtKti6DFFZu7ySxbWE87XgA14OPck78rj4QX3cNFdnn+WkUpmp0x76NN1rhm3EKCcbBUs9I6MvFQU7A9QJFpMoGq+u7OJ63SSDSmnzUld0mKnWbj/gNp1r4ChQB5JSFIT2A6Q3ias6IM1DscBqfsGsp6StbWaIiBF7Mro7p64sHX4kUgW1iBtNiix0GHqi6imzAryOiGg+X3GhjhwV0j+15rBeBSaFOX2TudlE5VHLox59TLb8ctfdir3kT7UFWJT2GW1iWgUxaTxU6OsSLe2vuQcXIYFBcTN2lbw/dXp7LdBPFzXygC9LZsjxao2bxwAs5MpCLpMrFZVbCEDSO9fEiSsGqgBcwiyxG0DnHexGbKMpr2Ergt+Q9NhfzUjcfNzGvG0HaPEIM70J+yK8gi4mGT7hTRjAFL9+8hGW8qjvna89WAu/ACKSGw3sKIqtevO4Cpc2FMZ1v0FmW7eshe++qfe7lodCmUeaZnQD9H6iR+Q4UJm4QBjIB3uz6ZiXMSZdhfc14T493o14V0j/IAu/OngeZM4O24XR8xCj0NvNAObh6OlKKEIv0fyPlauhQnz573K8fhsPeAFxNnc5lDRTRL96FJFIy3tefDJVHFr5yaFzxQPtaf17mBIaLqKOj42YkZmgcd7+1kN/G8HvrhzsCuz+Zr6z12rcCAwEAAQ=="
}
// Payload CMS
module "cms_domain" {
source = "./modules/domain"
domain = hcloud_zone.twomartens_de.name
subdomain = "cms"
ipv4 = "95.143.172.212"
ipv6 = "2001:1a50:11:0:247a:8ff:fe00:5f6c"
}