diff --git a/roles/ynh_backup/defaults/borg.yml b/roles/ynh_backup/defaults/borg.yml new file mode 100644 index 0000000000000000000000000000000000000000..83af971ab63a0fd872f20bfd91f6268aabc77042 --- /dev/null +++ b/roles/ynh_backup/defaults/borg.yml @@ -0,0 +1,12 @@ +--- +# https://github.com/borgbase/ansible-role-borgbackup +borgmatic_config_name: "borg_remote_repo" +borg_encryption_passphrase: "{{ borg_remote_repo_encryption_passphrase }}" +borg_repository: "{{ borg_remote_repository }}" +borg_retention_policy: + keep_daily: "{{ borg_number_days_to_keep }}" + keep_weekly: "{{ borg_number_weeks_to_keep }}" + keep_monthly: "{{ borg_number_months_to_keep }}" +borgmatic_cron_name: borgmatic_froggit_remote_backup +borgmatic_cron_hour: "6" +borgmatic_cron_minute: "0" diff --git a/roles/ynh_backup/meta/main.yml b/roles/ynh_backup/meta/main.yml index 90042fae08e1abc94d8e6a239ac6848c104bf766..7c83f5971824fde463a3e160ecf8ab9d843c1d76 100644 --- a/roles/ynh_backup/meta/main.yml +++ b/roles/ynh_backup/meta/main.yml @@ -17,3 +17,12 @@ galaxy_info: dependencies: - role: m3nu.ansible_role_borgbackup + vars: + borgmatic_config_name: "borg_remote_repo" + borg_encryption_passphrase: "{{ borg_remote_repo_encryption_passphrase }}" + borg_repository: "{{ borg_remote_repository }}" + borg_retention_policy: + keep_daily: "{{ borg_number_days_to_keep }}" + keep_weekly: "{{ borg_number_weeks_to_keep }}" + keep_monthly: "{{ borg_number_months_to_keep }}" + diff --git a/roles/ynh_backup/tasks/borg.yml b/roles/ynh_backup/tasks/borg.yml index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a56683dd130da0e7b22c212cb517558da6051d80 100644 --- a/roles/ynh_backup/tasks/borg.yml +++ b/roles/ynh_backup/tasks/borg.yml @@ -0,0 +1,65 @@ +--- +#-----------------------------------------------------------------------------# +# ansible-yunohost allows to deploy Yunohost using Ansible # +# Copyright 2021-present Lydra https://www.lydra.fr/ # +# # +# this program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# this program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see <http://www.gnu.org/licenses/>. # +# # +#-----------------------------------------------------------------------------# + +- name: Configure host for Borg Remote repository + block: + - name: deploy ssh public key for BorgBackup + ansible.builtin.copy: + src: "{{ borg_ssh_keys_src }}.pub" + dest: "{{ borg_ssh_keys_dest }}.pub" + owner: "{{ admin_user }}" + group: "{{ admin_user }}" + mode: 0600 + + - name: deploy ssh private key for BorgBackup + ansible.builtin.copy: + src: "{{ borg_ssh_keys_src }}" + dest: "{{ borg_ssh_keys_dest }}" + owner: "{{ admin_user }}" + group: "{{ admin_user }}" + mode: 0600 + + - name: change ssh command in "/etc/borgmatic/{{ borgmatic_config_name }}" + ansible.builtin.lineinfile: + path: "/etc/borgmatic/{{ borgmatic_config_name }}" + regexp: "# ssh_command: ssh -i ~/.ssh/id_ed25519" + line: " ssh_command: ssh -p 7410 -o StrictHostKeychecking=no -i {{ borg_ssh_keys_dest }}" + state: present + + - name: change archive name in "/etc/borgmatic/{{ borgmatic_config_name }}" + ansible.builtin.lineinfile: + path: "/etc/borgmatic/{{ borgmatic_config_name }}" + regexp: "archive_name_format:" + line: " archive_name_format: {{ borg_archive_name_format }}" + state: present + + - name: Create borg command in /usr/local/bin + ansible.builtin.copy: + content: | + #!/bin/bash + . /opt/borgmatic/bin/activate + borg "$@" + dest: /usr/local/bin/borg + owner: root + group: root + mode: "0755" + + - name: Initialize a new Borg remote repository + ansible.builtin.command: "{{ borg_init_command }}" diff --git a/roles/ynh_backup/tasks/main.yml b/roles/ynh_backup/tasks/main.yml index 3b41dc251d9ceeb57a8a27a2a1a71ba78d7332b7..5486d4e7c952050813890ddd10872883b6511e15 100644 --- a/roles/ynh_backup/tasks/main.yml +++ b/roles/ynh_backup/tasks/main.yml @@ -23,3 +23,10 @@ when: ynh_backup.scheduled tags: - backup + +- name: Use Borg Backup with YunoHost + ansible.builtin.include_tasks: borg.yml + when: ynh_backup.scheduled + tags: + - backup + - borg