Ctrl K
ComunidadGuías…

ansible/upload_db.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
---
# 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"