forked from hswaw/hscloud
50 lines
1.6 KiB
Nix
50 lines
1.6 KiB
Nix
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;
|
|
}
|