Multi-host Modules
Fleet modules configure multiple hosts simultaneously. Unlike standard NixOS modules which configure a single machine, fleet modules have access to all hosts in the cluster.
Basic Module
# wireguard/default.nix
{ config, ... }: {
hosts = builtins.mapAttrs (name: host: {
nixos.networking.wireguard.interfaces.wg0 = {
ips = [ host.config.wireguardIp ];
peers = builtins.filter (p: p.name != name)
(builtins.attrValues config.hosts);
};
}) config.hosts;
}
Using Modules
Modules are imported in the fleetConfigurations block:
fleetConfigurations.default = {
imports = [
./wireguard
./monitoring
];
hosts.node-1 = { ... };
hosts.node-2 = { ... };
};
Multi-instance Modules
Modules can be parameterized and imported multiple times:
fleetConfigurations.default = {
imports = [
(import ./kubernetes { hosts = ["cp-1" "cp-2"]; })
(import ./kubernetes { hosts = ["cp-3" "cp-4"]; })
];
};