l3d.restic
Rol de Ansible: restic
Beta: Este rol está en estado beta.
Descripción
Restic es una solución de respaldo versátil basada en Go que soporta múltiples Backend, deduplicación y respaldos incrementales.
Este rol instala restic en un cliente, configura los repositorios de respaldo y opcionalmente establece un temporizador de systemd o tareas de cron para ejecutar los respaldos. Además, configurará scripts ejecutables para realizar un respaldo manualmente.
Este proyecto se basa en gran medida en el donat-b/ansible-restic y en el https://github.com/arillso/ansible.restic rol de ansible. Intentamos hacer este rol más comprensible y moderno utilizando temporizadores de systemd, /etc/crontab para definir rutas de respaldo, más rutas absolutas y menos opciones. (no probado para almacenamiento S3 o Windows...)
Scripts de Respaldo
Este rol creará un script de respaldo y un archivo con credenciales utilizables con el comando source
en Linux para cada respaldo en el restic_script_dir
.
Estos scripts ejecutables pueden usarse para activar manualmente una acción de respaldo, pero también se utilizan para respaldos automatizados si has configurado la variable restic_create_schedule
como verdadera.
Asegúrate de no cambiar los archivos manualmente, ya que esto puede interferir bastante con tus respaldos.
En Linux, si deseas tomar un snapshot manual, puedes ejecutar el respaldo así:
$ /ruta/al/script/de/respaldo/respaldo-ejemplo.sh
Por defecto, tal snapshot tendrá la etiqueta manual
, para que puedas distinguirlos de los snapshots creados automáticamente. También puedes añadir más etiquetas simplemente añadiéndolas:
$ /ruta/al/script/de/respaldo/respaldo-ejemplo.sh --tag despliegue
Tareas CRON / Programadas
Para utilizar los respaldos definidos, se pueden configurar automáticamente como tareas programadas. Debes tener en cuenta que (al menos en sistemas Linux) necesitas permisos de administrador para configurar tal acción.
Si no puedes usar la creación automática de las tareas, aún puedes hacer uso de los scripts generados. Si, por ejemplo, estás en un servidor de hosting compartido y puedes definir un cronjob a través de una interfaz web, simplemente añade cada archivo de respaldo para ejecutarlo. Asegúrate de prefijar el comando con CRON=true
para indicar que el snapshot fue creado a través de una tarea programada:
CRON=true /ruta/al/script/de/respaldo/respaldo-ejemplo.sh
Instalación
Hay múltiples maneras de instalar el rol. Puedes clonarlo o descargarlo directamente desde el repositorio de github. O instalarlo a través de ansible galaxy:
ansible-galaxy install roles-ansible.restic
Requisitos
- bzip2
Variables del Rol
Nombre | Predeterminado | Descripción |
---|---|---|
restic_url |
indefinido |
La URL para descargar restic. Usa esta variable para sobrescribir la configuración predeterminada |
restic_version |
'0.15.1' |
La versión de Restic a instalar |
restic_download_path |
'/opt/restic' |
Ubicación de descarga para el binario de restic |
restic_install_path |
'/usr/local/bin' |
Ubicación de instalación para el binario de restic |
restic_script_dir |
'/opt/restic' |
Ubicación de los scripts de respaldo generados |
restic_backup_script_shell |
sh |
Shell a usar para ejecutar el script de respaldo |
restic_log_dir |
'{{ restic_script_dir }}/log' |
Ubicación de los registros de los scripts de respaldo |
restic_repos |
{} |
Un diccionario de repositorios donde se almacenan los snapshots. (Más información: Repos) |
restic_backups |
{} (o [] ) |
Una lista de diccionarios que especifican los archivos y directorios a respaldar (Más información: Backups) |
restic_create_schedule |
false |
¿Deberíamos programar cada respaldo? Ya sea a través de un cronjob o mediante un temporizador de systemd. |
restic_backup_now |
false |
Si el script de respaldo debe ejecutarse inmediatamente |
restic_schedule_type |
systemd |
Aquí puedes definir si creamos un cronjob o un temporizador de systemd . Si falla al crear un temporizador de systemd, se creará un cronjob. |
restic_dir_owner |
'{{ansible_user}}' |
El propietario de todos los directorios creados |
restic_dir_group |
'{{ansible_user}}' |
El grupo de todos los directorios creados |
restic_no_log |
true |
Establecer en falso para ver registros ocultos de ansible |
restic_do_not_cleanup_cron |
false |
Hemos cambiado la ubicación del cron y limpiamos el antiguo. Puedes omitir la limpieza aquí $ |
restic__cache_config |
false |
Configurar un directorio de caché personalizado |
restic__cache_dir |
'~/.cache/restic' |
Definir un directorio de caché personalizado |
submodules_versioncheck |
false |
Si configuras esta variable como verdadera, el rol ejecutará un chequeo de versiones simple para evitar ejecutar versiones antiguas de este rol. |
restic__limit_cpu_usage |
false |
¿Debe limitarse el uso de CPU? |
restic__max_cpus |
1 |
Número máximo de CPUs que se pueden usar simultáneamente |
Repos
Restic almacena datos en repositorios. Debes especificar al menos un repositorio para poder usar este rol. Un repositorio puede ser local o remoto (ver la documentación oficial).
Usando un repositorio SFTP
Para usar un backend SFTP, el usuario necesita acceso sin contraseña al host. Asegúrate de distribuir las claves ssh en consecuencia, ya que esto está fuera del ámbito de este rol.
Variables disponibles:
Nombre | Requerido | Descripción |
---|---|---|
location |
sí | La ubicación del Backend. Actualmente, se soportan Local, SFTP, S3, Azure Blob y B2 |
password |
sí | La contraseña utilizada para asegurar este repositorio |
init |
no | Describe si el repositorio debe ser inicializado o no. Usa false si estás respaldando a un repositorio ya existente. |
Ejemplo:
restic_repos:
local:
location: /srv/restic-repo
password: contraseñasegura0
init: true
remote:
location: rest:https://restic_rest_server.example.com:8000/restic-repo/
password: contraseñasegura1
init: true
sftp:
location: sftp:usuario@host:/srv/restic-repo
password: contraseñasegura2
init: true
aws:
location: s3:s3.amazonaws.com/nombre_del_bucket
password: contraseñasegura3
init: true
aws_access_key: claveacceso
aws_secret_access_key: claveprivada
aws_default_region: eu-west-1
azure:
location: azure:container:/
password: contraseñasegura4
init: true
azure_account_name: nombre_cuenta_almacenamiento
# Solo una de las siguientes es requerida
azure_account_key: algunaclave
azure_account_sas: url_sas
# Opcional
azure_endpoint_suffix: core.windows.net
b2:
location: b2:nombrebucket:ruta/al/repo
password: contraseñasegura5
init: true
b2_account_id: idcuenta
b2_account_key: clavecuenta
Respaldos
Un respaldo especifica un directorio o archivo que debe ser respaldado. Un respaldo se escribe en un repositorio definido en restic_repos
.
Variables disponibles:
Nombre | Requerido (Predeterminado) | Descripción |
---|---|---|
name |
sí | El nombre de este respaldo. Usado junto con la poda y la programación y necesita ser único. |
repo |
sí | El nombre del repositorio al que respaldar. |
src |
sí (a menos que stdin == true ) |
El directorio o archivo fuente |
stdin |
no | ¿Este respaldo se crea desde un stdin? |
stdin_cmd |
no (sí si stdin == true ) |
El comando para producir el stdin. |
stdin_filename |
no | El nombre de archivo utilizado en el repositorio. |
pre_backup_cmd |
no | Un comando a ejecutar antes del respaldo, típicamente usado para volcar bases de datos al disco |
tags |
no | Matriz de etiquetas predeterminadas |
keep_last |
no | Si se establece, solo mantiene los últimos n snapshots. |
keep_hourly |
no | Si se establece, solo mantiene los últimos n snapshots horarios. |
keep_daily |
no | Si se establece, solo mantiene los últimos n snapshots diarios. |
keep_weekly |
no | Si se establece, solo mantiene los últimos n snapshots semanales. |
keep_monthly |
no | Si se establece, solo mantiene los últimos n snapshots mensuales. |
keep_yearly |
no | Si se establece, solo mantiene los últimos n snapshots anuales. |
keep_within |
no | Si se establece, solo mantiene snapshots en este período de tiempo. |
keep_tag |
no | Si se establece, mantener snapshots con estas etiquetas. Asegúrate de especificar una lista. |
prune |
no (false ) |
Si true , el comando restic forget en el script tiene la opción --prune añadida. |
scheduled |
no (false ) |
Si restic_create_schedule está establecido como true , este respaldo está programado y trata de crear una unidad de temporizador de systemd. Si falla, crea un cronjob. |
schedule_oncalendar |
'*-* * * 02:00:00' |
El tiempo para el temporizador de systemd. Por favor, nota la opción randomDelaySec. Por defecto, el respaldo se realiza cada noche a las 2 am (+0-4h). Pero solo si está programado como verdadero. |
schedule_minute |
no (* ) |
Minuto cuando se ejecuta el trabajo. (0-59, *, */2, etc) |
schedule_hour |
no (2 ) |
Hora cuando se ejecuta el trabajo. (0-23, *, */2, etc) |
schedule_weekday |
no (* ) |
Día de la semana cuando se ejecuta el trabajo. (0-6 para Domingo-Sábado, *, etc) |
schedule_month |
no (* ) |
Mes cuando se ejecuta el trabajo. (1-12, *, */2, etc) |
exclude |
no ({} ) |
Te permite especificar archivos a excluir. Ver Excluir para referencia. |
disable_logging |
no | Ocasionalmente deshabilitar registro |
log_to_journald |
no | Ocasionalmente cambiar el registro a journald con el nombre del trabajo de respaldo como etiqueta |
mail_on_error |
no | Ocasionalmente enviar un correo si el trabajo de respaldo falla (mailx es requerido) |
mail_address |
si mail_on_error es verdadero |
La dirección de correo para recibir correos si habilitaste mail_on_error . |
monitoring_call |
no | Un comando que se llamará si el respaldo es exitoso. Útil para sistemas de monitoreo de heartbeat que advierten cuando no se recibe ningún heartbeat. Usa el comando completo que necesitas ejecutar. Ejemplo: curl https://monitoring.example.com/api/push/E9Wzm4lJ2O?status=up&msg=OK&ping= |
niceness |
no | Si se establece, ejecuta cualquier respaldo programado con el valor de niceness. En Linux, -20 es la prioridad más alta, 0 la predeterminada y 19 la más baja. 10 es una prioridad baja común asignada a las rutinas de respaldo en sistemas de producción. |
Ejemplo:
restic_backups:
data:
name: data
repo: remote
src: /ruta/a/datos
scheduled: true
schedule_oncalendar: '*-* * 01:00:00'
database:
name: database
repo: remote
stdin: true
stdin_cmd: pg_dump -Ubackup nombre_base_datos
stdin_filename: volcado_nombre_base_datos.sql
scheduled: true
schedule_oncalendar: '*-* * 01:30:00'
niceness: 10
all_databases:
name: all_databases
repo: remote
src: /var/dumped_data
scheduled: true
schedule_oncalendar: '*-* * 02:00:00'
pre_backup_cmd: cd /var/dumped_data && mariadb -N -e 'show databases' | while read dbname; do mariadb-dump --complete-insert --routines --triggers --single-transaction "$dbname" > "$dbname".sql; done
También puedes especificar restic_backups como un arreglo, que es una característica heredada y podría ser deprecada en el futuro. Actualmente, la clave name se usa para nombrar el acceso y los archivos de respaldo.
Excluir
La clave exclude
en un respaldo te permite especificar múltiples archivos a excluir o buscar archivos para ser excluidos. Puedes especificar las siguientes claves:
exclude:
exclude_caches: true
exclude:
- /ruta/a/archivo
iexclude:
- /ruta/a/archivo
exclude_file:
- /ruta/a/archivo
exclude_if_present:
- /ruta/a/archivo
Por favor, consulta el uso de las claves específicas en la documentación.
Dependencias
Este rol no tiene otros roles de ansible como dependencias.
Ejemplo de Playbook
- name: respaldar tus carpetas personales a /mnt/backup cada noche
hosts: localhost
roles:
- {role: do1jlr.restic, tags: restic}
vars:
restic_create_schedule: true
restic_repos:
local:
location: '/mnt/backup'
password: 'ChangM3'
init: true
restic_backups:
home:
name: home
repo: local
src: /home/
scheduled: true
schedule_oncalendar: '*-* * 01:00:00'
Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para el texto completo de la licencia.
ansible-galaxy install l3d.restic