Compare commits

...
Sign in to create a new pull request.

36 commits

Author SHA1 Message Date
8cf1b3fe33 feat: update zones 2025-05-24 00:26:47 +02:00
d66c0cbc69 feat(ddns): remove myfritz from zones 2025-05-13 11:36:16 +02:00
5856a2beca fix(server2): wrong ip 2025-04-03 20:54:48 +02:00
134a0682b8 feat: update zones 2025-04-03 20:11:51 +02:00
097672f827 feat: add output for zone ids 2025-04-03 20:11:08 +02:00
a9d32d6c5e feat: update zones 2025-03-13 17:36:54 +01:00
d0bae0c629 chore: update auth sample for new provider 2025-02-05 22:02:54 +01:00
3f960fe68f feat: fixed zone creation 2025-02-05 21:58:39 +01:00
3fe945f4d2 chore: update gitignore and handle no changes in apply script 2025-02-05 20:44:57 +01:00
5f6a9b801a feat: add apply script that handles new zones 2025-02-05 20:30:35 +01:00
e38d50c504 chore: update version 2025-02-05 20:11:29 +01:00
19b026da83 chore: cleanup 2025-02-03 10:52:43 +01:00
99d8686a02 chore: cleanup 2025-02-03 10:50:31 +01:00
2fb369309e chore: delete old files from cloudflare 2025-02-03 10:48:16 +01:00
1b03d83ff2 chore: cleanup code 2025-02-03 10:42:25 +01:00
04f2c71c6d chore: cleanup code 2025-02-03 10:41:24 +01:00
768da3383f feat: update zones 2025-02-03 10:37:33 +01:00
c2ec494411 feat: move from cloudflare to hetzner update zones.yaml 2025-02-01 03:18:42 +01:00
496292086f feat: update zones.yaml 2024-12-24 05:20:56 +01:00
529f65e2ac feat: update zones.yaml 2024-09-14 14:13:56 +02:00
e9870649d4 feat: update zones.yaml 2024-08-20 12:59:01 +02:00
Jan-Ole Hübner
d3b178a95c chore: remove steffie 2024-05-25 16:19:27 +02:00
Jan-Ole Hübner
68d5b3e479 chore: cleanup 2024-05-25 15:32:36 +02:00
Jan-Ole Hübner
4993db0b8f feat: add google txt records 2024-05-25 14:31:19 +02:00
Jan-Ole Hübner
36c10033c6 feat: add OPENTOFU comment to iac-controlled records 2024-05-25 14:07:32 +02:00
Jan-Ole Hübner
628c47de98 feat: update zones for apple mail 2024-05-25 13:56:27 +02:00
Jan-Ole Hübner
9127543c81 feat: update zones, add huebner.pink and .software 2024-05-25 12:46:36 +02:00
Jan-Ole Hübner
cf513b7062 feat: update zones 2024-05-20 13:18:18 +02:00
Jan-Ole Hübner
583b3e5b60 feat: update zones
add ciri.*
2024-05-14 15:11:07 +02:00
Jan-Ole Hübner
6d89d5015d feat: update zones
website deletion
2024-05-11 12:40:29 +02:00
Jan-Ole Hübner
dde03c3129 feat: update zones
pre-deletion
2024-05-11 12:38:12 +02:00
Jan-Ole Hübner
3681ddfed0 feat: update zones (new influx server) 2024-05-03 02:56:34 +02:00
Jan-Ole Hübner
222f64dfa2 feat: update zones 2024-03-08 19:46:33 +01:00
Jan-Ole Hübner
7b23948379 feat: update zones 2024-03-03 20:48:27 +01:00
Jan-Ole Hübner
9a1cbf4f94 feat: update zones 2024-01-14 04:46:37 +01:00
Jan-Ole Hübner
1ec1d0f3c5 update zones.yaml removed outputs 2023-12-25 19:22:30 +01:00
8 changed files with 251 additions and 80 deletions

4
.gitignore vendored
View file

@ -5,3 +5,7 @@ venv/
.terraform.lock.hcl
.terraform
auth.yaml
tfplan
plan.log
.DS_Store
.DS_Store

View file

@ -1,3 +1,2 @@
auth:
api_token: !add
email: !add
api_token: !add

View file

65
main.tf
View file

@ -1,10 +1,25 @@
provider "cloudflare" {
api_token = local.cloudflare_api.auth.api_token
}
locals {
cloudflare_api = yamldecode(file("${path.module}/auth.yaml"))
zones = yamldecode(file("${path.module}/zones.yaml"))
api = yamldecode(file("${path.module}/auth.yaml"))
zones = yamldecode(file("${path.module}/zones.yaml"))
nameservers = data.hetznerdns_nameservers.primary.ns
ns_data = flatten([
for zone_name, records in local.zones : [
for ns_entry in local.nameservers : {
zone_name = zone_name
record_type = "NS"
record_value = ns_entry.name
record_name = "@"
extra_data = ""
}
]
])
zone_data = flatten([
for zone_name, records in local.zones : [
@ -23,18 +38,38 @@ locals {
])
}
data "cloudflare_zone" "zone" {
for_each = local.zones
name = each.key
data "hetznerdns_nameservers" "primary" {
type = "authoritative"
}
resource "cloudflare_record" "myrecord" {
resource "hetznerdns_zone" "zone" {
for_each = local.zones
name = each.key
ttl = 300
}
resource "hetznerdns_record" "myrecord" {
for_each = {
for record in local.zone_data : "${record.record_type}${record.extra_data}-${record.record_name}.${record.zone_name}" => record }
zone_id = data.cloudflare_zone.zone[each.value.zone_name].id
name = "${each.value.record_name}.${each.value.zone_name}" == "@.${each.value.zone_name}" ? each.value.zone_name : "${each.value.record_name}.${each.value.zone_name}"
type = each.value.record_type
value = each.value.record_value
ttl = 300
priority = each.value.record_type == "MX" ? tonumber(each.value.extra_data) : 0
zone_id = hetznerdns_zone.zone[each.value.zone_name].id
name = "${each.value.record_name}"
type = each.value.record_type
value = each.value.record_type == "MX" ? "${each.value.extra_data} ${each.value.record_value}" : each.value.record_value
ttl = 300
}
resource "hetznerdns_record" "ns" {
for_each = {
for record in local.ns_data :
"${record.record_type}-${record.record_name}-${record.zone_name}-${record.record_value}" => record
}
zone_id = hetznerdns_zone.zone[each.value.zone_name].id
name = each.value.record_name
type = each.value.record_type
value = each.value.record_value
ttl = 300
}

View file

@ -1,6 +1,6 @@
output "zones" {
value = data.cloudflare_zone.zone
value = length(local.zones)
}
output "records" {
value = cloudflare_record.myrecord
output "zone_ids" {
value = { for name, zone in hetznerdns_zone.zone : name => zone.id }
}

View file

View file

@ -1,9 +1,12 @@
terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4"
hetznerdns = {
source = "germanbrew/hetznerdns"
version = "3.3.3"
}
}
}
provider "hetznerdns" {
api_token = local.api.auth.api_token
}

242
zones.yaml Normal file → Executable file
View file

@ -1,68 +1,198 @@
jan-ole.de:
a:
#---servers
#server0--------------
server0: 185.239.239.162
"*.server0": 185.239.239.162
#server1--------------
server1: 147.189.171.39
"*.server1": 147.189.171.39
#server2--------------
server2: 134.255.232.17
"*.server2": 134.255.232.17
#server3--------------
server3: 45.141.36.103
"*.server3": 45.141.36.103
#server4-USA----------
usa.vpn: 181.214.240.124
"*.usa.vpn": 181.214.240.124
#webspace0-------------
www: 185.223.31.112
"@": 185.223.31.112
"*.demo": 185.223.31.112
demo: 185.223.31.112
cname:
sig1._domainkey: sig1.dkim.jan-ole.de.at.icloudmailadmin.com.
streaming: jan-ole.cloud.
"*.streaming": jan-ole.cloud.
lana: jan-ole.cloud.
mx:
"@/10": mx01.mail.icloud.com.
"@/20": mx02.mail.icloud.com.
txt:
"@": apple-domain=QREjDJD5KtZRhlq8
"@/10": "v=spf1 redirect=icloud.com include:icloud.com ~all"
"@/20": google-site-verification=rzO53ch4FY1zxgms9_FJAyE0nnj9_uRmLaSKqXw38ww
"_discord": dh=ddb43cee298d9a23196b21847105f88aafae8350
jan-ole.download:
a:
"@": 185.239.237.65
www: 185.239.237.65
"*": 185.239.237.65
jan-ole.sh:
cname:
"www": janolehuebner.github.io.
a:
"@/10": 185.199.108.153
"@/20": 185.199.109.153
"@/30": 185.199.110.153
"@/40": 185.199.111.153
aaaa:
"@/10": 2606:50c0:8000::153
"@/20": 2606:50c0:8001::153
"@/30": 2606:50c0:8002::153
"@/40": 2606:50c0:8003::153
jan-ole.dev:
a:
"@": 185.239.237.65
www: 185.239.237.65
"*": 185.239.237.65
ole.monster:
a:
"@": 185.239.237.65
www: 185.239.237.65
"*": 185.239.237.65
fairy-feet.de:
jan-ole.link:
mx:
"@/10": jan-ole.link.
a:
"@": 185.223.31.112
www: 185.223.31.112
leslie: 185.239.239.162
"*.leslie": 185.239.239.162
webmail: 185.223.31.112
txt:
"@": google-site-verification=HKmGUIFhbnE41t_358P10qZKhEufHzMAzlCSrv1iQW4
ole.click:
a:
"@": 185.223.31.112
www: 185.223.31.112
share: 185.223.31.112
"*.share": 185.223.31.112
leslie: 185.239.239.162
"*.leslie": 185.239.239.162
krewella.rocks:
a:
"@": 185.223.31.112
www: 185.223.31.112
leslie: 185.239.239.162
"*.leslie": 185.239.239.162
jan-ole.tech:
a:
"@": 192.168.84.1
www: 192.168.84.1
leslie: 185.239.239.162
"*.leslie": 185.239.239.162
jan-ole.de:
a:
"@": 185.223.31.112
www: 185.223.31.112
"*.demo": 185.223.31.112
demo: 185.223.31.112
"influx": 134.255.232.17
"*.influx": 134.255.232.17
status: 185.223.31.112
"*.status": 185.223.31.112
leslie: 185.239.239.162
"*.leslie": 185.239.239.162
lina: 134.255.232.17
"*.lina": 134.255.232.17
"@": 185.239.237.65
www: 185.239.237.65
txt:
"@": v=spf1 redirect=icloud.com
"@/10": apple-domain=FsvGrRPoGf8wHqLU
mx:
"@/10": mx01.mail.icloud.com
"@/20": mx02.mail.icloud.com
cname:
sig1._domainkey: sig1.dkim.jan-ole.de.at.icloudmailadmin.com
ole.pink:
fairy-feet.de:
a:
"*": 134.255.232.17
"@": 134.255.232.17
"_discord": dh=9f248b2dbca94cc3e47b672ad6a33415750fbc4e
jan-ole.cloud:
a:
"*": 138.201.67.182
"@": 138.201.67.182
www: 138.201.67.182
#zap-gameserver
palworld: 193.23.127.45
"*.palworld": 193.23.127.45
cname:
influx: jan-ole.cloud.
"*.influx": jan-ole.cloud.
books: jan-ole.cloud.
dav: jan-ole.cloud.
"*.photos": jan-ole.cloud.
photos: jan-ole.cloud.
ganymede: jan-ole.cloud.
"*.ganymede": jan-ole.cloud.
lana: jan-ole.cloud.
"*.lana": jan-ole.cloud.
tube: jan-ole.cloud.
"*.tube": jan-ole.cloud.
streaming: jan-ole.cloud.
"*.streaming": jan-ole.cloud.
git: jan-ole.cloud.
"*.git": janole.cloud.
ole.pink:
txt:
"*": v=spf1 a mx include:ole.click -all
"www": v=spf1 a mx include:ole.click -all
"_discord": dh=8be51e2beb64f555b5170ee2da95fa5eba315250
huebner.haus:
cname:
jan-ole: jan-ole.cloud.
"*.jan-ole": jan-ole.cloud.
heiko: kgh7xxzoeeajftib.myfritz.net.
"*.heiko": kgh7xxzoeeajftib.myfritz.net.
blondii.link:
a:
"@": 185.223.31.112
www: 185.223.31.112
txt:
"@": google-site-verification=nCc2Fw7XciUq9-1eWAUPU1LhPaWx1gMeIKBaDDfy3Ks
blondii.live:
a:
"@": 185.223.31.112
www: 185.223.31.112
download: 185.223.31.112
"*.download": 185.223.31.112
txt:
"@": google-site-verification=o1EqL6Qo5RTrUz61EGh75YfhX0FkNCk848Hb5qDCes4
darkblondii.link:
a:
"@": 185.223.31.112
www: 185.223.31.112
txt:
"@": google-site-verification=OtXtrYhaTsngZOMzfAwtgqUgnALh2sUfB8UoS53z0yo
darkblondii.live:
a:
"@": 185.223.31.112
www: 185.223.31.112
txt:
"@": google-site-verification=iwzEIcfA2YXNIPFEs7gjkPJbeS8uJeF9KZIwxDiJeks
darkblondii.de:
mx:
"@/10": darkblondii.de.
a:
"@": 185.223.31.112
www: 185.223.31.112
webmail: 185.223.31.112
txt:
"@/10": "google-site-verification=u9v4bvqD26WB5o8nO7zW9VMG5ZmjcNTSK_f6sAuNYSc"
"@": "v=spf1 a mx -all"
default._domainkey: "v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr/e2vHLlv6CTwMoxHeyJxppb2d7z+voH7DeBOSQI/QM5qBT0yfLBJEg1/ayTrHIyzbXd0DOVfsk/Wv7i3fpPHnFfw9CYSIn8pQEL9+seUc/VP9FJ68+9akPkwUGinqE4nGkT7ByqDrUeZzErQMX1nqXxkwx0JpBZqFTxfNYi6IphbUSu4xatkFbGBFFOPiHxYyIZdp35uiHL8Ub+tpDJpQ7zLf5VVwlY9EeakzslV+UJhG/ANh6dkQwyXrdT0QQ0lC8RS1CF9qs060blqwk/QZvQG6WRON0aq6F/p+FZ4P7hFMoUiHVokdW1GIAXUpleTwXnXGZmJG4g2dM6HFv+fQIDAQAB;"
_domainkey: "o=-"
_dmarc: "v=DMARC1; p=quarantine; rua=mailto:huebner@jan-ole.de; ruf=mailto:huebner@jan-ole.de; fo=1"
darkblondii.shop:
mx:
"@/10": darkblondii.shop.
a:
"@": 185.223.31.112
www: 185.223.31.112
webmail: 185.223.31.112
darkblondii.com:
mx:
"@/10": darkblondii.com.
a:
"@": 185.223.31.112
www: 185.223.31.112
huebner.pink:
cname:
sig1._domainkey: "sig1.dkim.huebner.pink.at.icloudmailadmin.com."
mx:
"@/10": "mx01.mail.icloud.com."
"@/20": "mx02.mail.icloud.com."
txt:
"@": "apple-domain=mOjnPLSTRwMrIocF"
"@/10": "v=spf1 include:icloud.com ~all"