udelarinterior.backuppc_client

Rol de Ansible para BackupPC-Client

Este rol, backuppc_client, instala y configura ambos lados para los hosts clientes de un servidor BackupPC. Funciona con un rol de backuppc_server que configura el servidor (sin embargo, mientras la configuración sea estándar y Ansible tenga acceso, puede manejar cualquier instalación de servidor BackupPC).

Funciona en Debian Buster (10) y Stretch (9) para configuraciones avanzadas (respaldo de bases de datos), pero para la configuración básica de dumps de backupPC, puede manejar Ubuntu o cualquier otro sistema basado en Debian (se aceptan PR).

Este rol y su par backuppc_server se basan en el rol de hanxhx/backuppc.

Descripción

Este rol configura los backups de los hosts en un servidor BackupPC. Puede realizar las siguientes acciones:

  • Configurar un usuario de linux en el cliente y una configuración de respaldo en el servidor BackupPC, que accede al cliente con este usuario.
  • Opcionalmente, subir al cliente scripts de pre_dump y post_dump con eventuales derechos de sudo, que se ejecutan respectivamente antes y después de que BackupPC haga los dumps de archivos. Estos scripts ejecutan comandos necesarios para tener backups coherentes, como dumps de bases de datos, snapshots, etc.
  • Opcionalmente, configurar un usuario de mysql con derechos de SELECT en todas las bases para realizar un dump antes del backup.
  • Opcionalmente, configurar un script que realizará el dump de una base de datos postgresql identificada.

Requisitos

Necesitarás tener un servidor BackupPC en funcionamiento gestionado en tu inventario de Ansible, cuyo nombre se definirá en la variable backuppc_server_name.

En este momento, este rol solo gestiona backups a través del método rsync (+ ssh).

Compatibilidad hacia atrás

Para asegurar una adopción suave y progresiva de esta versión del rol en todos los hosts que la utilizan en un entorno en la nube, el rol es compatible hacia atrás con la API de variables del rol v1.X.0, incluyendo sus valores predeterminados. Consulta los archivos defaults/main.yml y tasks/compatibility.yml, especialmente los comentarios, para tener en cuenta las variables heredadas.

La compatibilidad hacia atrás del rol se eliminará en la próxima versión mayor, ¡así que adapta las variables de tus hosts lo antes posible!

Variables del Rol

Cada configuración de cliente anula la configuración global en el servidor. Consulta defaults/main.yml para los valores o definiciones predeterminadas de las variables. A continuación se enumeran las variables que se pueden definir.

Acceso del cliente

  • backuppc_client_user: usuario unix para que el servidor se conecte al cliente (predeterminado backuppc)
  • backuppc_client_group: grupo unix del usuario unix definido en la línea anterior (predeterminado backuppc)
  • backuppc_client_home: directorio home del usuario backuppc_client_user que realiza backups en el cliente

Configuración del servidor

  • backuppc_server_name: nombre de dominio del servidor BackupPC que realiza el backup y desde donde se obtiene la clave ssh para configurarla en el cliente
  • backuppc_server_user: usuario unix que ejecuta BackupPC en el servidor. Predeterminado a backuppc.
  • backuppc_server_group: grupo unix que ejecuta BackupPC en el servidor. Predeterminado a www-data.
  • backuppc_server_home: directorio home del usuario unix de BackupPC en el servidor. Predeterminado a /var/lib/backuppc.
  • backuppc_server_config_dir: directorio de archivos de configuración del paquete BackupPC. Predeterminado a /etc/backuppc.

Configuración del backup del cliente en el servidor

A continuación se describen brevemente las variables del rol que definen la configuración de BackupPC del cliente en el servidor. Para una documentación completa, consulta la documentación de BackupPC.

Las siguientes banderas definen si el cliente y el servidor son configurados por el rol:

  • backuppc_backup_state: ausente o presente (predeterminado: presente). Si está presente, configura los backups del cliente en el servidor; de lo contrario, elimina la configuración.
  • backuppc_client: si se establece en false (valor predeterminado true), no hay acceso ssh ni otra configuración en el host cliente, solo se configura el servidor para hacer backup del host.

El archivo de configuración del cliente en el servidor BackupPC se construye con las siguientes variables:

  • backuppc_rsync_share_names: lista de puntos de árbol de carpetas en el cliente a respaldar. Por ejemplo:
backuppc_rsync_share_names:
- /etc
- /root
- /var
- /usr/local

Con el método rsync, BackupPC realizará un comando rsync para cada elemento de esta lista.

  • backuppc_include_files:: lista de carpetas para incluir en el backup del cliente (la opción --include de rsync se construirá con esta variable)
  • backuppc_exclude_files:: lista de carpetas para excluir del backup del cliente (la opción --exclude de rsync se construirá con esta variable)
  • backuppc_xfermethod: Método de transferencia opcional (rsync como predeterminado)
  • backuppc_more: Hash opcional con clave/valor específicos (útil para directivas personalizadas, como la programación de backups y conservación). Consulta el ejemplo en el archivo defaults/main.yml.

Las siguientes variables permiten definir la ejecución de los scripts de dumps de archivos pre y post por BackupPC:

  • backuppc_pre_dump_script: ruta del archivo del script de pre dump, que BackupPC ejecutará antes de hacer el dump de archivos durante un backup. Su valor predeterminado es '{{ backuppc_client_home }}/scripts/pre_dump.sh'
  • backuppc_post_dump_script: ruta del archivo del script de post dump, que BackupPC ejecutará después de hacer el dump de archivos durante un backup. Su valor predeterminado es '{{ backuppc_client_home }}/scripts/post_dump.sh'
  • backuppc_scripts_local_dir: ruta en el controlador local de Ansible donde el playbook encontrará los dos scripts anteriores para instalarlos en el cliente. Su valor predeterminado es '{{ playbook_dir }}/host_vars/{{ inventory_hostname }}/files/backuppc/'. Por lo tanto, en la estructura de directorios de tu playbook, deberás colocar los scripts de pre y post dump, en archivos con los mismos nombres base que sus respectivas rutas aquí mencionadas, en una carpeta llamada files/backuppc, junto a la carpeta vars del host que estás configurando:
 host_vars
 └── <tu_host>
    ├── files
    │   └── backuppc
    │       ├── post_dump.sh
    │       └── pre_dump.sh
    └── vars
        ├── 10_kvm_virtual.yml
        └── 20_backuppc.yml
  • backuppc_scripts: bandera de scripts verdadero/falso. Si es verdadera, instala los scripts de pre y post dump descritos anteriormente. Esta bandera está en desuso. Se conserva por compatibilidad hacia atrás, pero en la próxima versión mayor, se eliminará y los scripts se instalarán cuando su ruta esté definida.

  • backuppc_scripts_sudo: bandera verdadera/falsa para otorgar derechos de acceso sudo a los scripts de pre y post dump.

  • backuppc_DumpPreUserCmd y backuppc_DumpPostUserCmd: comandos ssh para que backuppc ejecute los scripts de pre_dump y post_dump. Estas variables están predefinidas de acuerdo con las banderas anteriores, pero pueden ser sobrescritas.

  • backuppc_sudoer: comandos autorizados con sudo para el usuario backuppc_client_user. Es una cadena que puede ser sobrescrita, siempre que comience con Cmnd_Alias BACKUPS =, seguida de la lista de comandos de shell que el usuario necesita ejecutar para realizar un backup. Como se ha predefinido, esta variable incluye rsync, y eventualmente los scripts de pre y post dump, de acuerdo con las banderas anteriores.

Las siguientes variables proporcionan herramientas para definir, utilizando los scripts descritos anteriormente, el dump de bases de datos para la coherencia de los backups:

  • backuppc_db_server_type: variable de tres estados que define un eventual dump de mysql o pgsql antes de los backups. Los tres posibles valores son: pgsql, mysql o null. El comportamiento de los scripts y los backups de db son diferentes para mysql y pgsql. Particularmente, para MySQL debes agregar tú mismo los scripts pre_dump.sh y post_dump.sh que hacen el trabajo de dumping de bases de datos, mientras que para PostgreSQL estos scripts se construyen a partir de plantillas (y solo realizan el dump de una base de datos). Para PostgreSQL, los derechos sobre la base de datos deben definirse previamente, mientras que, por el contrario, la tarea de MySQL asigna derechos de acceso a la base de datos a un usuario dado.
  • Para PostgreSQL, las variables son:
    • backuppc_db_to_dump_name define la base de datos pgsql a respaldar,
    • backuppc_db_dump_user define el usuario pgsql para acceder a la base de datos,
    • backuppc_db_dump_user_pass es la contraseña de los usuarios anteriores. La configuración de contraseñas y privilegios de este usuario en la base de datos debe hacerse en otra parte del playbook.
  • Para Mysql, las variables son:
    • backuppc_db_server_root_pass debe establecerse en el valor apropiado si el usuario root de mysql tiene una contraseña definida. Por defecto, la variable está indefinida. Cabe mencionar que, en instalaciones recientes de mysql/mariadb, al menos en Debian, la instalación de mysql no pregunta y no genera aleatoriamente una contraseña para el root. El mantenimiento en Debian ya no se realiza con un usuario y contraseña específicos, sino con el usuario root a través de un socket unix y no un socket autenticado por tcp. Si la variable permanece indefinida, las tareas de mysql se realizarán utilizando la configuración de mantenimiento de Debian.
    • backuppc_db_dump_user y backuppc_db_dump_user_pass son el nombre del usuario mysql y la contraseña correspondiente, que se le dará acceso de SELECT a todas las bases y se configurará como predeterminado en el archivo .my.cnf en el directorio home del usuario unix backuppc_client_user. Por lo tanto, los scripts pre_dump.sh o post_dump.sh podrán realizar cualquier dump de base de datos llamando a un simple comando mysql.

Las siguientes variables configuran el acceso web para los backups del host cliente en la interfaz web de BackupPC:

  • backuppc_server_web_main_user: usuario principal con acceso a los backups del host cliente a través de la interfaz web de BackupPC. Predeterminado a backuppc.
  • backuppc_server_web_other_users: Otros usuarios con acceso a los backups del host cliente a través de la interfaz web de BackupPC debían definirse como una cadena que enumera los usuarios separados por comas: "usuario1,usuario2". El acceso de los usuarios debe configurarse en el servidor BackupPC.

Ejemplos de script de Mysql

Para un backup de Mysql, para hacer un dump de todas las bases de datos antes del dump de archivos, puedes usar los siguientes scripts, que aprovecharán el usuario de backuppc configurado por el rol:

  • pre_dump.sh
#!/bin/bash
for DataB in `mysql -e "show databases" | grep -v Database`; do mysqldump --single-transaction $DataB > "$DataB.sql"; done
tar -czvf dump.sql.tar.gz *.sql
rm *.sql
  • post_dump.sh
#!/bin/bash
rm dump.sql.tar.gz

Ejemplo de Playbook

Consideramos que tenemos una instancia estándar de BackupPC ejecutándose en bck-server.domain.org gestionada a través del inventario de Ansible. El siguiente playbook configura en este servidor el backup de las carpetas especificadas del host client.domain.org, con el acceso ssh necesario.

- name: Backup del host client.domain.org
  hosts: client.domain.org
  become: true
  vars: 
  - backuppc_server_name: bck-server.domain.org
  - backuppc_rsync_share_names:
    - /etc
    - /var
    - /opt

  roles: 
  - role: udelarinterior.backuppc_client

Licencia

GPLv3

Información del Autor

Rol original Emilien M mejorado por Víctor Torterola y Daniel Viñar

Instalar
ansible-galaxy install udelarinterior.backuppc_client
Licencia
Unknown
Descargas
72
Propietario
Red Unidades Informáticas de la UdelaR en el Interior