Add backup restoration logic to NFS role

Passing the `backup_nfs_restore` variable will restore that timestamp.
This commit is contained in:
Ivo C.S. Wingelaar 2024-10-13 20:12:26 +02:00
parent 63c767f116
commit 3934bffbd1
Signed by: ivo
GPG key ID: ABBED434F58D0AA3
5 changed files with 49 additions and 4 deletions

View file

@ -1,3 +1,4 @@
--- ---
backup_nfs_directory: /podman-nfs-backups backup_nfs_create_directory: /podman-nfs-backups
backup_nfs_restore_directory: /podman-nfs-backups
backup_nfs_mountpoint: /opt/podman-nfs-backups backup_nfs_mountpoint: /opt/podman-nfs-backups

View file

@ -20,13 +20,23 @@
- name: This block ensures the NFS directory will be unmounted if a task fails - name: This block ensures the NFS directory will be unmounted if a task fails
block: block:
- name: Mount backup NFS directory - name: Mount backup NFS directory (for creating backups)
ansible.posix.mount: ansible.posix.mount:
src: "{{ backup_nfs_remote }}:{{ backup_nfs_directory }}" src: "{{ backup_nfs_remote }}:{{ backup_nfs_create_directory }}"
path: "{{ backup_nfs_mountpoint }}" path: "{{ backup_nfs_mountpoint }}"
opts: rw,sync,hard,vers=4 opts: rw,sync,hard,vers=4
state: ephemeral state: ephemeral
fstype: nfs fstype: nfs
when: backup_nfs_restore is undefined
- name: Mount backup NFS directory (for restoring backups)
ansible.posix.mount:
src: "{{ backup_nfs_remote }}:{{ backup_nfs_restore_directory }}"
path: "{{ backup_nfs_mountpoint }}"
opts: ro,sync,hard,vers=4
state: ephemeral
fstype: nfs
when: backup_nfs_restore is defined
- name: Execute backup tasks inside service account - name: Execute backup tasks inside service account
ansible.builtin.include_tasks: machinectl.yml ansible.builtin.include_tasks: machinectl.yml

View file

@ -0,0 +1,24 @@
---
- name: Ensure container is stopped
ansible.builtin.systemd_service:
name: container-{{ container }}.service
state: stopped
scope: user
register: container_state
- name: Import the volumes
containers.podman.podman_import:
volume: "{{ item }}"
src: "{{ backup_nfs_mountpoint }}/{{ container }}-{{ item }}-{{ backup_nfs_restore }}.tar"
loop: "{{ backup_nfs_containers['volumes'] }}"
# A container is not always running, so if it was stopped before
# the backup procedure even started, do not start it again.
# It's quite a hassle to have this behaviour with a handler, so
# we just suppress the linting error.
- name: Start container again if necessary # noqa: no-handler
ansible.builtin.systemd_service:
name: container-{{ container }}.service
state: started
scope: user
when: container_state is changed

View file

@ -1,8 +1,18 @@
--- ---
- name: Iterate over configured nginx sites - name: Iterate over configured nginx sites
ansible.builtin.include_tasks: per-container.yml ansible.builtin.include_tasks: per-container-create.yml
loop: "{{ backup_nfs_users['containers'] }}" loop: "{{ backup_nfs_users['containers'] }}"
loop_control: loop_control:
loop_var: backup_nfs_containers loop_var: backup_nfs_containers
vars: vars:
container: "{{ backup_nfs_containers['name'] }}" container: "{{ backup_nfs_containers['name'] }}"
when: backup_nfs_restore is undefined
- name: Iterate over configured nginx sites
ansible.builtin.include_tasks: per-container-restore.yml
loop: "{{ backup_nfs_users['containers'] }}"
loop_control:
loop_var: backup_nfs_containers
vars:
container: "{{ backup_nfs_containers['name'] }}"
when: backup_nfs_restore is defined