{ ... }: { name = "service-localbackup"; clan = { directory = ./.; test.useContainers = true; inventory = { machines.machine = { }; instances = { localbackup = { module.name = "@clan/localbackup"; module.input = "self"; roles.default.machines."machine".settings = { targets.hdd = { directory = "/mnt/external-disk"; preMountHook = '' touch /run/mount-external-disk ''; postUnmountHook = '' touch /run/unmount-external-disk ''; }; }; }; }; }; }; nodes.machine = { clan.core.state.test-backups.folders = [ "/var/test-backups" ]; }; testScript = '' import json start_all() machine.systemctl("start network-online.target") machine.wait_for_unit("network-online.target") # dummy data machine.succeed("mkdir -p /var/test-backups") machine.succeed("echo testing > /var/test-backups/somefile") # create machine.succeed("localbackup-create >&2") machine.wait_until_succeeds("! systemctl is-active localbackup-job-serverone >&2") # list snapshot_list = machine.succeed("localbackup-list").strip() assert json.loads(snapshot_list)[0]["name"].strip() == "hdd::/mnt/external-disk/snapshot.0" # borgbackup restore machine.succeed("rm -f /var/test-backups/somefile") machine.succeed("NAME=/mnt/external-disk/snapshot.0 FOLDERS=/var/test-backups /run/current-system/sw/bin/localbackup-restore >&2") assert machine.succeed("cat /var/test-backups/somefile").strip() == "testing", "restore failed" ''; }