--- # 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"