nix-config/hosts/server10/microvm-staging.nix

90 lines
2.4 KiB
Nix

{ config, pkgs, ... }:
let
microvms = {
staging-data-hoarder = {
flakeref = "github:dump-dvb/nix-config";
};
};
in
{
microvm.autostart = builtins.attrNames microvms;
systemd.services = {
"staging-dh-create-data" = {
description = "Create ZFS datasets for staging-data-hoarder shares";
requiredBy = [
"microvm@staging-data-hoarder.service"
];
before = [
"microvm@staging-data-hoarder.service"
];
after = [
"microvm-create@staging-data-hoarder.service"
];
serviceConfig = {
Type = "oneshot";
};
path = [ pkgs.zfs ];
script = ''
cd /var/lib/microvms/staging-data-hoarder
for MNT in etc var ; do
[ -d $MNT ] || zfs create -o mountpoint=`pwd`/$MNT ${config.networking.hostName}/vm/staging-data-hoarder/$MNT
done
'';
};
"microvm-update@" = {
description = "Update MicroVMs automatically";
after = [ "network-online.target" ];
unitConfig.ConditionPathExists = "/var/lib/microvms/%i";
serviceConfig = {
Type = "oneshot";
};
scriptArgs = "%i";
path = [ pkgs.nixFlakes ];
script = ''
NAME=$1
set +e
nix flake update $(cat /var/lib/microvms/$NAME/flake)
set -e
/run/current-system/sw/bin/microvm -Ru $NAME
'';
};
} // builtins.foldl' (services: name: services // {
"microvm-create-${name}" = {
description = "Create MicroVM ${name} automatically";
wantedBy = [ "microvms.target" ];
after = [ "network-online.target" ];
before = [
"microvm-tap-interfaces@${name}.service"
"microvm-virtiofsd@${name}.service"
];
unitConfig.ConditionPathExists = "!/var/lib/microvms/${name}";
serviceConfig.Type = "oneshot";
scriptArgs = "${name}";
script = ''
/run/current-system/sw/bin/microvm -c ${name} -f "${microvms.${name}.flakeref}"
'';
};
}) {} (builtins.attrNames microvms);
systemd.timers = builtins.foldl' (timers: name: timers // {
"microvm-update-${name}" = {
wantedBy = [ "timers.target" ];
timerConfig = {
Unit = "microvm-update@${name}.service";
# three times per hour
OnCalendar = "*:0,20,40:00";
Persistent = true;
};
};
}) {} (builtins.attrNames microvms);
c3d2.server.bridgePorts = {
serv = [
"staging-dh"
];
};
}