blob: 20ed0a0936a9e223900da87745f713ff9f76a4f7 [file] [log] [blame]
self: super:
let
machines = (import ./defs-machines.nix);
configurations = builtins.listToAttrs (map (machine: {
name = machine.fqdn;
value = super.nixos ({ config, pkgs, ... }: {
networking.hostName = machine.name;
imports = [
./modules/base.nix
./modules/kubernetes.nix
];
});
}) machines);
scriptForMachine = machine: let
configuration = configurations."${machine.fqdn}";
in ''
set -e
remote=root@${machine.fqdn}
echo "Configuration for ${machine.fqdn} is ${configuration.toplevel}"
nix copy --no-check-sigs -s --to ssh://$remote ${configuration.toplevel}
echo "/etc/systemd/system diff:"
ssh $remote diff -ur /var/run/current-system/etc/systemd/system ${configuration.toplevel}/etc/systemd/system || true
echo ""
echo ""
ssh $remote ${configuration.toplevel}/bin/switch-to-configuration dry-activate
read -p "Do you want to switch to this configuration? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
ssh $remote ${configuration.toplevel}/bin/switch-to-configuration switch
fi
'';
machineProvisioners = builtins.listToAttrs (map (machine: {
name = "provision-${machine.name}";
value = super.writeScriptBin "provision-${machine.name}" (scriptForMachine machine);
}) machines);
in
{
provision = ({
provision = super.writeScriptBin "provision"
(
''
echo "Available provisioniers:"
'' + (builtins.concatStringsSep "\n" (map (machine: "echo ' provision-${machine.name}'") machines))
);
}) // machineProvisioners;
}