system-manager-wakasu
1{ dns, globals, ... }:
2with dns.lib.combinators;
3let
4 dnsHelpers = import ../../../../lib/dns-helpers.nix { inherit globals; };
5 inherit (dnsHelpers) getMachineIP mkServiceRecords;
6
7 # Only include machines that should be in sbr.pm zone
8 machineList = [
9 "shikoku"
10 "sakhalin"
11 "aix"
12 "rhea"
13 "aion"
14 "demeter"
15 "athena"
16 "nagoya"
17 "kerkouane"
18 "aomi"
19 "kyushu"
20 "wakasu"
21 ];
22
23 mkMachineRecords = builtins.listToAttrs (
24 map (machineName: {
25 name = machineName;
26 value = {
27 A = [ (getMachineIP globals.machines.${machineName}) ];
28 subdomains."*".A = [ (getMachineIP globals.machines.${machineName}) ];
29 };
30 }) machineList
31 );
32in
33{
34 SOA = {
35 nameServer = "ns1.sbr.pm.";
36 adminEmail = "admin.sbr.pm";
37 serial = 3;
38 refresh = 604800;
39 retry = 86400;
40 expire = 2419200;
41 minimum = 604800;
42 };
43
44 NS = [
45 "ns1.sbr.pm."
46 "ns2.sbr.pm."
47 ];
48
49 # Root domain points to public endpoint
50 A = [ "167.99.17.238" ];
51
52 # Email (Gandi)
53 MX = [
54 {
55 preference = 10;
56 exchange = "spool.mail.gandi.net.";
57 }
58 {
59 preference = 50;
60 exchange = "fb.mail.gandi.net.";
61 }
62 ];
63
64 subdomains = {
65 # Name servers (demeter and athena)
66 ns1.A = [ (getMachineIP globals.machines.demeter) ];
67 ns2.A = [ (getMachineIP globals.machines.athena) ];
68
69 # Wildcard for public endpoint
70 "*".A = [
71 {
72 address = "167.99.17.238";
73 ttl = 10800;
74 }
75 ];
76
77 # Email CNAMEs (Gandi mail service)
78 imap.CNAME = [ "access.mail.gandi.net." ];
79 pop.CNAME = [ "access.mail.gandi.net." ];
80 smtp.CNAME = [ "relay.mail.gandi.net." ];
81 webmail.CNAME = [ "webmail.gandi.net." ];
82
83 # Shortcuts
84 p.A = [ "167.99.17.238" ]; # public endpoint shortcut
85 www = {
86 A = [ "167.99.17.238" ];
87 subdomains."*".A = [ "167.99.17.238" ];
88 };
89 }
90 // mkMachineRecords
91 // mkServiceRecords globals.services;
92}