| 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; |
| } |