| 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 = [ |
| ./module-base.nix |
| ./module-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} |
| ssh $remote ${configuration.toplevel}/bin/switch-to-configuration $1 |
| ''; |
| |
| 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; |
| } |