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

View file

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

View file

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

View file

@ -1,11 +1,11 @@
# {{ ansible_managed }} # {{ ansible_managed }}
{% for host in groups['sftpbackup'] %} {% for host in groups[rclone_hostgroup | default(rclone_service)] %}
[{{ host.split('.')[0] }}] [{{ host.split('.')[0] }}]
type = sftp type = sftp
host = {{ host }} host = {{ host }}
user = backup user = {{ rclone_service }}
shell_type = none 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 known_hosts_file = /etc/ssh/ssh_known_hosts
{% endfor %} {% endfor %}