Skip to content

Instantly share code, notes, and snippets.

@temamagic
Created August 9, 2023 10:42
Show Gist options
  • Save temamagic/1b26837ed7a58e91f99949fc4bee66c8 to your computer and use it in GitHub Desktop.
Save temamagic/1b26837ed7a58e91f99949fc4bee66c8 to your computer and use it in GitHub Desktop.
Postgres dump & restore with Ansible
---
- 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