Files
PostgreSQL-Ansible/roles/pgbackrest/tasks/main.yml
2026-01-29 14:27:03 +01:00

93 lines
2.6 KiB
YAML

---
# Instalacja i konfiguracja pgBackRest
# Full backup: niedziela 2:00
# Incremental backup: codziennie 2:00 (oprócz niedzieli)
# Repozytorium backupu na pg2 (replica)
# --- Auto-detect PostgreSQL version ---
- name: Detect PostgreSQL version
shell: "ls -d /etc/postgresql/*/ | head -1 | xargs basename"
register: pg_version_detect
changed_when: false
- name: Set PostgreSQL variables from detection
set_fact:
pg_version: "{{ pg_version_detect.stdout | trim }}"
pg_cluster: "main"
pg_data: "/var/lib/postgresql/{{ pg_version_detect.stdout | trim }}/main"
pg_bin_path: "/usr/lib/postgresql/{{ pg_version_detect.stdout | trim }}/bin"
- name: Install pgBackRest and dependencies
apt:
name:
- pgbackrest
state: present
update_cache: yes
# --- Repozytorium backupu na replica ---
- name: Create backup repository directory (on replica)
file:
path: /pgbackrest
state: directory
owner: postgres
group: postgres
mode: "0750"
when: inventory_hostname in groups['replica']
# --- Konfiguracja pgBackRest ---
- name: Deploy pgBackRest configuration
template:
src: pgbackrest.conf.j2
dest: /etc/pgbackrest.conf
owner: postgres
group: postgres
mode: "0640"
# --- Utworzenie stanza na primary ---
- name: Create pgBackRest stanza (on primary)
shell: pgbackrest --stanza=main stanza-create
become: true
become_user: postgres
when: inventory_hostname in groups['primary']
register: stanza_create
changed_when: "'CREATED' in stanza_create.stdout or 'already exists' not in stanza_create.stdout"
ignore_errors: true
# --- Full backup - niedziela 2:00 ---
- name: Schedule full backup weekly (Sunday 2:00 AM)
cron:
name: "pgBackRest full backup"
weekday: "0"
hour: "2"
minute: "0"
user: postgres
job: "pgbackrest --stanza=main backup --type=full"
state: present
when: inventory_hostname in groups['primary']
# --- Incremental backup - codziennie 2:00 (ale nie w niedzielę) ---
- name: Schedule incremental backup daily (Monday-Saturday 2:00 AM)
cron:
name: "pgBackRest incremental backup"
weekday: "1-6"
hour: "2"
minute: "0"
user: postgres
job: "pgbackrest --stanza=main backup --type=incr"
state: present
when: inventory_hostname in groups['primary']
# --- Test configuration ---
- name: Test pgBackRest configuration (on primary)
shell: pgbackrest --stanza=main check
become: true
become_user: postgres
when: inventory_hostname in groups['primary']
register: pgbackrest_check
ignore_errors: true
- name: Display pgBackRest check result
debug:
msg: "{{ pgbackrest_check.stdout }}"
when: inventory_hostname in groups['primary']