From 7406d3019194754fb7542804822dcb7d4231719a Mon Sep 17 00:00:00 2001 From: Salt Date: Mon, 8 Jun 2020 20:10:58 -0500 Subject: [PATCH] Add backups for Minecraft instances --- gameservers.yml | 2 ++ roles/minecraft/tasks/main.yml | 17 +++++++++---- roles/minecraft/templates/backup.sh | 38 +++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 roles/minecraft/templates/backup.sh diff --git a/gameservers.yml b/gameservers.yml index 2951314..10b8d4b 100644 --- a/gameservers.yml +++ b/gameservers.yml @@ -3,6 +3,8 @@ --- - hosts: game1.9iron.club roles: + - role: backups + tags: [ backups ] - role: minecraft vars: mcname: "rotary-main" diff --git a/roles/minecraft/tasks/main.yml b/roles/minecraft/tasks/main.yml index a4e8073..5836211 100644 --- a/roles/minecraft/tasks/main.yml +++ b/roles/minecraft/tasks/main.yml @@ -95,9 +95,16 @@ dest: "/var/minecraft/{{ mcname }}/eula.txt" become: yes become_user: minecraft -- name: Enable service - systemd: - name: "minecraft@{{ mcname }}" - enabled: yes - state: started +- name: Set up system + block: + - name: Enable service + systemd: + name: "minecraft@{{ mcname }}" + enabled: yes + state: started + - name: Template out backup module + template: + src: "backup.sh" + dest: "/opt/backups/modules/minecraft-{{ mcname }}.sh" + mode: "0600" become: yes diff --git a/roles/minecraft/templates/backup.sh b/roles/minecraft/templates/backup.sh new file mode 100644 index 0000000..55530ef --- /dev/null +++ b/roles/minecraft/templates/backup.sh @@ -0,0 +1,38 @@ +#! /bin/bash +# +# minecraft.sh +# Backup script for Minecraft. Meant to be sourced by our main backup script +# Copyright (C) 2020 Vintage Salt +# +# Distributed under terms of the MIT license. +# + +set -e + +export OUTDIR="$BACKUPSDIR/{{ mcname }}" +retention=7 # 7-day retention period + +# Sanity checks +if [ -z "$BACKUPSDIR" ]; then + log "BACKUPSDIR was undefined. Run the main backup script instead of this one." + return 1 +fi +if ! [ -d "$OUTDIR" ]; then + if ! mkdir "$OUTDIR"; then + log "Unable to find or create output directory: $OUTDIR" + return 2 + fi +fi + +# Purge oldest backup if we need to +currentbackupcount="$(ls -1 "$OUTDIR" | wc -l)" +if (( currentbackupcount >= retention )); then + lastbackup="$(find "$OUTDIR" -name \*.tar.gz 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 +tar czf "$OUTDIR/{{ mcname }}-$(date -Iseconds)-world.tar.gz" "/var/minecraft/{{ mcname }}/world" +