From 86ab23bd071a4225aade9c6e697ae8d5761ddd61 Mon Sep 17 00:00:00 2001 From: Salt Date: Sun, 3 May 2020 03:06:16 -0500 Subject: [PATCH] Add an untested barebones backup script wrapper --- roles/backups/defaults/main.yml | 5 ++++ roles/backups/tasks/main.yml | 26 +++++++++++++++++++ roles/backups/templates/backup.sh | 43 +++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 roles/backups/defaults/main.yml create mode 100644 roles/backups/tasks/main.yml create mode 100644 roles/backups/templates/backup.sh diff --git a/roles/backups/defaults/main.yml b/roles/backups/defaults/main.yml new file mode 100644 index 0000000..fce5a00 --- /dev/null +++ b/roles/backups/defaults/main.yml @@ -0,0 +1,5 @@ +# vim:ft=ansible: +backups_dir: "/opt/backups" +backups_outdir: "/backups" +backups_modulesdir: "/opt/backups/modules" +backups_script: "/opt/backups/backup.sh" diff --git a/roles/backups/tasks/main.yml b/roles/backups/tasks/main.yml new file mode 100644 index 0000000..e08e45f --- /dev/null +++ b/roles/backups/tasks/main.yml @@ -0,0 +1,26 @@ +#!/usr/bin/ansible-playbook +# vim:ft=ansible: +--- +- name: Set up general backups + block: + - name: Create backups directories + file: + state: directory + mode: "0700" + path: "{{ item }}" + loop: + - "{{ backups_dir }}" + - "{{ backups_outdir }}" + - "{{ backups_modulesdir }}" + - name: Template out backup script + template: + src: "backup.sh" + dest: "{{ backups_script }}" + mode: "0700" + - name: Set backup cronjob + cron: + minute: "0" + hour: "2" + name: ansible-backup + job: "{{ backups_script }}" + become: yes diff --git a/roles/backups/templates/backup.sh b/roles/backups/templates/backup.sh new file mode 100644 index 0000000..4f5d5b9 --- /dev/null +++ b/roles/backups/templates/backup.sh @@ -0,0 +1,43 @@ +#! /bin/bash +# +# backup.sh +# General-purpose backup script that accepts subtasks +# Copyright (C) 2020 Vintage Salt +# +# Distributed under terms of the MIT license. +# + +set -e + +export BACKUPSDIR="{{ backups_outdir }}" +export MODULESDIR="{{ backups_modulesdir }}" +export DATE="$(date -Iseconds)" + +# Helper functions +log() { + [ -z "$1" ] && return 1 + printf "$(date -Iseconds): $1\n" +} + +# Do the do +if ! [ -d "$BACKUPSDIR" ]; then + log "Unable to find backups directory: $BACKUPSDIR" + exit 1 +fi +if ! [ -d "$MODULESDIR" ]; then + log "Unable to find modules directory: $MODULESDIR" + exit 2 +fi +log "Beginning backups" +for file in "$MODULESDIR"/*; do + # Just keep going if we don't have any tasks to do + [ -f "$file" ] || continue + # Execute the module and alert if it fails + log "Executing module: $file" + ( + source "$file" + ) || { + log "Error executing module: $file" + } +done +