--- # 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']