70 lines
2.1 KiB
Nix
70 lines
2.1 KiB
Nix
{ self, nixpkgs, system }:
|
|
with nixpkgs.lib;
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
config = self.lib.config;
|
|
|
|
templates = role: {
|
|
ap = _: ./ap.sh;
|
|
switch = model: ../../salt/switches + "/${model}.expect";
|
|
}.${role};
|
|
replaceNetmasks = template:
|
|
builtins.toFile (builtins.baseNameOf template) (
|
|
builtins.replaceStrings [''{%- import_yaml "netmasks.yaml" as netmasks -%}''] [""] (
|
|
builtins.readFile template
|
|
)
|
|
);
|
|
expandTemplate = name: template: data:
|
|
self.lib.expandSaltTemplate name (replaceNetmasks template) data;
|
|
wrapNixShell = script:
|
|
pkgs.runCommand (builtins.baseNameOf script) {
|
|
src = script;
|
|
} ''
|
|
(
|
|
echo '#! /usr/bin/env nix-shell'
|
|
echo '#! nix-shell -i "expect -f" -p expect telnet'
|
|
cat $src
|
|
) > $out
|
|
chmod a+x $out
|
|
'';
|
|
|
|
device-scripts =
|
|
builtins.mapAttrs (hostname: { role, model, ... }:
|
|
wrapNixShell (
|
|
expandTemplate "${hostname}.sh" (templates role model) ({
|
|
inherit hostname;
|
|
pillar = config.salt-pillar;
|
|
netmasks = self.lib.netmasks;
|
|
logging = config.salt-pillar.hosts-inet.mgmt.logging;
|
|
} // optionalAttrs (config.salt-pillar.switches ? ${hostname}) {
|
|
switch = config.salt-pillar.switches.${hostname};
|
|
} // optionalAttrs (config.salt-pillar.cpe ? ${hostname}) {
|
|
conf = config.salt-pillar.cpe.${hostname};
|
|
})
|
|
)
|
|
) (
|
|
filterAttrs (_: { role, ... }:
|
|
role == "ap" || role == "switch"
|
|
) config.site.hosts
|
|
);
|
|
|
|
all-device-scripts =
|
|
pkgs.runCommandLocal "all-device-scripts" {} (
|
|
''
|
|
mkdir -p $out/bin
|
|
|
|
substitute ${./ap_install_collectd.sh} $out/bin/ap_install_collectd.sh \
|
|
--replace "{{STATS}}" "${config.site.net.serv.hosts6.dn42.stats}"
|
|
chmod a+x $out/bin/ap_install_collectd.sh
|
|
'' +
|
|
builtins.concatStringsSep "\n" (
|
|
map (hostname:
|
|
"ln -s ${device-scripts.${hostname}} $out/bin/${hostname}.sh"
|
|
) (builtins.attrNames device-scripts)
|
|
)
|
|
);
|
|
in
|
|
{
|
|
inherit all-device-scripts;
|
|
} // device-scripts
|