diff --git a/roles/terraria/tasks/main.yml b/roles/terraria/tasks/main.yml index 43cbfca..20eb1ef 100644 --- a/roles/terraria/tasks/main.yml +++ b/roles/terraria/tasks/main.yml @@ -88,6 +88,26 @@ owner: terraria group: ter-admin become: yes +- name: Set up backups + block: + - name: Create backups directory + file: + state: directory + mode: "0700" + path: "{{ terraria_root }}/{{ terraria_name }}/backups" + owner: terraria + group: ter-admin + - name: Template out backup script + template: + src: "backup.sh" + dest: "{{ terraria_root }}/{{ terraria_name }}/backup.sh" + mode: "0700" + - name: Set up backup cronjob + cron: + minute: "0" + hour: "/2" + name: "ansible-backup-terraria-{{ terraria_name }}" + job: "{{ terraria_root }}/{{ terraria_name }}/backup.sh >> {{ terraria_root }}/{{ terraria_name }}/backups.log 2>&1" - name: Enable service systemd: name: "terraria@{{ terraria_name }}" diff --git a/roles/terraria/templates/backup.sh b/roles/terraria/templates/backup.sh new file mode 100644 index 0000000..a02750a --- /dev/null +++ b/roles/terraria/templates/backup.sh @@ -0,0 +1,44 @@ +#! /bin/bash +# +# terraria.sh +# Backup script for Gitea. Meant to be sourced by our main backup script +# Copyright (C) 2020 Vintage Salt +# +# Distributed under terms of the MIT license. +# + +set -e + +export TERRARIADIR="{{ terraria_root }}/{{ terraria_name }}" +export OUTDIR="$TERRARIADIR/backups" +retention=84 # 2-hour intervals, 7 days + +# Sanity checks +if ! [ -d "$OUTDIR" ]; then + if ! mkdir "$OUTDIR"; then + log "Unable to find or create output directory: $OUTDIR" + return 2 + fi +fi +# Enforce permissions on our output directory since the terraria user will need them +chown root.git "$OUTDIR" +chmod 770 "$OUTDIR" + +# Purge oldest backup if we need to +currentbackupcount="$(ls -1 "$OUTDIR" | wc -l)" +if (( currentbackupcount >= retention )); then + lastbackup="$(find "$OUTDIR" -name \*.zip 2>/dev/null | sort | head -n 1)" + if [ -f "$lastbackup" ]; then + log "Removing old backup: $lastbackup" + rm "$lastbackup" + fi +fi +# WE MAKE BACKUP NOW SERGEI +if cd "$OUTDIR"; then + log "Initiating terraria dump" + su terraria -c cp "$TERRARIADIR/worlds/world.wld" "$OUTDIR/world-$(date -Iseconds).wld" +else + log "Could not change directory: $OUTDIR" + return 3 +fi +