postgresql/tasks/restore.yaml

89 lines
2.6 KiB
YAML

- name: Restore database
when: postgresql_wal_g_force_delete_and_restore
block:
- name: Stop PostgreSQL
systemd:
daemon_reload: true
name: "{{ postgresql_unit_name }}"
state: stopped
masked: no
- name: Force purge database directory
file:
path: "{{ postgresql_data_dir }}"
state: absent
- name: Recreate database directory
file:
path: "{{ postgresql_data_dir }}"
state: directory
become_user: postgres
- name: Check if d folder is empty before proceeding
find:
paths: "{{ postgresql_data_dir }}"
register: postgresql_files_found
- name: Restore database
when:
- postgresql_files_found.matched == 0
block:
- name: Restore database dir from backup
shell: "{{ postgresql_wal_g_binary_name ~ ' --config ' ~ postgresql_base_dir ~ '/' ~ postgresql_wal_g_restore_config_name ~ ' backup-fetch ' ~ postgresql_data_dir ~ ' ' ~ postgresql_wal_g_postgresql_pitr }}"
become_user: postgres
- name: Include PostgreSQL configuration
vars:
postgresql_restore_command: "{{ postgresql_wal_g_binary_name ~ ' --config ' ~ postgresql_base_dir ~ '/' ~ postgresql_wal_g_restore_config_name ~ ' wal-fetch %f %p' }}"
include_tasks: config.yaml
- name: Create recovery.signal file
file:
name: "{{ postgresql_data_dir }}/recovery.signal"
state: touch
become_user: postgres
- name: Create standby.signal file
file:
name: "{{ postgresql_data_dir }}/standby.signal"
state: touch
become_user: postgres
- name: Start PostgreSQL for recovery
systemd:
daemon_reload: true
name: "{{ postgresql_unit_name }}"
state: started
masked: no
register: postgresql_start_for_recovery
- name: Ping PostgreSQL server
vars:
ansible_python_interpreter: '/usr/bin/env python3'
community.postgresql.postgresql_ping:
db: "{{ postgresql_superuser_db }}"
login_user: "{{ postgresql_superuser_username }}"
login_password: "{{ postgresql_superuser_password }}"
register: postgresql_ping
until: postgresql_ping.is_available
retries: 60
delay: 20
- name: debug
debug:
msg: "{{ postgresql_ping }}"
- name: Stop PostgreSQL
systemd:
daemon_reload: true
name: "{{ postgresql_unit_name }}"
state: stopped
masked: no
register: postgresql_stop
- name: Create promote trigger file
file:
name: "{{ postgresql_promote_trigger_file }}"
state: touch
become_user: postgres