From 178316f8e762fc477fc444bb7fb98512adc54000 Mon Sep 17 00:00:00 2001 From: Stefan Morgenthaler Date: Fri, 9 Dec 2022 09:55:40 +0100 Subject: [PATCH] allow to installation via os package manager or pip --- README.md | 3 ++- defaults/main.yml | 5 ++--- tasks/install_pip.yml | 34 ++++++++++++++++++++++++++++++++++ tasks/install_pkg.yml | 6 ++++++ tasks/main.yml | 40 ++++++++-------------------------------- vars/Archlinux.yml | 4 ++++ vars/Debian.yml | 4 ++++ vars/Fedora.yml | 4 ++++ vars/ManjaroLinux.yml | 4 ++++ vars/RedHat-8.yml | 4 ++++ vars/RedHat-9.yml | 4 ++++ vars/RedHat.yml | 4 ++++ 12 files changed, 80 insertions(+), 36 deletions(-) create mode 100644 tasks/install_pip.yml create mode 100644 tasks/install_pkg.yml diff --git a/README.md b/README.md index e121b69..2c109c7 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,8 @@ $ git clone https://github.com/borgbase/ansible-role-borgbackup.git roles/ansibl - `ssh_key_file`: Path to a private ssh key file (default is `.ssh/id_ed25519`). It generates a ed25519 key if the file doesn't exist yet. - `borg_version`: Force a specific borg version to be installed - `borgmatic_version`: Force a specific borgmatic version to be installed - +- `borgmatic_install_method`: By default `pip` is used to install borgmatic. To install via your distributions package manager set this to `package-manager` and overwrite the `borg_packages` variable to contain your distributions package names required to install borgmatic. Note that many distributions ship outdated versions of borgbackup and borgmatic; use at your own risk. +- `borg_system_packages`: contains the names of distributions packages for `borg(backup)` and `borgmatic`, only used if `borgmatic_install_method` is set to `package-manager`. ## Contributing diff --git a/defaults/main.yml b/defaults/main.yml index f734524..dd5f737 100755 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -35,7 +35,6 @@ borgmatic_cron_minute: "{{ 59 | random(seed=inventory_hostname) }}" borgmatic_cron_checks_day: "{{ range(1, 28) | random(seed=inventory_hostname) }}" borgmatic_cron_checks_hour: "{{ range(9, 24) | random(seed=inventory_hostname) }}" borgmatic_cron_checks_minute: "{{ 59 | random(seed=inventory_hostname) }}" - - borg_version: false -borgmatic_version: false \ No newline at end of file +borgmatic_version: false +borgmatic_install_method: pip diff --git a/tasks/install_pip.yml b/tasks/install_pip.yml new file mode 100644 index 0000000..394f472 --- /dev/null +++ b/tasks/install_pip.yml @@ -0,0 +1,34 @@ +--- +- name: Create virtualenv for borg # noqa package-latest + pip: + name: + - pip + - setuptools + state: latest + virtualenv: /opt/borgmatic + virtualenv_command: "{{ python_bin }} -m venv" + +- name: Install dependent Python Packages + pip: + name: "{{ borg_dependent_python_packages }}" + virtualenv: /opt/borgmatic + when: borg_dependent_python_packages is defined + +- name: Install main Python Packages + pip: + name: "{{ item.name }}" + version: "{{ item.version | default(omit, true) }}" + virtualenv: /opt/borgmatic + when: borg_python_packages is defined + loop: "{{ borg_python_packages }}" + +- name: Create borgmatic command in /usr/local/bin + copy: + content: | + #!/bin/bash + . /opt/borgmatic/bin/activate + borgmatic "$@" + dest: /usr/local/bin/borgmatic + owner: root + group: root + mode: "0755" diff --git a/tasks/install_pkg.yml b/tasks/install_pkg.yml new file mode 100644 index 0000000..41e9c69 --- /dev/null +++ b/tasks/install_pkg.yml @@ -0,0 +1,6 @@ +--- +- name: Install borgmatic and borg via distribution package manager + package: + name: "{{ item }}" + state: present + loop: "{{ borg_system_packages }}" diff --git a/tasks/main.yml b/tasks/main.yml index fcd63f4..9efef2c 100755 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -27,39 +27,15 @@ name: "{{ borg_packages }}" state: present -- name: Create virtualenv for borg # noqa package-latest - pip: - name: - - pip - - setuptools - state: latest - virtualenv: /opt/borgmatic - virtualenv_command: "{{ python_bin }} -m venv" +- name: Install borgmatic via pip + ansible.builtin.include_tasks: + file: install_pip.yml + when: borgmatic_install_method == 'pip' -- name: Install dependent Python Packages - pip: - name: "{{ borg_dependent_python_packages }}" - virtualenv: /opt/borgmatic - when: borg_dependent_python_packages is defined - -- name: Install main Python Packages - pip: - name: "{{ item.name }}" - version: "{{ item.version | default(omit, true) }}" - virtualenv: /opt/borgmatic - when: borg_python_packages is defined - loop: "{{ borg_python_packages }}" - -- name: Create borgmatic command in /usr/local/bin - copy: - content: | - #!/bin/bash - . /opt/borgmatic/bin/activate - borgmatic "$@" - dest: /usr/local/bin/borgmatic - owner: root - group: root - mode: "0755" +- name: Install borgmatic via distribution package manager + ansible.builtin.include_tasks: + file: install_pkg.yml + when: borgmatic_install_method == 'package-manager' - name: Ensure root has SSH key. user: diff --git a/vars/Archlinux.yml b/vars/Archlinux.yml index 8b0027d..e7a33fc 100644 --- a/vars/Archlinux.yml +++ b/vars/Archlinux.yml @@ -7,5 +7,9 @@ borg_packages: - python-pip - python-setuptools +borg_system_packages: + - borg + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/Debian.yml b/vars/Debian.yml index 5dbed10..95b70b2 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -13,5 +13,9 @@ borg_packages: - openssh-client - cron +borg_system_packages: + - borgbackup + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/Fedora.yml b/vars/Fedora.yml index 9f12d89..a77afa3 100644 --- a/vars/Fedora.yml +++ b/vars/Fedora.yml @@ -13,5 +13,9 @@ borg_packages: - openssh-clients - cronie +borg_system_packages: + - borgbackup + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/ManjaroLinux.yml b/vars/ManjaroLinux.yml index a4dfa5d..d883664 100644 --- a/vars/ManjaroLinux.yml +++ b/vars/ManjaroLinux.yml @@ -4,5 +4,9 @@ borg_packages: - openssh - cronie +borg_system_packages: + - borg + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/RedHat-8.yml b/vars/RedHat-8.yml index 7ee2d7e..bde259d 100644 --- a/vars/RedHat-8.yml +++ b/vars/RedHat-8.yml @@ -13,5 +13,9 @@ borg_packages: - openssh-clients - cronie +borg_system_packages: + - borgbackup + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/RedHat-9.yml b/vars/RedHat-9.yml index bbf20e6..5f0a0f0 100644 --- a/vars/RedHat-9.yml +++ b/vars/RedHat-9.yml @@ -13,5 +13,9 @@ borg_packages: - openssh-clients - cronie +borg_system_packages: + - borgbackup + - borgmatic + python_bin: python3 pip_bin: pip3 diff --git a/vars/RedHat.yml b/vars/RedHat.yml index bd2fd08..3a0f5d6 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -12,5 +12,9 @@ borg_packages: - openssh-clients - cronie +borg_system_packages: + - borgbackup + - borgmatic + python_bin: python3 pip_bin: pip3