Created
August 9, 2023 10:42
-
-
Save temamagic/1b26837ed7a58e91f99949fc4bee66c8 to your computer and use it in GitHub Desktop.
Postgres dump & restore with Ansible
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- name: Create PostgreSQL database dumps | |
hosts: host-from | |
become: yes | |
vars: | |
database_names: | |
- DBNAME | |
tasks: | |
- name: Utility present | |
ansible.builtin.package: | |
name: python3-psycopg2 | |
state: present | |
- name: Create directory for database dumps | |
file: | |
path: /backup | |
state: directory | |
mode: '0777' | |
- name: Backup db | |
postgresql_db: | |
state: dump | |
name: "{{ item }}" | |
target: "/backup/{{ item }}.gz" | |
become: true | |
become_user: postgres | |
with_items: "{{ database_names }}" | |
register: dump_results | |
- name: Download dumps from server | |
hosts: host-from | |
tasks: | |
- name: Create local directory for database dumps | |
file: | |
path: ./db_dumps | |
state: directory | |
mode: '0755' | |
- name: Set fact for downloaded files | |
with_items: "{{ groups['all'] }}" | |
delegate_to: "{{ item }}" | |
delegate_facts: true | |
set_fact: | |
dumps_files: "{{ dump_results.results | map(attribute='item') | list }}" | |
- name: Download dumps from server | |
fetch: | |
src: "/backup/{{ item }}.gz" | |
dest: "./db_dumps/" | |
flat: yes | |
with_items: "{{ dumps_files }}" | |
# RESTORE | |
- name: Upload dump_files to spiral and restore | |
hosts: host-to | |
tasks: | |
- name: Create remote backup directory if it doesn't exist | |
become: true | |
file: | |
path: /backup | |
state: directory | |
mode: '0777' | |
ignore_errors: true | |
- name: Utility present | |
ansible.builtin.package: | |
name: python3-psycopg2 | |
state: present | |
- name: Copy dump_files to remote server | |
copy: | |
src: "./db_dumps/{{ item }}.gz" | |
dest: /backup/ | |
with_items: "{{ dumps_files }}" | |
- name: "Create the database if it doesn't exist" | |
postgresql_db: | |
name: "{{ item }}" | |
state: present | |
become: yes | |
become_user: postgres | |
with_items: "{{ dumps_files }}" | |
- name: "Restore the database" | |
postgresql_db: | |
state: restore | |
name: "{{ item }}" | |
target: "/backup/{{ item }}.gz" | |
become: yes | |
become_user: postgres | |
with_items: "{{ dumps_files }}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment