90 lines
2 KiB
Nix
90 lines
2 KiB
Nix
{
|
|
_snow,
|
|
config,
|
|
...
|
|
}: let
|
|
inherit
|
|
(builtins)
|
|
mapAttrs
|
|
;
|
|
|
|
mapNodes = nodes: f:
|
|
nodes.nodes
|
|
|> mapAttrs (name: node: let
|
|
# use per-node base or default to nodes' base
|
|
base =
|
|
if node.base != null
|
|
then node.base
|
|
else if nodes.base != null
|
|
then nodes.base
|
|
else
|
|
abort ''
|
|
snow cannot construct nodes node "${name}" without a base package source.
|
|
Ensure `nodes.nodes.*.base` or `nodes.base` is a flake reference to the github:NixOS/nixpkgs repository.
|
|
'';
|
|
in
|
|
f rec {
|
|
inherit name node base;
|
|
inherit (base) lib;
|
|
|
|
groups = node.groups (parseGroupsDecl nodes.groups);
|
|
groupModules = root: getGroupModules root groups;
|
|
});
|
|
in {
|
|
outputs.deploy.nodes = mapNodes config.nodes ({
|
|
name,
|
|
node,
|
|
...
|
|
}: let
|
|
inherit
|
|
(node.deploy)
|
|
ssh
|
|
user
|
|
interactiveSudo
|
|
remoteBuild
|
|
rollback
|
|
autoRollback
|
|
magicRollback
|
|
activationTimeout
|
|
confirmTimeout
|
|
;
|
|
|
|
nixosFor = system: _snow.inputs.deploy-rs.lib.${system}.activate.nixos;
|
|
in {
|
|
hostname =
|
|
if ssh.host != null
|
|
then ssh.host
|
|
else "";
|
|
|
|
profilesOrder = ["default"]; # profiles priority
|
|
profiles.default = {
|
|
path = nixosFor node.system config.outputs.nixosConfigurations.${name};
|
|
|
|
user = user;
|
|
sudo = "sudo -u";
|
|
interactiveSudo = interactiveSudo;
|
|
|
|
fastConnection = false;
|
|
|
|
autoRollback = autoRollback -> rollback;
|
|
magicRollback = magicRollback -> rollback;
|
|
activationTimeout = activationTimeout;
|
|
confirmTimeout = confirmTimeout;
|
|
|
|
remoteBuild = remoteBuild;
|
|
sshUser = ssh.user;
|
|
sshOpts =
|
|
ssh.opts
|
|
++ (
|
|
if builtins.elem "-p" ssh.opts
|
|
then []
|
|
else ["-p" (toString ssh.port)]
|
|
)
|
|
++ (
|
|
if builtins.elem "-A" ssh.opts
|
|
then []
|
|
else ["-A"]
|
|
);
|
|
};
|
|
});
|
|
}
|