inventory test framework: init
Add nixos test module checks/lib/test-inventory-nix accepts new option `inventory` and creates machines accordingly with correct imports
This commit is contained in:
26
checks/dummy-inventory-test/default.nix
Normal file
26
checks/dummy-inventory-test/default.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
(import ../lib/test-inventory.nix) (
|
||||
{ ... }:
|
||||
{
|
||||
name = "dummy-inventory-test";
|
||||
|
||||
inventory = {
|
||||
machines.peer1 = { };
|
||||
machines.admin1 = { };
|
||||
services = {
|
||||
dummy-module.default = {
|
||||
roles.peer.machines = [ "peer1" ];
|
||||
roles.admin.machines = [ "admin1" ];
|
||||
};
|
||||
};
|
||||
modules = {
|
||||
dummy-module = ./dummy-module;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
admin1.wait_for_unit("dummy-service")
|
||||
peer1.wait_for_unit("dummy-service")
|
||||
'';
|
||||
}
|
||||
)
|
||||
10
checks/dummy-inventory-test/dummy-module/README.md
Normal file
10
checks/dummy-inventory-test/dummy-module/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
description = "Set up dummy-module"
|
||||
categories = ["System"]
|
||||
features = [ "inventory" ]
|
||||
|
||||
[constraints]
|
||||
roles.admin.min = 1
|
||||
roles.admin.max = 1
|
||||
---
|
||||
|
||||
5
checks/dummy-inventory-test/dummy-module/roles/admin.nix
Normal file
5
checks/dummy-inventory-test/dummy-module/roles/admin.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
./shared.nix
|
||||
];
|
||||
}
|
||||
5
checks/dummy-inventory-test/dummy-module/roles/peer.nix
Normal file
5
checks/dummy-inventory-test/dummy-module/roles/peer.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
imports = [
|
||||
./shared.nix
|
||||
];
|
||||
}
|
||||
13
checks/dummy-inventory-test/dummy-module/roles/shared.nix
Normal file
13
checks/dummy-inventory-test/dummy-module/roles/shared.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
systemd.services.dummy-service = {
|
||||
enable = true;
|
||||
description = "Dummy service";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.coreutils}/bin/true";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -41,6 +41,7 @@ in
|
||||
borgbackup = import ./borgbackup nixosTestArgs;
|
||||
matrix-synapse = import ./matrix-synapse nixosTestArgs;
|
||||
mumble = import ./mumble nixosTestArgs;
|
||||
dummy-inventory-test = import ./dummy-inventory-test nixosTestArgs;
|
||||
data-mesher = import ./data-mesher nixosTestArgs;
|
||||
syncthing = import ./syncthing nixosTestArgs;
|
||||
zt-tcp-relay = import ./zt-tcp-relay nixosTestArgs;
|
||||
|
||||
56
checks/lib/test-inventory.nix
Normal file
56
checks/lib/test-inventory.nix
Normal file
@@ -0,0 +1,56 @@
|
||||
test:
|
||||
{ pkgs, self, ... }:
|
||||
let
|
||||
inherit (pkgs) lib;
|
||||
inherit (lib) mkOption flip mapAttrs;
|
||||
inherit (lib.types) raw;
|
||||
inherit (self.lib.inventory) buildInventory;
|
||||
nixos-lib = import (pkgs.path + "/nixos/lib") { };
|
||||
in
|
||||
(nixos-lib.runTest (
|
||||
{ config, ... }:
|
||||
{
|
||||
imports = [ test ];
|
||||
options = {
|
||||
inventory = mkOption {
|
||||
description = "Inventory of machines and services";
|
||||
type = raw;
|
||||
};
|
||||
serviceConfigs = mkOption {
|
||||
description = "Result of the evaluated inventory";
|
||||
type = raw;
|
||||
readOnly = true;
|
||||
};
|
||||
};
|
||||
config = {
|
||||
serviceConfigs = buildInventory {
|
||||
inventory = config.inventory;
|
||||
# TODO: make directory argument optional in buildInventory
|
||||
directory = ./.;
|
||||
};
|
||||
nodes = flip mapAttrs config.serviceConfigs.machines (
|
||||
_machineName: attrs: {
|
||||
imports = attrs.machineImports ++ [ self.nixosModules.clanCore ];
|
||||
clan.core.settings.directory = builtins.toString ./.;
|
||||
}
|
||||
);
|
||||
hostPkgs = pkgs;
|
||||
# speed-up evaluation
|
||||
defaults = (
|
||||
{ config, ... }:
|
||||
{
|
||||
imports = [
|
||||
./minify.nix
|
||||
];
|
||||
documentation.enable = lib.mkDefault false;
|
||||
nix.settings.min-free = 0;
|
||||
system.stateVersion = config.system.nixos.release;
|
||||
}
|
||||
);
|
||||
|
||||
_module.args = { inherit self; };
|
||||
# to accept external dependencies such as disko
|
||||
node.specialArgs.self = self;
|
||||
};
|
||||
}
|
||||
)).config.result
|
||||
Reference in New Issue
Block a user