- Fix Unix timestamp conversion in restore.yml using proper strftime syntax - Add service existence check before stopping sigvild-gallery service - Fix systemd service template environment variable syntax error - Add proper error handling for fresh deployments where service doesn't exist yet Resolves service management failures during restoration on fresh VPS installations.
148 lines
4.6 KiB
YAML
148 lines
4.6 KiB
YAML
---
|
||
# 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
|