From 31eaad7900c5424e9d2da3676a6ddbcbffd2df0a Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Thu, 1 Jan 2026 16:23:16 -0600 Subject: [PATCH] updates and moved vntx to new repo --- terraform/.terraform.lock.hcl | 18 ++++ terraform/dns_powerdns_zones.tf | 59 +++---------- terraform/dns_reverse.tf | 102 ---------------------- terraform/dns_vntx_net.tf | 144 -------------------------------- terraform/dns_vntx_org.tf | 12 --- terraform/main.tf | 29 ++----- terraform/terraform.tfvars | 4 +- terraform/variables.tf | 31 +++---- 8 files changed, 49 insertions(+), 350 deletions(-) delete mode 100644 terraform/dns_reverse.tf delete mode 100644 terraform/dns_vntx_net.tf delete mode 100644 terraform/dns_vntx_org.tf diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl index 461725b..361726b 100644 --- a/terraform/.terraform.lock.hcl +++ b/terraform/.terraform.lock.hcl @@ -41,6 +41,24 @@ provider "registry.opentofu.org/dnsimple/dnsimple" { ] } +provider "registry.opentofu.org/hashicorp/null" { + version = "3.2.4" + constraints = "~> 3.0" + hashes = [ + "h1:i+WKhUHL2REY5EGmiHjfUljJB8UKZ9QdhdM5uTeUhC4=", + "zh:1769783386610bed8bb1e861a119fe25058be41895e3996d9216dd6bb8a7aee3", + "zh:32c62a9387ad0b861b5262b41c5e9ed6e940eda729c2a0e58100e6629af27ddb", + "zh:339bf8c2f9733fce068eb6d5612701144c752425cebeafab36563a16be460fb2", + "zh:36731f23343aee12a7e078067a98644c0126714c4fe9ac930eecb0f2361788c4", + "zh:3d106c7e32a929e2843f732625a582e562ff09120021e510a51a6f5d01175b8d", + "zh:74bcb3567708171ad83b234b92c9d63ab441ef882b770b0210c2b14fdbe3b1b6", + "zh:90b55bdbffa35df9204282251059e62c178b0ac7035958b93a647839643c0072", + "zh:ae24c0e5adc692b8f94cb23a000f91a316070fdc19418578dcf2134ff57cf447", + "zh:b5c10d4ad860c4c21273203d1de6d2f0286845edf1c64319fa2362df526b5f58", + "zh:e05bbd88e82e1d6234988c85db62fd66f11502645838fff594a2ec25352ecd80", + ] +} + provider "registry.opentofu.org/kyswtn/porkbun" { version = "0.1.3" constraints = "~> 0.1" diff --git a/terraform/dns_powerdns_zones.tf b/terraform/dns_powerdns_zones.tf index 2e5756a..7e8c2e3 100644 --- a/terraform/dns_powerdns_zones.tf +++ b/terraform/dns_powerdns_zones.tf @@ -1,87 +1,48 @@ # Vultr PowerDNS Zones # All zones managed on the Vultr PowerDNS instance +# +# AXFR Configuration: +# AXFR (zone transfers) and notifications are configured globally in the PowerDNS +# ConfigMap (allow-axfr-ips and also-notify settings). These apply to all zones. resource "powerdns_zone" "w5isp_com" { name = "w5isp.com." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } resource "powerdns_zone" "aprs_me" { name = "aprs.me." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } resource "powerdns_zone" "mcintire_me" { name = "mcintire.me." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -# Reverse DNS zones -resource "powerdns_zone" "vntx1" { - name = "188.110.204.in-addr.arpa." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -resource "powerdns_zone" "vntx2" { - name = "189.110.204.in-addr.arpa." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -resource "powerdns_zone" "vntx3" { - name = "190.110.204.in-addr.arpa." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -resource "powerdns_zone" "vntx4" { - name = "191.110.204.in-addr.arpa." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -resource "powerdns_zone" "vntx_net" { - name = "vntx.net." - kind = "Native" - soa_edit_api = "DEFAULT" - nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] -} - -resource "powerdns_zone" "vntx_org" { - name = "vntx.org." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } resource "powerdns_zone" "manero_org" { name = "manero.org." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } resource "powerdns_zone" "ntxarms_com" { name = "ntxarms.com." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } resource "powerdns_zone" "qth_social" { name = "qth.social." - kind = "Native" + kind = "Primary" soa_edit_api = "DEFAULT" nameservers = ["ns1.as393837.net.", "ns-global.kjsl.com."] } diff --git a/terraform/dns_reverse.tf b/terraform/dns_reverse.tf deleted file mode 100644 index 579d881..0000000 --- a/terraform/dns_reverse.tf +++ /dev/null @@ -1,102 +0,0 @@ -# Reverse DNS zones are defined in dns_powerdns_zones.tf - -# SOA records for reverse zones -resource "powerdns_record" "vntx1_soa" { - depends_on = [powerdns_zone.vntx1] - zone = "188.110.204.in-addr.arpa." - name = "188.110.204.in-addr.arpa." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} - -resource "powerdns_record" "vntx2_soa" { - depends_on = [powerdns_zone.vntx2] - zone = "189.110.204.in-addr.arpa." - name = "189.110.204.in-addr.arpa." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} - -resource "powerdns_record" "vntx3_soa" { - depends_on = [powerdns_zone.vntx3] - zone = "190.110.204.in-addr.arpa." - name = "190.110.204.in-addr.arpa." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} - -resource "powerdns_record" "vntx4_soa" { - depends_on = [powerdns_zone.vntx4] - zone = "191.110.204.in-addr.arpa." - name = "191.110.204.in-addr.arpa." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} - -resource "powerdns_record" "ptr_records1" { - depends_on = [powerdns_zone.vntx1] - for_each = { - for i in range(256) : tostring(i) => { - name = "${i}.188.110.204.in-addr.arpa." - record = "${i}.188.client.vntx.net." - } - } - - zone = "188.110.204.in-addr.arpa." - name = each.value.name - type = "PTR" - ttl = 3600 - records = [each.value.record] -} - -resource "powerdns_record" "ptr_records2" { - depends_on = [powerdns_zone.vntx2] - for_each = { - for i in range(256) : tostring(i) => { - name = "${i}.189.110.204.in-addr.arpa." - record = "${i}.189.client.vntx.net." - } - } - - zone = "189.110.204.in-addr.arpa." - name = each.value.name - type = "PTR" - ttl = 3600 - records = [each.value.record] -} - -resource "powerdns_record" "ptr_records3" { - depends_on = [powerdns_zone.vntx3] - for_each = { - for i in range(256) : tostring(i) => { - name = "${i}.190.110.204.in-addr.arpa." - record = "${i}.190.client.vntx.net." - } - } - - zone = "190.110.204.in-addr.arpa." - name = each.value.name - type = "PTR" - ttl = 3600 - records = [each.value.record] -} - -resource "powerdns_record" "ptr_records4" { - depends_on = [powerdns_zone.vntx4] - for_each = { - for i in range(256) : tostring(i) => { - name = "${i}.191.110.204.in-addr.arpa." - record = tostring(i) == "5" ? "mail.mcintire.me." : "${i}.191.client.vntx.net." - } - } - - zone = "191.110.204.in-addr.arpa." - name = each.value.name - type = "PTR" - ttl = 3600 - records = [each.value.record] -} diff --git a/terraform/dns_vntx_net.tf b/terraform/dns_vntx_net.tf deleted file mode 100644 index 68828be..0000000 --- a/terraform/dns_vntx_net.tf +++ /dev/null @@ -1,144 +0,0 @@ -# SOA record for vntx.net -resource "powerdns_record" "vntx_net_soa" { - depends_on = [powerdns_zone.vntx_net] - zone = "vntx.net." - name = "vntx.net." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} - -# Generate client IP records dynamically -locals { - # Subnets to create client records for - vntx_subnets = [188, 189, 190, 191] - - # Generate all client IPs dynamically - client_ips = merge([ - for subnet in local.vntx_subnets : { - for i in range(1, 255) : "${i}.${subnet}.client" => "204.110.${subnet}.${i}" - } - ]...) - - # Named hosts with specific IPs - named_hosts = { - "ansible" = "204.110.191.246" - "climax" = "204.110.188.62" - "core" = "10.254.254.253" - "culleoka" = "204.110.188.158" - "edge" = "204.110.191.190" - "g" = "204.110.191.8" - "librenms" = "204.110.191.227" - "logs" = "204.110.191.229" - "monitor" = "204.110.191.241" - "netbox" = "204.110.191.243" - "newhope" = "204.110.188.190" - "ns1" = "204.110.191.249" - "ns2" = "204.110.191.239" - "preseem" = "204.110.191.225" - "resolver-01" = "204.110.191.240" - "resolver-02" = "204.110.191.250" - "resolver1" = "204.110.191.240" - "resolver2" = "204.110.191.250" - "unimus" = "204.110.191.238" - "verona" = "204.110.188.254" - "@" = "198.185.159.144" - "routers" = "155.138.241.157" - "vpn" = "204.110.191.247" - "radius" = "204.110.191.248" - "zabbix" = "204.110.191.244" - "speedtest" = "204.110.191.228" - "gitlab" = "204.110.191.234" - "aprs" = "204.110.191.232" - "g2" = "204.110.191.221" - "net" = "104.238.146.79" - "uisp" = "204.110.191.224" - } - - # Merge client IPs and named hosts - all_a_records = merge(local.client_ips, local.named_hosts) -} - -resource "powerdns_record" "vntx_a_records" { - for_each = local.all_a_records - - depends_on = [powerdns_zone.vntx_net] - zone = "vntx.net." - name = each.key == "@" ? "vntx.net." : "${each.key}.vntx.net." - type = "A" - ttl = 3600 - records = [each.value] -} - -resource "powerdns_record" "vntx_txt_records" { - for_each = { - "_twilio" = "twilio-domain-verification=12bf63d61b86412618bdb4ab6c2b287a" - "_dmarc" = "v=DMARC1; p=none" - "_updown" = "updown-page=p/34yuc" - "_github-challenge-vntx" = "34ea2705e4" - "_github-pages-challenge-gmcintire" = "d125f4244edd0120ee0fa073d3acf1" - "krs._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHbWtJ5uPGEOPmJrT36WBXKxVL0b4fqjIM4n6oXK4zaUucqYp7jeoKG+FTO5XEjyja7hsP9WahntUrVb8WI5V6Cj0CznesMrM7oQRntcyuy8mSD1zilmZe4q2Kc65gj2MRrkg3tkJfogXHNz2rxmquNu/DxsFLeQP8a2E5tYXVFwIDAQAB" - "pic._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdv4ZUjhb9l0Nt1aEJMnH/TVNdVn9CEKkb8+RX3qBPMFGmJWrJ3BIFwOSTUBiPeCgd2vc4zOOv7iQhEgNTlIVNT/V1sY70Myo5t+tJCuJQT/G4h5D1u7LZB6YEOKTgd5wF5AoW/nLvKVEPyKl5mThB9KmIGqF5FMm9C9FWP8m6SQIDAQAB" - "s1._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDI3w7b9bBNcWzSH8DspZbRNp+9G9pHbCfmHmr3r2JqXh+F8bFlCK6gJqEQW7SIJgYMmSJ5GlYyy4A3VxJJFcWLZb3dxMoWkGjrJ3gEUNQGmG6rnJ7eXJxKb5J2mGgEfQgCgkWXPFRmJhKXPWoZP3RqU2vJZ3t7vJxWHmv0bQPHKQIDAQAB" - "s2._domainkey.mg" = "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc3JXQvGMBl3cW+3N2OPLJwlP4cMvPp9yOQM9X1TLxJWX7Hd7m6rJ1Xf2T3PGP9ZDPfJGXh+PfGPYVJYP2JXGPfP9HPfP3GPfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHGPYVP9fPH+PfP+PfPHQIDAQAB" - "@" = "v=spf1 include:mailgun.org ~all" - } - - depends_on = [powerdns_zone.vntx_net] - zone = "vntx.net." - name = each.key == "@" ? "vntx.net." : "${each.key}.vntx.net." - type = "TXT" - ttl = 3600 - records = ["\"${each.value}\""] -} - -resource "powerdns_record" "vntx_cname_records" { - for_each = { - # Current records - "mg" = "mailgun.org." - "email.mg" = "mailgun.org." - "*.w5isp" = "dokku.w5isp.com." - "automation" = "automate.freshbooks.com." - "grafana" = "vgraph01.spindlenetworks.com." - "mail.speedtest" = "mail.speedtest.vntx.net.s2.mailersendapp.com." - "status" = "stats.uptimerobot.com." - "ntp" = "0.us.pool.ntp.org." - "iptrack" = "dokku.w5isp.com." - - # Restored records from git history - "_4080c249b6e72dd04f2a9508aa1a1b7f.kivrak" = "_de3e5d511f3869bbd271b935a3b4f973.tljzshvwok.acm-validations.aws." - "_83337805c305955c6823504cc5e6ca29" = "_baf97cdcc7b6458fa5719e4261e9932f.sdgjtdhdhz.acm-validations.aws." - "_bc1077259b1fbbb11c1e16756e1883f9.irc" = "793f217a963b25f361ec1975e0fd7d54.dc2ec86a36550aed25a0011c0b2b044b.62f7abe714ec1.comodoca.com." - "177982" = "sendgrid.net." - "4809fce066c3da4d14197c7276ba083f.irc" = "b58bf151af520d34d8fad99d05274cb536893031.comodoca.com." - "9p83fpanfdgs8xdgcnzd" = "verify.squarespace.com." - "activate" = "verona-networks-checkout.gaiia-consumer.com." - "autodiscover.o365" = "autodiscover.outlook.com." - "autodiscover" = "autodiscover.outlook.com." - "em924886" = "return.smtp2go.net." - "em9279" = "u177982.wl233.sendgrid.net." - "email" = "mandrillapp.com." - "enterpriseenrollment.o365" = "enterpriseenrollment.manage.microsoft.com." - "enterpriseregistration.o365" = "enterpriseregistration.windows.net." - "link" = "track.smtp2go.net." - "lyncdiscover.o365" = "webdir.online.lync.com." - "mte1._domainkey" = "dkim1.mandrillapp.com." - "mte2._domainkey" = "dkim2.mandrillapp.com." - "portal" = "verona-networks-clientportal.gaiia-consumer.com." - "s1._domainkey" = "s1.domainkey.u177982.wl233.sendgrid.net." - "s2._domainkey" = "s2.domainkey.u177982.wl233.sendgrid.net." - "s924886._domainkey" = "dkim.smtp2go.net." - "sip.o365" = "sipdir.online.lync.com." - "uptime" = "page.updown.io." - "url62" = "sendgrid.net." - "url9812" = "sendgrid.net." - "www" = "ext-cust.squarespace.com." - } - - depends_on = [powerdns_zone.vntx_net] - zone = "vntx.net." - name = "${each.key}.vntx.net." - type = "CNAME" - ttl = 3600 - records = [each.value] -} diff --git a/terraform/dns_vntx_org.tf b/terraform/dns_vntx_org.tf deleted file mode 100644 index b5ff35a..0000000 --- a/terraform/dns_vntx_org.tf +++ /dev/null @@ -1,12 +0,0 @@ -# DNS records for vntx.org domain -# Zone defined in dns_powerdns_zones.tf - -# SOA record for vntx.org -resource "powerdns_record" "vntx_org_soa" { - depends_on = [powerdns_zone.vntx_org] - zone = "vntx.org." - name = "vntx.org." - type = "SOA" - ttl = 3600 - records = ["ns1.as393837.net. graham.mcintire.me. 0 10800 3600 604800 3600"] -} diff --git a/terraform/main.tf b/terraform/main.tf index c265578..e5e7db9 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -20,10 +20,10 @@ terraform { source = "cloudflare/cloudflare" version = "~> 5.0" } - # proxmox = { - # source = "bpg/proxmox" - # version = "~> 0.66" - # } + null = { + source = "hashicorp/null" + version = "~> 3.0" + } } } @@ -45,25 +45,12 @@ provider "porkbun" { secret_api_key = var.porkbun_secret_api_key } -# provider "powerdns" { -# api_key = var.pdns_api_key -# server_url = var.pdns_server_url -# } +provider "powerdns" { + api_key = var.pdns_api_key + server_url = var.pdns_server_url +} provider "cloudflare" { # API token is read from CLOUDFLARE_API_TOKEN environment variable # No explicit api_token parameter needed - provider automatically reads the env var } - -# provider "proxmox" { -# endpoint = var.proxmox_api_url -# username = var.proxmox_user -# password = var.proxmox_password -# insecure = var.proxmox_tls_insecure -# } - -provider "powerdns" { - # alias = "vultr" - api_key = var.pdns_vultr_api_key - server_url = "http://100.93.123.98:8081" -} diff --git a/terraform/terraform.tfvars b/terraform/terraform.tfvars index 943cb99..fa3f9c2 100644 --- a/terraform/terraform.tfvars +++ b/terraform/terraform.tfvars @@ -6,5 +6,5 @@ token_id = "terraform@pve!terraform-token" dnsimple_token = "dnsimple_a_sRmKiuHrxR2UiMHf0NREqAtgfELyRVAI" porkbun_api_key = "pk1_5f321ff82ce0c085e67f9569db48976d838f302bc15b88292373e4b6b9891f17" porkbun_secret_api_key = "sk1_854fd74c8221bceaec27cf17edf3402b074e67447befe1363cf0247b620c82c5" -pdns_api_key = "q4zBRoR72gOIfrgdskASMKqyNNo2mf" -pdns_vultr_api_key = "eyyMkv7dpDE0gQz1N2FeyUWGRa9FBHGcqcdSCMaaoe" +pdns_api_key = "f6N7v8ldcqINh4hnAfczEKpA/2g5D+ftzJkQKQz1/G0=" +pdns_server_url = "http://100.119.7.112:8081" diff --git a/terraform/variables.tf b/terraform/variables.tf index e857aae..a159f90 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -7,7 +7,6 @@ variable "vultr_api_key" { } - # Proxmox Variables variable "proxmox_api_url" { description = "Proxmox API URL" @@ -172,25 +171,6 @@ variable "porkbun_secret_api_key" { sensitive = true } -variable "pdns_api_key" { - description = "PowerDNS API key" - type = string - sensitive = true -} - -variable "pdns_server_url" { - description = "PowerDNS server URL" - type = string - default = "http://ns1.vntx.net:8081" -} - -variable "pdns_vultr_api_key" { - description = "PowerDNS Vultr API key" - type = string - sensitive = true -} - -# Legacy Proxmox Variables (from vars.tf) variable "proxmox_host" { description = "Proxmox host for VM deployment" type = string @@ -225,3 +205,14 @@ variable "token_id" { description = "Proxmox token ID" type = string } + +variable "pdns_api_key" { + description = "PowerDNS API key" + type = string + sensitive = true +} + +variable "pdns_server_url" { + description = "PowerDNS server URL" + type = string +}