giner.barman
Rôle Ansible : Barman
Installe et configure Barman sur Linux avec des options :
- sauvegarde régulière (exécutée par cron)
- téléchargement des wals et snapshots vers S3 (exécuté par cron)
- collecte de métriques (par telegraf)
Ce rôle vise à être aussi neutre que possible, c'est-à-dire que tous les paramètres de configuration sont passés directement aux configurations de Barman.
Exigences
- Ubuntu
Installation
Installez via Ansible Galaxy :
ansible-galaxy collection install giner.barman
Ou incluez ce rôle dans votre fichier requirements.yml
:
roles:
- name: giner.barman
Variables du Rôle
Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir defaults/main.yml
) :
État demandé pour Barman. Remplacez par absent
pour désinstaller Barman. Les données ne seront pas supprimées.
barman_state: started
État demandé pour le paquet Barman. Remplacez par latest
pour mettre à jour Barman.
barman_package_state: present
Remplacements de la configuration globale de Barman (clé/valeur).
barman_config: {}
Serveurs PostgreSQL à sauvegarder.
barman_pg_servers: [] # Les clés sont : name, params, pgpass et cron. Voir un exemple ci-dessous.
Configurer telegraf pour collecter les métriques de Barman.
barman_telegraf_enabled: false
Intervalle de collecte des métriques.
barman_telegraf_interval: 1m
Dépendances
Aucune.
Exemple de Playbook
# Configurer les utilisateurs et leurs privilèges sur le serveur de base de données PostgreSQL
# http://docs.pgbarman.org/release/2.12/#postgresql-connection
- hosts: postgresqls
vars:
barman_user: barman
barman_pass: BARMANPASS_CHANGEZ_MOI
barman_streaming_user: streaming_barman
barman_streaming_pass: STREAMINGPASS_CHANGEZ_MOI
tasks:
- name: Ajouter l'utilisateur PostgreSQL barman_user
community.postgresql.postgresql_user:
user: "{{ barman_user }}"
password: "{{ barman_pass }}"
role_attr_flags: replication
groups: [pg_read_all_settings, pg_read_all_stats]
- name: Ajouter l'utilisateur PostgreSQL barman_streaming_user
community.postgresql.postgresql_user:
user: "{{ barman_streaming_user }}"
password: "{{ barman_streaming_pass }}"
role_attr_flags: replication
- name: ACCORDER DES PRÉROGATIVES D'EXÉCUTION SUR LA FONCTION pg_XXX À barman_user
community.postgresql.postgresql_privs:
db: postgres
privs: EXECUTE
type: function
obj: pg_start_backup(text:boolean:boolean),pg_stop_backup(),pg_stop_backup(boolean:boolean),pg_switch_wal(),pg_create_restore_point(text)
schema: pg_catalog
roles: "{{ barman_user }}"
# Configurer et installer Barman
- hosts: barmans
vars:
barman_name: mypgserver
barman_pg_hosts: 10.10.10.10
barman_pg_ports: 5432
barman_user: barman
barman_pass: BARMANPASS_CHANGEZ_MOI
barman_streaming_user: streaming_barman
barman_streaming_pass: STREAMINGPASS_CHANGEZ_MOI
barman_pg_servers:
- name: "{{ barman_name }}"
params:
- description: "Base de données PostgreSQL (Streaming-Uniquement)"
- conninfo: 'host={{ barman_pg_hosts }} port={{ barman_pg_ports }} user={{ barman_user }} dbname=postgres'
- streaming_conninfo: 'host={{ barman_pg_hosts }} port={{ barman_pg_ports }} user={{ barman_streaming_user }}'
- backup_method: "postgres"
- streaming_archiver: "on"
- slot_name: "barman"
- create_slot: "auto"
- retention_policy: "fenêtre de récupération de 31 jours"
pgpass:
- "*:*:postgres:{{ barman_user }}:{{ barman_pass }}"
- "*:*:replication:{{ barman_streaming_user }}:{{ barman_streaming_pass }}"
backup_schedule:
cron:
hour: 21
minute: 5
s3_sync:
src: "{{ barman_config['barman_home'] | default('/var/lib/barman') }}/{{ barman_name }}"
dst: "s3://db-backup"
base_cron:
hour: 22
minute: 5
wals_cron:
minute: 10
custom:
job: "barman delete '{{ barman_name }}' oldest"
cron:
hour: 23
minute: 15
roles:
- giner.barman
Développement
Installez les dépendances de test :
python3 -m pip install ansible -Ur requirements-molecule.txt
Exécutez tous les tests (requiert l'installation de docker) :
molecule test --all
Licence
Apache 2.0
Auteurs
Ce rôle a été créé en 2021 par Stanislav German-Evtushenko
Install and configure Barman on Linux with optional: metrics collection (telegraf), regular snapshots (cron) and uploading to S3 (cron)
ansible-galaxy install giner.barman