ansible/upload_db.yml
Rama main · réplica de lectura del repositorio original.
---
# myNextScreen — Upload Database Restore
# Usage: ansible-playbook -i hosts.ini upload_db.yml -K
#
# Restores a local PostgreSQL dump (pg_dump custom format) to the server,
# replacing the existing database. The backend is stopped during the restore.
#
# Place the dump file at: ansible/mynextscreen.dump
- name: Upload database to server
hosts: servers
become: true
vars:
service_user: mynextscreen
service_user_home: "/home/{{ service_user }}"
local_dump: "{{ playbook_dir }}/mynextscreen.dump"
remote_dump: "/tmp/mynextscreen_restore.dump"
tasks:
- name: Check if local dump file exists
ansible.builtin.stat:
path: "{{ local_dump }}"
delegate_to: localhost
become: false
register: local_dump_file
- name: Fail if local dump file is missing
ansible.builtin.fail:
msg: "Local dump not found at {{ local_dump }}. Place the dump file at ansible/mynextscreen.dump"
when: not local_dump_file.stat.exists
- name: Get service user UID
ansible.builtin.command:
cmd: id -u {{ service_user }}
register: uid_result
changed_when: false
- name: Set service user UID fact
ansible.builtin.set_fact:
service_user_uid: "{{ uid_result.stdout }}"
- name: Stop backend service
ansible.builtin.command:
cmd: systemctl --user stop mynextscreen-backend
become: true
become_user: "{{ service_user }}"
environment:
XDG_RUNTIME_DIR: "/run/user/{{ service_user_uid }}"
DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ service_user_uid }}/bus"
- name: Upload dump to server
ansible.builtin.copy:
src: "{{ local_dump }}"
dest: "{{ remote_dump }}"
owner: "{{ service_user }}"
group: "{{ service_user }}"
mode: "0644"
- name: Drop and recreate the database (clean restore)
ansible.builtin.shell: >-
podman exec mynextscreen-postgres psql -U mynextscreen -d postgres -c
"DROP DATABASE IF EXISTS mynextscreen WITH (FORCE); CREATE DATABASE mynextscreen;"
args:
executable: /bin/bash
changed_when: true
- name: Restore dump (pg_restore)
ansible.builtin.shell: >-
podman exec -i mynextscreen-postgres pg_restore -U mynextscreen -d mynextscreen --no-owner < "{{ remote_dump }}"
args:
executable: /bin/bash
changed_when: true
- name: Remove remote temp dump
ansible.builtin.file:
path: "{{ remote_dump }}"
state: absent
- name: Start backend service
ansible.builtin.command:
cmd: systemctl --user start mynextscreen-backend
become: true
become_user: "{{ service_user }}"
environment:
XDG_RUNTIME_DIR: "/run/user/{{ service_user_uid }}"
DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ service_user_uid }}/bus"
- name: Report success
ansible.builtin.debug:
msg: "Database restored from {{ local_dump }} and backend service restarted"