diff --git a/flake.nix b/flake.nix index 61bb6b3..78448b3 100644 --- a/flake.nix +++ b/flake.nix @@ -40,18 +40,19 @@ pkgs-unstable = nixpkgs-unstable.legacyPackages.${system}; machines = import ./nixos/machines; physicalMachines = lib.filterAttrs (n: v: v.type == "physical") machines; - # TODO: Maybe use mergeAttrLists + # TODO: Use mergeAttrLists mkNixosSystems = systemDef: nixpkgs.lib.foldlAttrs (acc: name: machine: acc // { - "${name}" = nixpkgs.lib.nixosSystem (systemDef machine); + "${name}" = nixpkgs.lib.nixosSystem (systemDef name machine); }) { } physicalMachines; mkDeployNodes = nodeDef: + # TODO: Use mergeAttrLists nixpkgs.lib.foldlAttrs - (acc: name: machine: acc // { "${name}" = nodeDef machine; }) + (acc: name: machine: acc // { "${name}" = nodeDef name machine; }) { } physicalMachines; in @@ -75,7 +76,7 @@ formatter.${system} = pkgs.nixfmt; - nixosConfigurations = mkNixosSystems (machine: { + nixosConfigurations = mkNixosSystems (name: machine: { inherit system; specialArgs = { inherit machines machine kubenix dns microvm disko agenix; }; modules = [ ./nixos ]; @@ -85,12 +86,11 @@ sshUser = "root"; user = "root"; - nodes = mkDeployNodes (machine: { - # TODO: simply get this from nixos configuration? - hostname = "${machine.hostName}.${machine.domain}"; + nodes = mkDeployNodes (name: machine: { + hostname = self.nixosConfigurations.${name}.config.networking.fqdn; profiles.system = { path = deploy-rs.lib.${system}.activate.nixos - self.nixosConfigurations.${machine.hostName}; + self.nixosConfigurations.${name}; }; }); }; diff --git a/nixos/machines/default.nix b/nixos/machines/default.nix index 50cd21a..b936b53 100644 --- a/nixos/machines/default.nix +++ b/nixos/machines/default.nix @@ -1,35 +1,44 @@ { jefke = { - # TODO: directly set and read this from nixos config. - hostName = "jefke"; - domain = "hyp"; + # TODO: model this in a nixos module? type = "physical"; - nixosModule.lab = { - terraformDatabase.enable = true; - - storage = { - osDisk = "/dev/sda"; - dataPartition = "/dev/nvme0n1p1"; + nixosModule = { + networking = { + hostName = "jefke"; + # TODO: generate this using type? + domain = "hyp"; }; - ssh = { - useCertificates = true; - # TODO: automatically set this? - hostCert = builtins.readFile ./jefke_host_ed25519-cert.pub; - userCert = builtins.readFile ./jefke_user_ed25519-cert.pub; + lab = { + terraformDatabase.enable = true; + + storage = { + osDisk = "/dev/sda"; + dataPartition = "/dev/nvme0n1p1"; + }; + + ssh = { + useCertificates = true; + # TODO: automatically set this? + hostCert = builtins.readFile ./jefke_host_ed25519-cert.pub; + userCert = builtins.readFile ./jefke_user_ed25519-cert.pub; + }; }; }; }; atlas = { - hostName = "atlas"; - domain = "hyp"; type = "physical"; nixosModule = { config, ... }: let inherit (config.lab.networking) dmzServicesIPv4 dmzServicesIPv6; in { + networking = { + hostName = "atlas"; + domain = "hyp"; + }; + lab = { networking = { # TODO: Ideally, we don't have to set this here. @@ -53,11 +62,14 @@ }; lewis = { - hostName = "lewis"; - domain = "hyp"; type = "physical"; nixosModule = { pkgs, ... }: { + networking = { + hostName = "lewis"; + domain = "hyp"; + }; + lab = { dataHost.enable = true; @@ -76,8 +88,6 @@ }; my-microvm = { - hostName = "my-microvm"; - domain = "dmz"; type = "virtual"; hypervisorName = "lewis"; @@ -86,6 +96,11 @@ echo "Hello world from inside a virtual machine!!" | ${pkgs.lolcat}/bin/lolcat ''; + networking = { + hostName = "my-microvm"; + domain = "dmz"; + }; + lab.vmMacAddress = "BA:DB:EE:F0:00:00"; }; }; diff --git a/nixos/modules/networking/default.nix b/nixos/modules/networking/default.nix index 0a0e640..e1f8b71 100644 --- a/nixos/modules/networking/default.nix +++ b/nixos/modules/networking/default.nix @@ -89,8 +89,6 @@ in { config = { networking = { - hostName = machine.hostName; - domain = machine.domain; nftables.enable = true; useDHCP = machine.type == "virtual"; diff --git a/nixos/physical.nix b/nixos/physical.nix index 8ee2bbc..67b459a 100644 --- a/nixos/physical.nix +++ b/nixos/physical.nix @@ -58,23 +58,20 @@ microvm.vms = let - vmsForHypervisor = lib.attrValues (lib.filterAttrs (n: v: v.type == "virtual" && v.hypervisorName == machine.hostName) machines); + vmsForHypervisor = lib.filterAttrs (n: v: v.type == "virtual" && v.hypervisorName == config.networking.hostName) machines; in - lib.attrsets.mergeAttrsList (map - (vm: + builtins.mapAttrs + (name: vm: { - "${vm.hostName}" = { - # TODO Simplify? - specialArgs = { inherit agenix disko pkgs lib microvm; machine = vm; hypervisorConfig = config; }; - config = { - imports = [ - ./. - ]; - }; + # TODO Simplify? + specialArgs = { inherit agenix disko pkgs lib microvm; machine = vm; hypervisorConfig = config; }; + config = { + imports = [ + ./. + ]; }; } ) - vmsForHypervisor - ); + vmsForHypervisor; }; } diff --git a/nixos/virtual.nix b/nixos/virtual.nix index e08ded9..e206587 100644 --- a/nixos/virtual.nix +++ b/nixos/virtual.nix @@ -1,4 +1,4 @@ -{ lib, config, machine, hypervisorConfig, ... }: { +{ lib, config, hypervisorConfig, ... }: { options.lab.vmMacAddress = lib.mkOption { type = lib.types.str; description = '' @@ -19,7 +19,7 @@ interfaces = [{ type = "tap"; - id = "vm-${machine.hostName}"; + id = "vm-${config.networking.hostName}"; mac = config.lab.vmMacAddress; }]; };