{ testers, config, extendModules, lib, system }: let lift = config; snakeoil = { ssh = { public = lib.fileContents ./snakeoil/ssh/snakeoil-key.pub; private = ./snakeoil/ssh/snakeoil-key; }; wireguard = { public = lib.genAttrs nodes (node: lib.fileContents ./snakeoil/wireguard/public-key-${toString digits.${node}}); private = lib.genAttrs nodes (node: ./snakeoil/wireguard/private-key-${toString digits.${node}}); }; }; nodes = lib.attrNames config.gods.fromLight; digits = lib.attrsets.listToAttrs (lib.zipListsWith lib.nameValuePair nodes (lib.range 1 255)); depot' = extendModules { modules = [ ({ config, ... }: { gods.fromLight = lib.mapAttrs (name: cfg: { interfaces.primary = { link = lib.mkForce "eth1"; addr = lib.mkForce "192.168.1.${toString digits.${name}}"; addrPublic = lib.mkForce "192.168.1.${toString digits.${name}}"; }; ssh.id.publicKey = lib.mkForce snakeoil.ssh.public; }) lift.gods.fromLight; cluster = lib.mkForce (lift.cluster.extendModules { specialArgs.depot = config; modules = [ { hostLinks = lib.genAttrs nodes (node: { mesh.extra = lib.mkForce (lift.cluster.config.hostLinks.${node}.mesh.extra // { pubKey = snakeoil.wireguard.public.${node}; }); }); } ]; }); }) ]; }; specialArgs = depot'.config.lib.summon system lib.id; in testers.runNixOSTest { name = "cluster"; node = { inherit specialArgs; }; nodes = lib.genAttrs nodes (node: { imports = [ specialArgs.depot.hours.${node}.nixos ./modules/nixos/age-dummy-secrets ] ++ depot'.config.cluster.config.out.injectNixosConfig node; environment.etc."ssh/ssh_host_ed25519_key" = { source = snakeoil.ssh.private; mode = "0400"; }; environment.etc."dummy-secrets/cluster-wireguard-meshPrivateKey".source = lib.mkForce snakeoil.wireguard.private.${node}; passthru.depot = depot'; virtualisation.memorySize = 4096; }); testScript = '' grail.succeed("false") ''; }