94 lines
2.6 KiB
YAML
94 lines
2.6 KiB
YAML
---
|
|
- name: Borg Backup Installation and Configuration
|
|
block:
|
|
- name: Check if Borg is already installed
|
|
ansible.builtin.command: which borg
|
|
register: borg_check
|
|
ignore_errors: true
|
|
changed_when: false
|
|
|
|
- name: Ensure Borg is installed
|
|
ansible.builtin.package:
|
|
name: borg
|
|
state: present
|
|
become: true
|
|
when: borg_check.rc != 0
|
|
|
|
- name: Set Borg backup facts
|
|
ansible.builtin.set_fact:
|
|
borg_passphrase: "{{ lookup('community.general.onepassword', 'Borg Backup', vault='Dotfiles', field='password') }}"
|
|
borg_config_dir: "{{ ansible_env.HOME }}/.config/borg"
|
|
borg_backup_dir: "/mnt/services"
|
|
borg_repo_dir: "/mnt/object_storage/borg-repo"
|
|
|
|
- name: Create Borg directories
|
|
ansible.builtin.file:
|
|
path: "{{ borg_dir }}"
|
|
state: directory
|
|
mode: "0755"
|
|
loop:
|
|
- "{{ borg_config_dir }}"
|
|
- "/mnt/object_storage"
|
|
loop_control:
|
|
loop_var: borg_dir
|
|
become: true
|
|
|
|
- name: Check if Borg repository exists
|
|
ansible.builtin.stat:
|
|
path: "{{ borg_repo_dir }}/config"
|
|
register: borg_repo_check
|
|
become: true
|
|
|
|
- name: Initialize Borg repository
|
|
ansible.builtin.command: >
|
|
borg init --encryption=repokey {{ borg_repo_dir }}
|
|
environment:
|
|
BORG_PASSPHRASE: "{{ borg_passphrase }}"
|
|
become: true
|
|
when: not borg_repo_check.stat.exists
|
|
|
|
- name: Create Borg backup script
|
|
ansible.builtin.template:
|
|
src: templates/borg-backup.sh.j2
|
|
dest: "{{ borg_config_dir }}/backup.sh"
|
|
mode: "0755"
|
|
become: true
|
|
|
|
- name: Create Borg systemd service
|
|
ansible.builtin.template:
|
|
src: templates/borg-backup.service.j2
|
|
dest: /etc/systemd/system/borg-backup.service
|
|
mode: "0644"
|
|
become: true
|
|
register: borg_service
|
|
|
|
- name: Create Borg systemd timer
|
|
ansible.builtin.template:
|
|
src: templates/borg-backup.timer.j2
|
|
dest: /etc/systemd/system/borg-backup.timer
|
|
mode: "0644"
|
|
become: true
|
|
register: borg_timer
|
|
|
|
- name: Reload systemd daemon
|
|
ansible.builtin.systemd:
|
|
daemon_reload: true
|
|
become: true
|
|
when: borg_service.changed or borg_timer.changed
|
|
|
|
- name: Enable and start Borg backup timer
|
|
ansible.builtin.systemd:
|
|
name: borg-backup.timer
|
|
enabled: true
|
|
state: started
|
|
become: true
|
|
|
|
- name: Display Borg backup status
|
|
ansible.builtin.debug:
|
|
msg: "Borg backup is configured and will run daily at 2 AM. Logs available at /var/log/borg-backup.log"
|
|
|
|
tags:
|
|
- borg-backup
|
|
- borg
|
|
- backup
|