checks/installation: move updating hardware configuration to it's own test
for some reason those are very slow. Moving them to their own test breaks down the critical path.
This commit is contained in:
@@ -3,6 +3,72 @@
|
|||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
|
let
|
||||||
|
installer =
|
||||||
|
{ modulesPath, pkgs, ... }:
|
||||||
|
let
|
||||||
|
dependencies = [
|
||||||
|
self
|
||||||
|
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.toplevel
|
||||||
|
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.diskoScript
|
||||||
|
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.clan.deployment.file
|
||||||
|
pkgs.stdenv.drvPath
|
||||||
|
pkgs.bash.drvPath
|
||||||
|
pkgs.nixos-anywhere
|
||||||
|
pkgs.bubblewrap
|
||||||
|
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
||||||
|
closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
|
||||||
|
# with Nix 2.24 we get:
|
||||||
|
# vm-test-run-test-installation> installer # error: sized: unexpected end-of-file
|
||||||
|
# vm-test-run-test-installation> installer # error: unexpected end-of-file
|
||||||
|
# This seems to be fixed with Nix 2.26
|
||||||
|
# Remove this line once `pkgs.nix` is 2.26+
|
||||||
|
nixPackage =
|
||||||
|
assert
|
||||||
|
lib.versionOlder pkgs.nix.version "2.26"
|
||||||
|
&& lib.versionAtLeast pkgs.nixVersions.latest.version "2.26";
|
||||||
|
pkgs.nixVersions.latest;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/../tests/common/auto-format-root-device.nix")
|
||||||
|
];
|
||||||
|
networking.useNetworkd = true;
|
||||||
|
services.openssh.enable = true;
|
||||||
|
services.openssh.settings.UseDns = false;
|
||||||
|
services.openssh.settings.PasswordAuthentication = false;
|
||||||
|
system.nixos.variant_id = "installer";
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.clan-cli
|
||||||
|
pkgs.nixos-facter
|
||||||
|
] ++ self.packages.${pkgs.system}.clan-cli.runtimeDependencies;
|
||||||
|
environment.etc."install-closure".source = "${closureInfo}/store-paths";
|
||||||
|
virtualisation.emptyDiskImages = [ 512 ];
|
||||||
|
virtualisation.diskSize = 8 * 1024;
|
||||||
|
virtualisation.rootDevice = "/dev/vdb";
|
||||||
|
# both installer and target need to use the same diskImage
|
||||||
|
virtualisation.diskImage = "./target.qcow2";
|
||||||
|
virtualisation.memorySize = 3048;
|
||||||
|
nix.package = nixPackage;
|
||||||
|
nix.settings = {
|
||||||
|
substituters = lib.mkForce [ ];
|
||||||
|
hashed-mirrors = null;
|
||||||
|
connect-timeout = lib.mkForce 3;
|
||||||
|
flake-registry = pkgs.writeText "flake-registry" ''{"flakes":[],"version":2}'';
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
users.users.nonrootuser = {
|
||||||
|
isNormalUser = true;
|
||||||
|
openssh.authorizedKeys.keyFiles = [ ../lib/ssh/pubkey ];
|
||||||
|
extraGroups = [ "wheel" ];
|
||||||
|
};
|
||||||
|
security.sudo.wheelNeedsPassword = false;
|
||||||
|
system.extraDependencies = dependencies;
|
||||||
|
};
|
||||||
|
in
|
||||||
{
|
{
|
||||||
# The purpose of this test is to ensure `clan machines install` works
|
# The purpose of this test is to ensure `clan machines install` works
|
||||||
# for machines that don't have a hardware config yet.
|
# for machines that don't have a hardware config yet.
|
||||||
@@ -112,32 +178,8 @@
|
|||||||
perSystem =
|
perSystem =
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
dependencies = [
|
|
||||||
self
|
|
||||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.toplevel
|
|
||||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.build.diskoScript
|
|
||||||
self.clanInternals.machines.${pkgs.hostPlatform.system}.test-install-machine-with-system.config.system.clan.deployment.file
|
|
||||||
pkgs.stdenv.drvPath
|
|
||||||
pkgs.bash.drvPath
|
|
||||||
pkgs.nixos-anywhere
|
|
||||||
pkgs.bubblewrap
|
|
||||||
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
|
|
||||||
closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
|
|
||||||
# with Nix 2.24 we get:
|
|
||||||
# vm-test-run-test-installation> installer # error: sized: unexpected end-of-file
|
|
||||||
# vm-test-run-test-installation> installer # error: unexpected end-of-file
|
|
||||||
# This seems to be fixed with Nix 2.26
|
|
||||||
# Remove this line once `pkgs.nix` is 2.26+
|
|
||||||
nixPackage =
|
|
||||||
assert
|
|
||||||
lib.versionOlder pkgs.nix.version "2.26"
|
|
||||||
&& lib.versionAtLeast pkgs.nixVersions.latest.version "2.26";
|
|
||||||
pkgs.nixVersions.latest;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
# On aarch64-linux, hangs on reboot with after installation:
|
# On aarch64-linux, hangs on reboot with after installation:
|
||||||
# vm-test-run-test-installation-> installer # [ 288.002871] reboot: Restarting system
|
# vm-test-run-test-installation-> installer # [ 288.002871] reboot: Restarting system
|
||||||
@@ -153,59 +195,41 @@
|
|||||||
# vm-test-run-test-installation-> target: Guest root shell did not produce any data yet...
|
# vm-test-run-test-installation-> target: Guest root shell did not produce any data yet...
|
||||||
# vm-test-run-test-installation-> target: To debug, enter the VM and run 'systemctl status backdoor.service'.
|
# vm-test-run-test-installation-> target: To debug, enter the VM and run 'systemctl status backdoor.service'.
|
||||||
checks = pkgs.lib.mkIf (pkgs.stdenv.isLinux && !pkgs.stdenv.isAarch64) {
|
checks = pkgs.lib.mkIf (pkgs.stdenv.isLinux && !pkgs.stdenv.isAarch64) {
|
||||||
test-installation = (import ../lib/test-base.nix) {
|
installation = (import ../lib/test-base.nix) {
|
||||||
name = "test-installation";
|
name = "installation";
|
||||||
nodes.target = {
|
nodes.target = {
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
virtualisation.diskImage = "./target.qcow2";
|
virtualisation.diskImage = "./target.qcow2";
|
||||||
virtualisation.useBootLoader = true;
|
virtualisation.useBootLoader = true;
|
||||||
nix.package = nixPackage;
|
|
||||||
};
|
|
||||||
nodes.installer =
|
|
||||||
{ modulesPath, ... }:
|
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
(modulesPath + "/../tests/common/auto-format-root-device.nix")
|
|
||||||
];
|
|
||||||
networking.useNetworkd = true;
|
|
||||||
services.openssh.enable = true;
|
|
||||||
system.nixos.variant_id = "installer";
|
|
||||||
environment.systemPackages = [
|
|
||||||
self.packages.${pkgs.system}.clan-cli
|
|
||||||
pkgs.nixos-facter
|
|
||||||
] ++ self.packages.${pkgs.system}.clan-cli.runtimeDependencies;
|
|
||||||
environment.etc."install-closure".source = "${closureInfo}/store-paths";
|
|
||||||
virtualisation.emptyDiskImages = [ 512 ];
|
|
||||||
virtualisation.diskSize = 8 * 1024;
|
|
||||||
virtualisation.rootDevice = "/dev/vdb";
|
|
||||||
# both installer and target need to use the same diskImage
|
|
||||||
virtualisation.diskImage = "./target.qcow2";
|
|
||||||
virtualisation.memorySize = 3048;
|
|
||||||
nix.package = nixPackage;
|
|
||||||
nix.settings = {
|
|
||||||
substituters = lib.mkForce [ ];
|
|
||||||
hashed-mirrors = null;
|
|
||||||
connect-timeout = lib.mkForce 3;
|
|
||||||
flake-registry = pkgs.writeText "flake-registry" ''{"flakes":[],"version":2}'';
|
|
||||||
experimental-features = [
|
|
||||||
"nix-command"
|
|
||||||
"flakes"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
users.users.nonrootuser = {
|
|
||||||
isNormalUser = true;
|
|
||||||
openssh.authorizedKeys.keyFiles = [ ../lib/ssh/pubkey ];
|
|
||||||
extraGroups = [ "wheel" ];
|
|
||||||
};
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
|
||||||
system.extraDependencies = dependencies;
|
|
||||||
};
|
};
|
||||||
|
nodes.installer = installer;
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
installer.start()
|
installer.start()
|
||||||
|
|
||||||
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../lib/ssh/privkey} /root/.ssh/id_ed25519")
|
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../lib/ssh/privkey} /root/.ssh/id_ed25519")
|
||||||
|
|
||||||
|
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
||||||
|
installer.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
||||||
|
|
||||||
|
installer.succeed("clan machines install --no-reboot --debug --flake test-flake --yes test-install-machine --target-host nonrootuser@localhost --update-hardware-config nixos-facter >&2")
|
||||||
|
|
||||||
|
target.state_dir = installer.state_dir
|
||||||
|
target.start()
|
||||||
|
target.wait_for_unit("multi-user.target")
|
||||||
|
#@breakpoint()
|
||||||
|
#@result = target.succeed("cat /etc/install-successful").strip()
|
||||||
|
#@assert result == "ok", f"{result} != ok"
|
||||||
|
'';
|
||||||
|
} { inherit pkgs self; };
|
||||||
|
|
||||||
|
update-hardware-configuration = (import ../lib/test-base.nix) {
|
||||||
|
name = "update-hardware-configuration";
|
||||||
|
nodes.installer = installer;
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
installer.start()
|
||||||
|
installer.succeed("${pkgs.coreutils}/bin/install -Dm 600 ${../lib/ssh/privkey} /root/.ssh/id_ed25519")
|
||||||
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
installer.wait_until_succeeds("timeout 2 ssh -o StrictHostKeyChecking=accept-new -v nonrootuser@localhost hostname")
|
||||||
installer.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
installer.succeed("cp -r ${../..} test-flake && chmod -R +w test-flake")
|
||||||
installer.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
installer.fail("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||||
@@ -218,19 +242,6 @@
|
|||||||
installer.succeed("clan machines update-hardware-config --debug --backend nixos-generate-config --flake test-flake test-install-machine nonrootuser@localhost>&2")
|
installer.succeed("clan machines update-hardware-config --debug --backend nixos-generate-config --flake test-flake test-install-machine nonrootuser@localhost>&2")
|
||||||
installer.succeed("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
installer.succeed("test -f test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||||
installer.succeed("rm test-flake/machines/test-install-machine/hardware-configuration.nix")
|
installer.succeed("rm test-flake/machines/test-install-machine/hardware-configuration.nix")
|
||||||
|
|
||||||
installer.succeed("clan machines install --debug --flake test-flake --yes test-install-machine --target-host nonrootuser@localhost --update-hardware-config nixos-facter >&2")
|
|
||||||
|
|
||||||
try:
|
|
||||||
installer.shutdown()
|
|
||||||
except BrokenPipeError:
|
|
||||||
# qemu has already exited
|
|
||||||
pass
|
|
||||||
|
|
||||||
target.state_dir = installer.state_dir
|
|
||||||
target.start()
|
|
||||||
target.wait_for_unit("multi-user.target")
|
|
||||||
assert(target.succeed("cat /etc/install-successful").strip() == "ok")
|
|
||||||
'';
|
'';
|
||||||
} { inherit pkgs self; };
|
} { inherit pkgs self; };
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user