--- # Sigvild Gallery Data Restoration Tasks - name: Check for existing data backup files local_action: module: find paths: "{{ sigvild_gallery_backup_local_path }}" patterns: "sigvild-gallery-backup-*.tar.gz" register: backup_files become: false - name: Display backup search results debug: msg: - "Searching for backups in: {{ sigvild_gallery_backup_local_path }}" - "Found {{ backup_files.files | length }} backup file(s)" - name: Display found backup files debug: msg: "Found backup: {{ item.path }} ({{ (item.size / 1024 / 1024) | round(2) }}MB, {{ '%Y-%m-%d %H:%M:%S' | strftime(item.mtime | int) }})" loop: "{{ backup_files.files | sort(attribute='mtime') }}" when: backup_files.files | length > 0 - name: Check if data directory already exists with data stat: path: "{{ sigvild_gallery_data_dir }}/data.db" register: existing_data - name: Warn about existing data debug: msg: "⚠️ WARNING: Existing data found at {{ sigvild_gallery_data_dir }}/data.db - restoration will overwrite it!" when: - existing_data.stat.exists - backup_files.files | length > 0 - name: Skip restore due to existing data debug: msg: - "🛡️ SAFETY: Restore skipped to protect existing data" - "Remove {{ sigvild_gallery_data_dir }}/data.db manually to enable restore" when: - existing_data.stat.exists - backup_files.files | length > 0 - name: Restore from latest backup block: - name: Get latest backup file set_fact: latest_backup: "{{ (backup_files.files | sort(attribute='mtime') | last).path }}" - name: Display restoration info debug: msg: - "Restoring from latest backup: {{ latest_backup | basename }}" - "Target directory: {{ sigvild_gallery_data_dir }}" - name: Check if sigvild-gallery service exists stat: path: /etc/systemd/system/sigvild-gallery.service register: sigvild_service_file - name: Stop sigvild-gallery service before restoration systemd: name: sigvild-gallery state: stopped register: service_stopped_for_restore when: sigvild_service_file.stat.exists ignore_errors: true - name: Display service stop status debug: msg: "{{ 'Service stopped for restoration' if sigvild_service_file.stat.exists else 'Service does not exist yet - skipping stop' }}" - name: Upload backup to remote server copy: src: "{{ latest_backup }}" dest: "/tmp/restore-backup.tar.gz" owner: root group: root mode: '0644' - name: Verify uploaded backup integrity command: tar -tzf /tmp/restore-backup.tar.gz register: restore_contents changed_when: false failed_when: "'data.db' not in restore_contents.stdout" - name: Remove existing data directory if it exists file: path: "{{ sigvild_gallery_data_dir }}" state: absent when: existing_data.stat.exists - name: Ensure parent directory exists file: path: "{{ sigvild_gallery_home }}" state: directory owner: "{{ sigvild_gallery_user }}" group: "{{ sigvild_gallery_user }}" mode: '0755' - name: Extract backup to target location unarchive: src: "/tmp/restore-backup.tar.gz" dest: "{{ sigvild_gallery_home }}" remote_src: true owner: "{{ sigvild_gallery_user }}" group: "{{ sigvild_gallery_user }}" - name: Verify restoration stat: path: "{{ sigvild_gallery_data_dir }}/data.db" register: restored_data - name: Fail if restoration unsuccessful fail: msg: "Restoration failed - data.db not found after extraction" when: not restored_data.stat.exists - name: Get restored data size command: du -sh {{ sigvild_gallery_data_dir }} register: restored_size changed_when: false - name: Clean up uploaded backup file file: path: "/tmp/restore-backup.tar.gz" state: absent - name: Display restoration success debug: msg: - "✅ Data restoration completed successfully!" - "Restored from: {{ latest_backup | basename }}" - "Restored data size: {{ restored_size.stdout }}" - "Location: {{ sigvild_gallery_data_dir }}" when: - backup_files.files | length > 0 - not existing_data.stat.exists - name: No backup available message debug: msg: - "ℹ️ No backup files found - starting with fresh installation" - "Data directory will be created empty: {{ sigvild_gallery_data_dir }}" when: backup_files.files | length == 0