add borg_server role

This commit is contained in:
Sergey Malyuk
2025-12-18 16:11:08 +03:00
parent 0917bc596c
commit 277900b6ba
10 changed files with 169 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
ansible_borg_server
=========
An Ansible role to set up Borg repository(-ies)
Requirements
------------
Role Variables
--------------
None
Dependencies
------------
None
Example Playbook
----------------
```yaml
roles:
- role: genlab.template
```
License
-------
BSD
Author Information
------------------
corvus-migratorius@proton.me

View File

@@ -0,0 +1,2 @@
---
hide_logs: true

View File

@@ -0,0 +1 @@
---

View File

@@ -0,0 +1,17 @@
---
galaxy_info:
role_name: "ansible_borg_server"
namespace: genlab
author: "Alexander Gorelyshev"
company: "Genlab, LLC"
description: "Set up Borg repository(-ies) "
license: "MIT"
min_ansible_version: "2.1"
platforms:
- name: "Ubuntu"
versions: [ "focal", "jammy" ]
galaxy_tags: [ ]
dependencies: []

View File

@@ -0,0 +1,7 @@
---
- name: Converge
hosts: all
roles:
- role: genlab.common.ansible_borg_server
borg_secrets_path: "secrets.yaml"
hide_logs: false

View File

@@ -0,0 +1,27 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: ubuntu
image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2204}-ansible:latest
pre_build_image: true
command: ${MOLECULE_DOCKER_COMMAND:-""}
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
provisioner:
name: ansible
verifier:
name: ansible
lint: |
set -e
yamllint .
ansible-lint .

View File

@@ -0,0 +1,6 @@
---
borg_repo_root: /storage/backups
borg_repos:
- name: test-server
user: borg_test
ssh_key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE8EIHdDtrDnK92G/9rOEPujKPha3E0g7VGWdAWYLnqj borg_test@test-server

View File

@@ -0,0 +1,11 @@
---
- name: Verify
hosts: all
gather_facts: false
any_errors_fatal: true
tasks:
- name: "Check if `borg` is available from PATH" # noqa: no-changed-when
register: br_test__borg_version
ansible.builtin.command:
cmd: "borg --version"

View File

@@ -0,0 +1,62 @@
---
- name: "Read secret variables"
ansible.builtin.include_vars:
file: "{{ borg_secrets_path }}" # `borg_secrets`
- name: "Install packages"
ansible.builtin.package:
name:
- borgbackup
- openssh-server
state: present
update_cache: true
- name: "Create a group for borgs"
ansible.builtin.group:
name: borgs
state: present
- name: "Create Borg users"
no_log: "{{ hide_logs }}"
loop: "{{ borg_repos }}"
ansible.builtin.user:
name: "{{ item.user }}"
comment: "Borg agent"
state: "present"
create_home: true
shell: "/bin/bash"
generate_ssh_key: true
groups: [ borgs ]
append: true
- name: "Configure SSH authorized keys for Borg users"
no_log: "{{ hide_logs }}"
loop: "{{ borg_repos }}"
ansible.builtin.lineinfile:
path: /home/{{ item.user }}/.ssh/authorized_keys
create: true
owner: "{{ item.user }}"
group: "{{ item.user }}"
mode: "0600"
regexp: '^restrict,command="borg serve --append-only --restrict-to-repository'
line: >
restrict,command="borg serve --append-only --restrict-to-repository {{ borg_repo_root }}/{{ item.name }}"
{{ item.ssh_key }}
- name: "Create a root folder for backups"
ansible.builtin.file:
path: "{{ borg_repo_root }}"
state: "directory"
owner: "root"
group: "borgs"
mode: "0770"
- name: "Create repository folders"
no_log: "{{ hide_logs }}"
loop: "{{ borg_repos }}"
ansible.builtin.file:
path: "{{ borg_repo_root }}/{{ item.name }}"
state: "directory"
owner: "{{ item.user }}"
group: "{{ item.user }}"
mode: "0770"

View File

@@ -0,0 +1 @@
---