diff --git a/flake.nix b/flake.nix index 8d99ab8..3cb3feb 100644 --- a/flake.nix +++ b/flake.nix @@ -25,17 +25,21 @@ { self, nixpkgs, vault-secrets, serokell-nix, minecraft-servers, colmena, ... }@inputs: let inherit (nixpkgs) lib; - inherit (builtins) filter mapAttrs; + inherit (builtins) filter mapAttrs attrValues concatLists; system = "x86_64-linux"; - hosts = import ./hosts.nix; - specialArgs = { inherit hosts inputs; }; + # import and add location qualifier to all hosts + hosts = mapAttrs (location: lhosts: map ({ tags ? [ ], ... }@x: x // { tags = [ location ] ++ tags; inherit location; }) lhosts) (import ./nixos/hosts); + # flatten hosts to single list + flat_hosts = concatLists (attrValues hosts); # Filter all nixos host definitions that are actual nix machines - nixHosts = filter ({ nix ? true, ... }: nix) hosts; + nixHosts = filter ({ nix ? true, ... }: nix) flat_hosts; + # Define args each module gets access to (access to hosts is useful for DNS/DHCP) + specialArgs = { inherit hosts flat_hosts inputs; }; # Resolve imports based on a foldername (nixname) and if the host is an LXC container or a VM. - resolveImports = { hostname, profile ? hostname, lxc ? true, ... }: [ + resolveImports = { hostname, location, profile ? hostname, lxc ? true, ... }: [ ./nixos/common - "${./.}/nixos/hosts/${profile}/configuration.nix" + "${./.}/nixos/hosts/${location}/${profile}/configuration.nix" ] ++ (if lxc then [ "${nixpkgs}/nixos/modules/virtualisation/lxc-container.nix" ./nixos/common/generic-lxc.nix @@ -49,10 +53,11 @@ }; }; - mkColmenaHost = { ip, hostname, ... }@host: { + mkColmenaHost = { ip, hostname, tags, ... }@host: { "${hostname}" = { imports = resolveImports host; deployment = { + inherit tags; targetHost = ip; targetUser = null; # Defaults to $USER }; diff --git a/nixos/common/default.nix b/nixos/common/default.nix index 9c0ef6e..bc1478b 100644 --- a/nixos/common/default.nix +++ b/nixos/common/default.nix @@ -40,7 +40,7 @@ }; optimise = { automatic = true; - dates = "weekly"; + dates = [ "weekly" ]; }; extraOptions = '' experimental-features = nix-command flakes @@ -63,6 +63,7 @@ permitRootLogin = "no"; }; + # TODO: Location dependent vault-secrets = { vaultPrefix = "secrets/nixos"; vaultAddress = "http://vault.olympus:8200/"; diff --git a/nixos/hosts/default.nix b/nixos/hosts/default.nix new file mode 100644 index 0000000..b325b5b --- /dev/null +++ b/nixos/hosts/default.nix @@ -0,0 +1,4 @@ +{ + olympus = import ./olympus; + hades = []; +} diff --git a/nixos/hosts/_template/configuration.nix b/nixos/hosts/olympus/_template/configuration.nix similarity index 100% rename from nixos/hosts/_template/configuration.nix rename to nixos/hosts/olympus/_template/configuration.nix diff --git a/nixos/hosts/bastion/configuration.nix b/nixos/hosts/olympus/bastion/configuration.nix similarity index 100% rename from nixos/hosts/bastion/configuration.nix rename to nixos/hosts/olympus/bastion/configuration.nix diff --git a/nixos/hosts/bastion/hardware-configuration.nix b/nixos/hosts/olympus/bastion/hardware-configuration.nix similarity index 100% rename from nixos/hosts/bastion/hardware-configuration.nix rename to nixos/hosts/olympus/bastion/hardware-configuration.nix diff --git a/nixos/hosts/database/configuration.nix b/nixos/hosts/olympus/database/configuration.nix similarity index 100% rename from nixos/hosts/database/configuration.nix rename to nixos/hosts/olympus/database/configuration.nix diff --git a/hosts.nix b/nixos/hosts/olympus/default.nix similarity index 99% rename from hosts.nix rename to nixos/hosts/olympus/default.nix index 4b3a9a5..95bac89 100644 --- a/hosts.nix +++ b/nixos/hosts/olympus/default.nix @@ -46,6 +46,7 @@ ip = "10.42.42.9"; ip6 = "2001:41f0:9639:1:68c2:89ff:fe85:cfa6"; mac = "6A:C2:89:85:CF:A6"; + tags = [ "web" ]; } { hostname = "k3s-node1"; diff --git a/nixos/hosts/dhcp/configuration.nix b/nixos/hosts/olympus/dhcp/configuration.nix similarity index 96% rename from nixos/hosts/dhcp/configuration.nix rename to nixos/hosts/olympus/dhcp/configuration.nix index 1451139..339f731 100644 --- a/nixos/hosts/dhcp/configuration.nix +++ b/nixos/hosts/olympus/dhcp/configuration.nix @@ -5,6 +5,7 @@ let hostName = hostname; ipAddress = ip; }; + hosts' = hosts.olympus; in { imports = [ ]; @@ -47,6 +48,6 @@ in { range 10.42.43.1 10.42.43.254; } ''; - machines = map hostToDhcp hosts; + machines = map hostToDhcp hosts'; }; } diff --git a/nixos/hosts/dns/configuration.nix b/nixos/hosts/olympus/dns/configuration.nix similarity index 88% rename from nixos/hosts/dns/configuration.nix rename to nixos/hosts/olympus/dns/configuration.nix index d4535f4..2dd32df 100644 --- a/nixos/hosts/dns/configuration.nix +++ b/nixos/hosts/olympus/dns/configuration.nix @@ -2,7 +2,9 @@ let inherit (builtins) filter hasAttr; localdomain = "olympus"; - ipv6Hosts = filter (hasAttr "ip6") hosts; + # TODO: use location attr in hosts + hosts' = hosts.${localdomain}; + ipv6Hosts = filter (hasAttr "ip6") hosts'; localData = { hostname, ip, ... }: ''"${hostname}.${localdomain}. A ${ip}"''; local6Data = { hostname, ip6, ... }: ''"${hostname}.${localdomain}. AAAA ${ip6}"''; @@ -38,8 +40,8 @@ in { interface = [ "0.0.0.0" "::0" ]; local-zone = ''"${localdomain}." transparent''; - local-data = (map localData hosts) ++ (map local6Data ipv6Hosts); - local-data-ptr = (map ptrData hosts) ++ (map ptr6Data ipv6Hosts); + local-data = (map localData hosts') ++ (map local6Data ipv6Hosts); + local-data-ptr = (map ptrData hosts') ++ (map ptr6Data ipv6Hosts); access-control = [ "127.0.0.1/32 allow_snoop" diff --git a/nixos/hosts/gitea/configuration.nix b/nixos/hosts/olympus/gitea/configuration.nix similarity index 100% rename from nixos/hosts/gitea/configuration.nix rename to nixos/hosts/olympus/gitea/configuration.nix diff --git a/nixos/hosts/hedgedoc/configuration.nix b/nixos/hosts/olympus/hedgedoc/configuration.nix similarity index 100% rename from nixos/hosts/hedgedoc/configuration.nix rename to nixos/hosts/olympus/hedgedoc/configuration.nix diff --git a/nixos/hosts/k3s/configuration.nix b/nixos/hosts/olympus/k3s/configuration.nix similarity index 100% rename from nixos/hosts/k3s/configuration.nix rename to nixos/hosts/olympus/k3s/configuration.nix diff --git a/nixos/hosts/k3s/hardware-configuration.nix b/nixos/hosts/olympus/k3s/hardware-configuration.nix similarity index 100% rename from nixos/hosts/k3s/hardware-configuration.nix rename to nixos/hosts/olympus/k3s/hardware-configuration.nix diff --git a/nixos/hosts/minecraft/configuration.nix b/nixos/hosts/olympus/minecraft/configuration.nix similarity index 100% rename from nixos/hosts/minecraft/configuration.nix rename to nixos/hosts/olympus/minecraft/configuration.nix diff --git a/nixos/hosts/minio/configuration.nix b/nixos/hosts/olympus/minio/configuration.nix similarity index 100% rename from nixos/hosts/minio/configuration.nix rename to nixos/hosts/olympus/minio/configuration.nix diff --git a/nixos/hosts/mosquitto/configuration.nix b/nixos/hosts/olympus/mosquitto/configuration.nix similarity index 100% rename from nixos/hosts/mosquitto/configuration.nix rename to nixos/hosts/olympus/mosquitto/configuration.nix diff --git a/nixos/hosts/nginx/configuration.nix b/nixos/hosts/olympus/nginx/configuration.nix similarity index 100% rename from nixos/hosts/nginx/configuration.nix rename to nixos/hosts/olympus/nginx/configuration.nix diff --git a/nixos/hosts/synapse/configuration.nix b/nixos/hosts/olympus/synapse/configuration.nix similarity index 100% rename from nixos/hosts/synapse/configuration.nix rename to nixos/hosts/olympus/synapse/configuration.nix diff --git a/nixos/hosts/unifi/configuration.nix b/nixos/hosts/olympus/unifi/configuration.nix similarity index 100% rename from nixos/hosts/unifi/configuration.nix rename to nixos/hosts/olympus/unifi/configuration.nix diff --git a/nixos/hosts/vault/configuration.nix b/nixos/hosts/olympus/vault/configuration.nix similarity index 100% rename from nixos/hosts/vault/configuration.nix rename to nixos/hosts/olympus/vault/configuration.nix diff --git a/nixos/hosts/victoriametrics/configuration.nix b/nixos/hosts/olympus/victoriametrics/configuration.nix similarity index 100% rename from nixos/hosts/victoriametrics/configuration.nix rename to nixos/hosts/olympus/victoriametrics/configuration.nix diff --git a/nixos/hosts/wireguard/configuration.nix b/nixos/hosts/olympus/wireguard/configuration.nix similarity index 100% rename from nixos/hosts/wireguard/configuration.nix rename to nixos/hosts/olympus/wireguard/configuration.nix