homelab/ansible/roles/restic_backup/tasks/main.yml

66 lines
2 KiB
YAML

---
- name: Ensure restic is installed
ansible.builtin.apt:
pkg:
- restic
become: true
- name: Write password file
ansible.builtin.copy:
dest: /root/restic_password
mode: "0700"
content: "{{ repo_password }}"
become: true
- name: See if already initialized
ansible.builtin.shell:
cmd: "restic -r '{{ restic_backup_repo_string }}' init --password-file /root/restic_password"
failed_when: false
become: true
- name: Register crontab entry
ansible.builtin.cron:
name: "{{ cron_file_name }}"
cron_file: "{{ cron_file_name }}"
state: present
job: "restic -r '{{ restic_backup_repo_string }}' backup {{ directories_to_backup | join(' ') }} --password-file /root/restic_password; restic -r '{{ restic_backup_repo_string }}' forget --keep-last 10 --password-file /root/restic_password"
minute: "0"
hour: "1"
user: root
become: true
- name: Set up mirroring this repo to remote backup
block:
- name: Ensure restic is installed
ansible.builtin.apt:
pkg:
- restic
- cron
become: true
- name: Write password to file
ansible.builtin.copy:
dest: /root/restic_password
mode: "0700"
content: "{{ repo_password }}"
become: true
- name: Initialize repo locally
ansible.builtin.shell:
cmd: "restic -r /mnt/backup/{{ repo_name }} init --password-file /root/restic_password"
failed_when: false
become: true
- name: Register cronjob for daily remote backup
ansible.builtin.cron:
name: "{{ cron_file_name }}"
cron_file: "{{ cron_file_name }}"
state: present
hour: "1"
minute: "30"
user: root
job: "restic -r /mnt/backup/{{ repo_name }} copy --from-repo '{{ restic_remote_backup_repo_string }}' --from-password-file /root/restic_password --password-file /root/restic_password; restic -r /mnt/backup/{{ repo_name }} forget --keep-last 10 --password-file /root/restic_password"
become: true
delegate_to: soteria