rclone: Make role more modular

This commit is contained in:
Timo Makinen 2025-01-24 11:41:49 +00:00
parent c3497c2440
commit 338f4e2f0d
4 changed files with 42 additions and 29 deletions

View file

@ -3,13 +3,19 @@
set -eu
umask 027
TARGET="/srv/backup"
CONFIG="/etc/rclone/rclone.conf"
LOGDIR="/var/log/rclone"
SERVICE="$(whoami)"
TARGET="/srv/${SERVICE}"
CONFIG="/etc/rclone/${SERVICE}.conf"
LOGDIR="/var/log/rclone/${SERVICE}"
RCLONE="/usr/local/bin/rclone"
timestamp="$(date +%Y%m%d%H%M%S)"
if [ ! -f "$CONFIG" ]; then
echo "ERR: Config file '${CONFIG}' does not exist" 1>&2
exit 1
fi
if [ ! -d "$TARGET" ]; then
echo "ERR: Destination directory '${TARGET}' does not exist" 1>&2
exit 1

View file

@ -1,4 +1,3 @@
---
dependencies:
- {role: backup_base}
- {role: ssh_known_hosts}

View file

@ -8,17 +8,17 @@
ansible.builtin.file:
path: /etc/rclone
state: directory
mode: "0770"
mode: "0755"
owner: root
group: backup
group: "{{ ansible_wheel }}"
- name: Create host config
ansible.builtin.template:
dest: /etc/rclone/rclone.conf
dest: "/etc/rclone/{{ rclone_service }}.conf"
src: rclone.conf.j2
mode: "0640"
owner: root
group: backup
group: "{{ rclone_service }}"
- name: Create ssh keys
ansible.builtin.command:
@ -27,45 +27,53 @@
- -t
- ed25519
- -C
- "backup@{{ inventory_hostname }}"
- "{{ rclone_service }}@{{ inventory_hostname }}"
- -N
- ""
- -f
- /etc/rclone/id_ed25519
creates: /etc/rclone/id_ed25519
- "/etc/rclone/ssh_{{ rclone_service }}_ed25519_key"
creates: "/etc/rclone/ssh_{{ rclone_service }}_ed25519_key"
- name: Fix ssh key permissions
ansible.builtin.file:
path: "{{ item }}"
owner: root
group: backup
group: "{{ rclone_service }}"
mode: "0640"
with_items:
- /etc/rclone/id_ed25519
- /etc/rclone/id_ed25519.pub
- "/etc/rclone/ssh_{{ rclone_service }}_ed25519_key"
- "/etc/rclone/ssh_{{ rclone_service }}_ed25519_key.pub"
- name: Fetch ssh public key
ansible.builtin.fetch:
src: /etc/rclone/id_ed25519.pub
dest: ../files/ssh/backup.pub
src: "/etc/rclone/ssh_{{ rclone_service }}_ed25519_key.pub"
dest: "../files/ssh/{{ rclone_service }}.pub"
flat: true
- name: Create log directory
- name: Create base log directory
ansible.builtin.file:
path: /var/log/rclone
state: directory
mode: "0750"
owner: backup
group: backup
mode: "0755"
owner: root
group: "{{ ansible_wheel }}"
- name: Create backup directories
- name: Create log directory
ansible.builtin.file:
path: "/srv/backup/{{ item }}"
path: "/var/log/rclone/{{ rclone_service }}"
state: directory
mode: "0750"
owner: "{{ rclone_service }}"
group: "{{ rclone_service }}"
- name: Create data directories
ansible.builtin.file:
path: "/srv/{{ rclone_service }}/{{ item }}"
state: directory
mode: "0770"
owner: root
group: backup
with_items: "{{ groups['sftpbackup'] }}"
group: "{{ rclone_service }}"
with_items: "{{ groups[rclone_hostgroup | default(rclone_service)] }}"
- name: Copy rclone sync script
ansible.builtin.copy:
@ -79,13 +87,13 @@
ansible.builtin.cron:
name: MAILTO
env: true
user: backup
user: "{{ rclone_service }}"
value: root
- name: Add rclone sync cron job
ansible.builtin.cron:
name: rclone-sync
user: backup
user: "{{ rclone_service }}"
hour: "3"
minute: "00"
job: /usr/local/bin/rclone-sync

View file

@ -1,11 +1,11 @@
# {{ ansible_managed }}
{% for host in groups['sftpbackup'] %}
{% for host in groups[rclone_hostgroup | default(rclone_service)] %}
[{{ host.split('.')[0] }}]
type = sftp
host = {{ host }}
user = backup
user = {{ rclone_service }}
shell_type = none
key_file = /etc/rclone/id_ed25519
key_file = /etc/rclone/ssh_{{ rclone_service }}_ed25519_key
known_hosts_file = /etc/ssh/ssh_known_hosts
{% endfor %}