93 lines
2.6 KiB
YAML
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']
|