From 72240e138255eec14400d787982ff177c53af6db Mon Sep 17 00:00:00 2001 From: Pim Kunis Date: Tue, 11 Apr 2023 22:10:57 +0200 Subject: [PATCH] add backup service --- inventory/group_vars/all.yml | 2 +- roles/borg/files/backup.timer | 10 ++++++++++ roles/borg/tasks/main.yml | 25 +++++++++++++++++++++++++ roles/borg/templates/backup.service.j2 | 6 ++++++ roles/borg/templates/backup.yml.j2 | 14 ++++++++++++++ roles/system/tasks/main.yml | 2 +- 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 roles/borg/files/backup.timer create mode 100644 roles/borg/templates/backup.service.j2 create mode 100644 roles/borg/templates/backup.yml.j2 diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml index 00f2a00..bcceb9d 100644 --- a/inventory/group_vars/all.yml +++ b/inventory/group_vars/all.yml @@ -3,7 +3,7 @@ dataserver_public_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJsLVptkoOwmxs6DnenN user_public_key: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBRBrKmIKP5BFhLSdntatIgSC0R/D9EEZlak5Yt0DfUe root@lewis" kingston1tb_mount_point: "/mnt/kingston1TB" kingston1tb_uuid: "622a8d81-aa2f-460b-a563-c3cdb6285609" -backup_location: "{{ kingston1tb_mount_point }}/homeserver_backup" +backup_location: "{{ kingston1tb_mount_point }}/atlas_backup" admin_public_keys: - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINUZp4BCxf7uLa1QWonx/Crf8tYZ5MKIZ+EuaBa82LrV user@user-laptop" diff --git a/roles/borg/files/backup.timer b/roles/borg/files/backup.timer new file mode 100644 index 0000000..1f345f7 --- /dev/null +++ b/roles/borg/files/backup.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Backup data daily + +[Timer] +OnCalendar=*-*-* 3:00:00 +Persistent=true +RandomizedDelaySec=1h + +[Install] +WantedBy=timers.target diff --git a/roles/borg/tasks/main.yml b/roles/borg/tasks/main.yml index 55a3c8c..796c6e8 100644 --- a/roles/borg/tasks/main.yml +++ b/roles/borg/tasks/main.yml @@ -1,3 +1,28 @@ +- name: Install borg + apt: + pkg: + - borgbackup + - borgmatic +- name: Copy borg backup config + template: + src: "{{ role_path }}/templates/backup.yml.j2" + dest: /root/backup.yml +- name: Copy systemd service + template: + src: "{{ role_path }}/templates/backup.service.j2" + dest: "/etc/systemd/system/backup.service" + register: service +- name: Copy systemd timer + copy: + src: "{{ role_path }}/files/backup.timer" + dest: "/etc/systemd/system/backup.timer" + register: timer +- name: Enable timer + systemd: + name: backup.timer + enabled: true + state: started + daemon_reload: "{{ 'yes' if service.changed or timer.changed else 'no' }}" - name: Create extra disk moint point file: path: "{{ kingston1tb_mount_point }}" diff --git a/roles/borg/templates/backup.service.j2 b/roles/borg/templates/backup.service.j2 new file mode 100644 index 0000000..8960c3f --- /dev/null +++ b/roles/borg/templates/backup.service.j2 @@ -0,0 +1,6 @@ +[Unit] +Description=Backup data using borgmatic + +[Service] +ExecStart=/usr/bin/borgmatic --config /root/backup.yml +Type=oneshot diff --git a/roles/borg/templates/backup.yml.j2 b/roles/borg/templates/backup.yml.j2 new file mode 100644 index 0000000..92b1bab --- /dev/null +++ b/roles/borg/templates/backup.yml.j2 @@ -0,0 +1,14 @@ +location: + source_directories: + - /mnt/atlas + repositories: + - {{ backup_location }} +retention: + keep_daily: 7 + keep_weekly: 4 + keep_monthly: 6 +hooks: + before_everything: + - echo down | ssh backup-control@atlas.lan + after_everything: + - echo up | ssh backup-control@atlas.lan diff --git a/roles/system/tasks/main.yml b/roles/system/tasks/main.yml index d6b78aa..a94a78e 100644 --- a/roles/system/tasks/main.yml +++ b/roles/system/tasks/main.yml @@ -49,7 +49,7 @@ state: directory - name: Mount atlas data mount: - src: "lewis@atlas.lan:" + src: "backup-share@atlas.lan:" path: "/mnt/atlas" state: mounted fstype: fuse.sshfs