diff --git a/README.md b/README.md index 2c109c7..415c63f 100644 --- a/README.md +++ b/README.md @@ -87,8 +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`. +- `borg_install_method`: By default `pip` is used to install borgmatic. To install via your distributions package manager set this to `package` and (if needed) overwrite the `borg_distro_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_distro_packages`: contains the names of distributions packages for `borg(backup)` and `borgmatic`, only used if `borg_install_method` is set to `package`. ## Contributing diff --git a/defaults/main.yml b/defaults/main.yml index dd5f737..6918f3f 100755 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -37,4 +37,4 @@ 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 -borgmatic_install_method: pip +borg_install_method: pip diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 index 59f32cd..0b331c5 100644 --- a/molecule/default/Dockerfile.j2 +++ b/molecule/default/Dockerfile.j2 @@ -14,10 +14,10 @@ ENV {{ var }} {{ value }} {% endfor %} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates iproute2 python3-apt aptitude && apt-get clean; \ +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 python3-pip sudo bash ca-certificates iproute2 python3-apt aptitude && apt-get clean; \ elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install /usr/bin/python3 /usr/bin/python3-config /usr/bin/dnf-3 sudo bash iproute && dnf clean all; \ elif [ $(command -v yum) ]; then yum makecache fast && yum install -y /usr/bin/python /usr/bin/python2-config sudo yum-plugin-ovl bash iproute && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml iproute2 && zypper clean -a; \ elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ - elif [ $(command -v pacman) ]; then pacman --noconfirm -Suy python sudo openssh; \ + elif [ $(command -v pacman) ]; then pacman --noconfirm -Suy python python-pip sudo openssh; \ elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates iproute2 && xbps-remove -O; fi diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 5477b13..e5b47d2 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -38,6 +38,7 @@ - name: users hostname: database1.example.org port: 5433 + borg_install_method: pip post_tasks: - name: Install yamllint for checking config file diff --git a/tasks/Archlinux.yml b/tasks/Archlinux.yml deleted file mode 100644 index ed97d53..0000000 --- a/tasks/Archlinux.yml +++ /dev/null @@ -1 +0,0 @@ ---- diff --git a/tasks/Debian.yml b/tasks/Debian.yml deleted file mode 100644 index 73b314f..0000000 --- a/tasks/Debian.yml +++ /dev/null @@ -1 +0,0 @@ ---- \ No newline at end of file diff --git a/tasks/RedHat.yml b/tasks/install_package.yml similarity index 65% rename from tasks/RedHat.yml rename to tasks/install_package.yml index b7dd9f5..f153ecb 100644 --- a/tasks/RedHat.yml +++ b/tasks/install_package.yml @@ -1,6 +1,6 @@ --- - name: Check if EPEL repo is enabled, if installation from distro is requested - when: borgmatic_install_method == 'package-manager' + when: ansible_os_family == 'RedHat' block: - name: Get list of installed packages ansible.builtin.package_facts: @@ -10,3 +10,9 @@ that: - "'epel-release' in ansible_facts.packages" fail_msg: Need EPEL repo to install via distro package. + +- name: Install borgmatic and borg via distribution package manager + package: + name: "{{ item }}" + state: present + loop: "{{ borg_distro_packages }}" diff --git a/tasks/install_pip.yml b/tasks/install_pip.yml index 394f472..1f72f39 100644 --- a/tasks/install_pip.yml +++ b/tasks/install_pip.yml @@ -1,4 +1,9 @@ --- +- name: Install build dependencies + package: + name: "{{ borg_pip_packages }}" + state: present + - name: Create virtualenv for borg # noqa package-latest pip: name: diff --git a/tasks/install_pkg.yml b/tasks/install_pkg.yml deleted file mode 100644 index 41e9c69..0000000 --- a/tasks/install_pkg.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- 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 9efef2c..4b67356 100755 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -16,26 +16,14 @@ - "{{ ansible_os_family }}.yml" - "{{ ansible_lsb.id }}.yml" -- name: Run OS-specific tasks - include_tasks: "{{ item }}" - with_first_found: - - "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml" - - "{{ ansible_os_family }}.yml" - -- name: Install required System Packages +- name: Install general dependencies (cron and openssh) package: - name: "{{ borg_packages }}" + name: "{{ borg_dep_packages }}" state: present -- name: Install borgmatic via pip +- name: Install Borg and Borgmatic ansible.builtin.include_tasks: - file: install_pip.yml - when: borgmatic_install_method == 'pip' - -- name: Install borgmatic via distribution package manager - ansible.builtin.include_tasks: - file: install_pkg.yml - when: borgmatic_install_method == 'package-manager' + file: install_{{ borg_install_method }}.yml - name: Ensure root has SSH key. user: diff --git a/vars/Archlinux.yml b/vars/Archlinux.yml index e7a33fc..0ec7e01 100644 --- a/vars/Archlinux.yml +++ b/vars/Archlinux.yml @@ -1,13 +1,15 @@ --- -borg_packages: +borg_dep_packages: - cronie - - gcc - openssh + +borg_pip_packages: + - gcc - pkgconfig - python-pip - python-setuptools -borg_system_packages: +borg_distro_packages: - borg - borgmatic diff --git a/vars/Debian.yml b/vars/Debian.yml index 95b70b2..03d7d87 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -1,5 +1,9 @@ --- -borg_packages: +borg_dep_packages: + - openssh-client + - cron + +borg_pip_packages: - libssl-dev - libacl1-dev - libacl1 @@ -10,10 +14,8 @@ borg_packages: - python3-pkgconfig - python3-msgpack - python3-venv - - openssh-client - - cron -borg_system_packages: +borg_distro_packages: - borgbackup - borgmatic diff --git a/vars/Fedora.yml b/vars/Fedora.yml index a77afa3..6a2166b 100644 --- a/vars/Fedora.yml +++ b/vars/Fedora.yml @@ -1,5 +1,9 @@ --- -borg_packages: +borg_dep_packages: + - cronie + - openssh-clients + +borg_pip_packages: - libacl-devel - libacl - gcc @@ -10,10 +14,8 @@ borg_packages: - python3-devel - python3-setuptools - python3-Cython - - openssh-clients - - cronie -borg_system_packages: +borg_distro_packages: - borgbackup - borgmatic diff --git a/vars/ManjaroLinux.yml b/vars/ManjaroLinux.yml index d883664..52e70f6 100644 --- a/vars/ManjaroLinux.yml +++ b/vars/ManjaroLinux.yml @@ -1,10 +1,21 @@ --- -borg_packages: - - borgmatic +borg_dep_packages: - openssh - cronie -borg_system_packages: +borg_pip_packages: # untested + - libssl-dev + - libacl1-dev + - libacl1 + - build-essential + - python3-setuptools + - python3-dev + - python3-pip + - python3-pkgconfig + - python3-msgpack + - python3-venv + +borg_distro_packages: - borg - borgmatic diff --git a/vars/RedHat-8.yml b/vars/RedHat-8.yml index bde259d..4673e05 100644 --- a/vars/RedHat-8.yml +++ b/vars/RedHat-8.yml @@ -1,5 +1,9 @@ --- -borg_packages: +borg_dep_packages: + - openssh-clients + - cronie + +borg_pip_packages: - libacl-devel - libacl - gcc @@ -10,10 +14,8 @@ borg_packages: - python3-devel - python3-setuptools - python3-virtualenv - - openssh-clients - - cronie -borg_system_packages: +borg_distro_packages: - borgbackup - borgmatic diff --git a/vars/RedHat-9.yml b/vars/RedHat-9.yml index 5f0a0f0..50112d3 100644 --- a/vars/RedHat-9.yml +++ b/vars/RedHat-9.yml @@ -1,5 +1,9 @@ --- -borg_packages: +borg_dep_packages: + - cronie + - openssh-clients + +borg_pip_packages: - libacl-devel - libacl - gcc @@ -10,10 +14,8 @@ borg_packages: - python3-devel - python3-setuptools # - python3-virtualenv - - openssh-clients - - cronie -borg_system_packages: +borg_distro_packages: - borgbackup - borgmatic diff --git a/vars/RedHat.yml b/vars/RedHat.yml index 3a0f5d6..7c5f8b6 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -1,5 +1,9 @@ --- -borg_packages: +borg_dep_packages: + - cronie + - openssh-clients + +borg_pip_packages: - libacl-devel - libacl - gcc @@ -9,10 +13,8 @@ borg_packages: - python36-wheel - python36-devel - python-setuptools - - openssh-clients - - cronie -borg_system_packages: +borg_distro_packages: - borgbackup - borgmatic diff --git a/vars/main.yml b/vars/main.yml index 9cf3949..9f34550 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -2,6 +2,7 @@ borg_dependent_python_packages: - cython - pkgconfig + borg_python_packages: - name: borgbackup version: "{{ borg_version }}"