diff --git a/files/lxd-export.sh b/files/lxd-export.sh new file mode 100644 index 0000000..7277f5f --- /dev/null +++ b/files/lxd-export.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd /var/backups/lxd +for i in $(lxc list --format csv -c n); do + lxc export $i ${i}.tar --instance-only --optimized-storage --compression none +done diff --git a/setup-backup.py b/setup-backup.py index 80235d3..02140bf 100644 --- a/setup-backup.py +++ b/setup-backup.py @@ -9,6 +9,46 @@ apt.packages( update=True, ) +files.directory( + name='Ensure /var/backups/lxd exists', + path='/var/backups/lxd', + user='root', + group='root', + mode=700 +) + +if not host.fact.command('zfs list | grep exports || true'): + server.shell( + name='Create ZFS volume exports', + commands=['zfs create local/exports -o mountpoint=/var/backups/lxd'] + ) + +if not host.fact.command('mount | grep exports || true'): + server.shell( + name='Mount local/exports', + commands=['zfs mount local/exports'], + ) + +files.directory( + name='Ensure /var/backups/databases exists', + path='/var/backups/databases', + user='root', + group='root', + mode=700 +) + +if not host.fact.command('zfs list | grep databases || true'): + server.shell( + name='Create ZFS volume databases', + commands=['zfs create local/databases -o mountpoint=/var/backups/databases'] + ) + +if not host.fact.command('mount | grep databases || true'): + server.shell( + name='Mount local/databases', + commands=['zfs mount local/databases'], + ) + files.template( name='Push borgmatic config', src='templates/borgmatic.yaml.j2', @@ -18,3 +58,11 @@ files.template( group='root', ) +files.put( + name='Push lxd-export script', + src='files/lxd-export.sh', + dest='/usr/local/bin/lxd-export.sh', + user='root', + group='root', + mode='700', +)