remove!(lvm_self_backup): unused
This commit is contained in:
parent
87c004ded6
commit
8d6baf9db6
11 changed files with 0 additions and 437 deletions
|
@ -1,22 +0,0 @@
|
||||||
---
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2020 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
- name: Install & configure LVM self backup
|
|
||||||
hosts: lvm_self_backup
|
|
||||||
roles:
|
|
||||||
- docker
|
|
||||||
- lvm_self_backup
|
|
|
@ -1,26 +0,0 @@
|
||||||
lvm_self_backup
|
|
||||||
=========
|
|
||||||
|
|
||||||
This will deploy a `backup-lvm` and `backup-lvm-ls` script to backup configured LVM volumes encrypted with GPG using duplicity and list the remote content for verification. A systemd timer is also deployed to schedule automatic backups daily at 4 AM.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
You will need to have docker installed or declared as a dependency with the respective role.
|
|
||||||
|
|
||||||
Role Variables
|
|
||||||
--------------
|
|
||||||
|
|
||||||
**Please look at the [defaults/main.yml](defaults/main.yml) for all available variables and their description.**
|
|
||||||
|
|
||||||
**Note: Lines that are commented out via `#` are usually still valid/used variables, but they are not defined by default, so they might enable a feature, when uncommenting/defining them!**
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
|
|
||||||
- docker
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
GPL-3.0-only
|
|
|
@ -1,72 +0,0 @@
|
||||||
---
|
|
||||||
# Default variables for the lvm_self_backup role
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2019-2020 Christoph (Sheogorath) Kern
|
|
||||||
# Copyright (C) 2020 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# The directory to put the status flag in
|
|
||||||
lvm_self_backup_status_directory: "/monitoring"
|
|
||||||
|
|
||||||
# Status directory user & group id
|
|
||||||
# This can be used for example to give telegraf access to the status files.
|
|
||||||
lvm_self_backup_status_directory_uid: 100
|
|
||||||
lvm_self_backup_status_directory_gid: 101
|
|
||||||
|
|
||||||
# The LVM volumes to backup
|
|
||||||
# Available fields:
|
|
||||||
# vg_name - The volume group that the volume resides in
|
|
||||||
# lv_name - The logical volume name that should be backed up
|
|
||||||
# fstype - Optional. Set to "xfs" to mount the snapshots with the `nouuid` flag when the XFS filesystem is used.
|
|
||||||
#
|
|
||||||
lvm_self_backup_vols: []
|
|
||||||
|
|
||||||
# The backup target (see duplicity for valid inputs)
|
|
||||||
lvm_self_backup_target: ""
|
|
||||||
|
|
||||||
# The duplicity image & version
|
|
||||||
lvm_self_backup_duplicity_image: "quay.io/sheogorath/duplicity"
|
|
||||||
# renovate: depName=quay.io/sheogorath/duplicity
|
|
||||||
lvm_self_backup_duplicity_version: "1.2.3"
|
|
||||||
lvm_self_backup_duplicity_image_version: "{{ lvm_self_backup_duplicity_version }}"
|
|
||||||
|
|
||||||
# The GPG options to be used when backing up
|
|
||||||
# Generate a GPG key as the root user before using this role and enter the details here!
|
|
||||||
lvm_self_backup_gpg:
|
|
||||||
id: ""
|
|
||||||
passphrase: "PASSWORD"
|
|
||||||
sign_key: "{{ lvm_self_backup_gpg.id }}"
|
|
||||||
encryption_keys:
|
|
||||||
- "{{ lvm_self_backup_gpg.id }}"
|
|
||||||
|
|
||||||
# Should the systemd timer be enabled to automatically backup every day?
|
|
||||||
lvm_self_backup_timer_enabled: true
|
|
||||||
lvm_self_backup_timer_state: "started"
|
|
||||||
|
|
||||||
# Management for backup retention if enabled, backups will be dropped.
|
|
||||||
lvm_self_backup_retention:
|
|
||||||
# Number of incremental backups to keep.
|
|
||||||
# Incremental backups require a full backup as base.
|
|
||||||
# Therefore the incremental count must be lower
|
|
||||||
# then under full backup if both are enabled.
|
|
||||||
incremental:
|
|
||||||
enabled: true
|
|
||||||
count: 3
|
|
||||||
# Number of full backups to keep. All additional will be deleted.
|
|
||||||
# Starting from the oldest.
|
|
||||||
full:
|
|
||||||
enabled: true
|
|
||||||
count: 6
|
|
|
@ -1,23 +0,0 @@
|
||||||
---
|
|
||||||
# Handlers for lvm_self_backup
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2021 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
- name: Reload systemd config
|
|
||||||
ansible.builtin.systemd:
|
|
||||||
daemon_reload: true
|
|
||||||
become: true
|
|
|
@ -1,43 +0,0 @@
|
||||||
galaxy_info:
|
|
||||||
author: saibotk
|
|
||||||
description: "Deploys a self backup solution using lvm and duplicity."
|
|
||||||
license: GPL-3.0-only
|
|
||||||
min_ansible_version: "2.9"
|
|
||||||
standalone: true
|
|
||||||
|
|
||||||
platforms:
|
|
||||||
- name: EL
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: GenericUNIX
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: Fedora
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: opensuse
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: GenericBSD
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: FreeBSD
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: Ubuntu
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: SLES
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: GenericLinux
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
- name: Debian
|
|
||||||
versions:
|
|
||||||
- all
|
|
||||||
|
|
||||||
galaxy_tags: []
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
- role: docker
|
|
|
@ -1,78 +0,0 @@
|
||||||
---
|
|
||||||
# Tasks file for the lvm_self_backup role
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2020 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
- name: Create backup mount directories
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "/lvm_self_backup_snapshots/{{ item.vg_name }}-{{ item.lv_name }}"
|
|
||||||
state: directory
|
|
||||||
mode: "0700"
|
|
||||||
owner: "root"
|
|
||||||
group: "root"
|
|
||||||
recurse: true
|
|
||||||
with_items:
|
|
||||||
- "{{ lvm_self_backup_vols }}"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Create backup status directory
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "{{ item }}"
|
|
||||||
state: directory
|
|
||||||
mode: "0700"
|
|
||||||
owner: "{{ lvm_self_backup_status_directory_uid }}"
|
|
||||||
group: "{{ lvm_self_backup_status_directory_gid }}"
|
|
||||||
recurse: true
|
|
||||||
with_items:
|
|
||||||
- "{{ lvm_self_backup_status_directory }}"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Install backup scripts.
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: "{{ item.src }}"
|
|
||||||
dest: "{{ item.dest }}"
|
|
||||||
mode: "0700"
|
|
||||||
owner: "root"
|
|
||||||
group: "root"
|
|
||||||
with_items:
|
|
||||||
- src: "backup-lvm.sh"
|
|
||||||
dest: "/usr/local/bin/backup-lvm"
|
|
||||||
- src: "backup-lvm-ls.sh"
|
|
||||||
dest: "/usr/local/bin/backup-lvm-ls"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Install backup services & timer.
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: "{{ item }}"
|
|
||||||
dest: /etc/systemd/system/
|
|
||||||
mode: "0600"
|
|
||||||
owner: "root"
|
|
||||||
group: "root"
|
|
||||||
with_items:
|
|
||||||
- "backup-error.service"
|
|
||||||
- "backup-lvm.service"
|
|
||||||
- "backup-lvm.timer"
|
|
||||||
notify: Reload systemd config
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Start & enable backup service timer.
|
|
||||||
ansible.builtin.systemd:
|
|
||||||
daemon_reload: true
|
|
||||||
name: backup-lvm.timer
|
|
||||||
enabled: "{{ lvm_self_backup_timer_enabled | bool }}"
|
|
||||||
state: "{{ lvm_self_backup_timer_state }}"
|
|
||||||
become: true
|
|
|
@ -1,6 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Writes the error for the monitoring to pick the failure up.
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=/usr/bin/bash -c 'echo 1337 > {{ lvm_self_backup_status_directory }}/backup.status && chown {{ lvm_self_backup_status_directory_uid }}:{{ lvm_self_backup_status_directory_gid }} {{ lvm_self_backup_status_directory }}/backup.status'
|
|
|
@ -1,37 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2020 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
echo "Listing backed up data:"
|
|
||||||
docker run --name="duplicity-backup-lvm" \
|
|
||||||
--security-opt "label=disable" \
|
|
||||||
--security-opt "no-new-privileges" \
|
|
||||||
--cap-drop=ALL \
|
|
||||||
--cap-add=DAC_OVERRIDE \
|
|
||||||
--rm \
|
|
||||||
-v "$HOME/.cache/duplicity/:/archive" \
|
|
||||||
-v "/root/.gnupg/:/root/.gnupg/" \
|
|
||||||
-v "/lvm_self_backup_snapshots/:/backup/:ro" \
|
|
||||||
-e "PASSPHRASE={{ lvm_self_backup_gpg.passphrase }}" \
|
|
||||||
--hostname {{ ansible_fqdn }} \
|
|
||||||
{{ lvm_self_backup_duplicity_image }}:{{ lvm_self_backup_duplicity_image_version }} \
|
|
||||||
list-current-files \
|
|
||||||
--sign-key "{{ lvm_self_backup_gpg.sign_key | default(lvm_self_backup_gpg.id) }}" \
|
|
||||||
{% for encryption_key in lvm_self_backup_gpg.encryption_keys | default([lvm_self_backup_gpg.id]) %}
|
|
||||||
--encrypt-key "{{ encryption_key }}" \
|
|
||||||
{% endfor %}
|
|
||||||
"{{ lvm_self_backup_target }}"
|
|
|
@ -1,33 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Start lvm backup using duplicity.
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
|
|
||||||
TimeoutSec=20h
|
|
||||||
|
|
||||||
# Creating snapshots
|
|
||||||
{% for item in lvm_self_backup_vols %}
|
|
||||||
ExecStartPre=/usr/sbin/lvcreate -L 1G -n {{ item.lv_name }}_snap -s {{ item.vg_name }}/{{ item.lv_name }}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
# Mounting snapshots
|
|
||||||
{% for item in lvm_self_backup_vols %}
|
|
||||||
ExecStartPre=/usr/bin/mount -o ro,nosuid,noexec{% if item.fstype is defined and item.fstype == "xfs" %},nouuid{% endif %} -t {{ item.fstype | default("ext4") }} /dev/{{ item.vg_name }}/{{ item.lv_name }}_snap /lvm_self_backup_snapshots/{{ item.vg_name }}-{{ item.lv_name }}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
ExecStart=/usr/local/bin/backup-lvm
|
|
||||||
|
|
||||||
# Make sure duplicity container is gone
|
|
||||||
ExecStopPost=/usr/bin/docker rm --force duplicity-backup-lvm
|
|
||||||
|
|
||||||
# Unmount snapshots
|
|
||||||
{% for item in lvm_self_backup_vols %}
|
|
||||||
ExecStopPost=/usr/bin/umount /dev/{{ item.vg_name }}/{{ item.lv_name }}_snap
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
# Remove snapshots
|
|
||||||
{% for item in lvm_self_backup_vols %}
|
|
||||||
ExecStopPost=/usr/sbin/lvremove -f {{ item.vg_name }}/{{ item.lv_name }}_snap
|
|
||||||
{% endfor %}
|
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Infrastructure
|
|
||||||
# Ansible instructions to deploy the infrastructure
|
|
||||||
# Copyright (C) 2020 Saibotk
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, version 3 of the License.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
function backup () {(
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "Starting data backup:"
|
|
||||||
|
|
||||||
docker run --name="duplicity-backup-lvm" \
|
|
||||||
--security-opt "label=disable" \
|
|
||||||
--security-opt "no-new-privileges" \
|
|
||||||
--cap-drop=ALL \
|
|
||||||
--cap-add=DAC_OVERRIDE \
|
|
||||||
--rm \
|
|
||||||
-v "$HOME/.cache/duplicity/:/archive" \
|
|
||||||
-v "/root/.gnupg/:/root/.gnupg/" \
|
|
||||||
-v "/lvm_self_backup_snapshots/:/backup/:ro" \
|
|
||||||
-e "PASSPHRASE={{ lvm_self_backup_gpg.passphrase }}" \
|
|
||||||
--hostname {{ ansible_fqdn }} \
|
|
||||||
{{ lvm_self_backup_duplicity_image }}:{{ lvm_self_backup_duplicity_image_version }} \
|
|
||||||
--full-if-older-than 1M \
|
|
||||||
--progress \
|
|
||||||
--progress-rate 60 \
|
|
||||||
--sign-key "{{ lvm_self_backup_gpg.sign_key | default(lvm_self_backup_gpg.id) }}" \
|
|
||||||
{% for encryption_key in lvm_self_backup_gpg.encryption_keys | default([lvm_self_backup_gpg.id]) %}
|
|
||||||
--encrypt-key "{{ encryption_key }}" \
|
|
||||||
{% endfor %}
|
|
||||||
/backup/ \
|
|
||||||
"{{ lvm_self_backup_target }}"
|
|
||||||
|
|
||||||
{% if lvm_self_backup_retention.incremental.enabled %}
|
|
||||||
echo "Remove old incremental backups"
|
|
||||||
docker run --name="duplicity-backup-lvm" \
|
|
||||||
--security-opt "label=disable" \
|
|
||||||
--security-opt "no-new-privileges" \
|
|
||||||
--cap-drop=ALL \
|
|
||||||
--cap-add=DAC_OVERRIDE \
|
|
||||||
--rm \
|
|
||||||
-v "$HOME/.cache/duplicity/:/archive" \
|
|
||||||
--hostname {{ ansible_fqdn }} \
|
|
||||||
{{ lvm_self_backup_duplicity_image }}:{{ lvm_self_backup_duplicity_image_version }} \
|
|
||||||
remove-all-inc-of-but-n-full {{ lvm_self_backup_retention.incremental.count }} --force \
|
|
||||||
"{{ lvm_self_backup_target }}"
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if lvm_self_backup_retention.full.enabled %}
|
|
||||||
echo "Remove old full backups"
|
|
||||||
docker run --name="duplicity-backup-lvm" \
|
|
||||||
--security-opt "label=disable" \
|
|
||||||
--security-opt "no-new-privileges" \
|
|
||||||
--cap-drop=ALL \
|
|
||||||
--cap-add=DAC_OVERRIDE \
|
|
||||||
--rm \
|
|
||||||
-v "$HOME/.cache/duplicity/:/archive" \
|
|
||||||
--hostname {{ ansible_fqdn }} \
|
|
||||||
{{ lvm_self_backup_duplicity_image }}:{{ lvm_self_backup_duplicity_image_version }} \
|
|
||||||
remove-all-but-n-full {{ lvm_self_backup_retention.full.count }} --force \
|
|
||||||
"{{ lvm_self_backup_target }}"
|
|
||||||
{% endif %}
|
|
||||||
)}
|
|
||||||
|
|
||||||
echo "LVM backup started:"
|
|
||||||
|
|
||||||
backup
|
|
||||||
success=$?
|
|
||||||
if [ $success -gt 0 ]; then
|
|
||||||
echo "ERROR: An error occured during backup! $success"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo $success > {{ lvm_self_backup_status_directory }}/backup.status
|
|
||||||
|
|
||||||
chown {{ lvm_self_backup_status_directory_uid }}:{{ lvm_self_backup_status_directory_gid }} {{ lvm_self_backup_status_directory }}/backup.status
|
|
||||||
|
|
||||||
exit $success
|
|
|
@ -1,8 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=Schedule regular lvm backups.
|
|
||||||
|
|
||||||
[Timer]
|
|
||||||
OnCalendar=*-*-* 4:00:00
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
Loading…
Add table
Reference in a new issue