From 22bd09fe1b536ba59556f4fabfaad885ae706785 Mon Sep 17 00:00:00 2001 From: saltydk Date: Mon, 29 Jul 2024 00:53:41 +0200 Subject: [PATCH] unionfs: use bash script to run mergerfs to avoid systemd line length limitation with many remotes --- roles/unionfs/defaults/main.yml | 14 +------------- roles/unionfs/tasks/subtasks/mergerfs.yml | 15 +++++++++++++++ roles/unionfs/templates/mergerfs.service.j2 | 2 +- roles/unionfs/templates/mergerfs.sh.j2 | 3 +++ 4 files changed, 20 insertions(+), 14 deletions(-) create mode 100644 roles/unionfs/templates/mergerfs.sh.j2 diff --git a/roles/unionfs/defaults/main.yml b/roles/unionfs/defaults/main.yml index 04eaa77458..d4bffe368f 100644 --- a/roles/unionfs/defaults/main.yml +++ b/roles/unionfs/defaults/main.yml @@ -71,18 +71,6 @@ mergerfs_mount_start_command: |- -o dropcacheonclose=true,minfreespace=0,fsname=mergerfs \ -o xattr={{ mergerfs_mount_xattr }},statfs=base,statfs_ignore=nc,umask={{ mergerfs_mount_umask }},noatime \ -o func.readdir={{ mergerfs_mount_readdir_policy }} \ - {% set branches = mergerfs_mount_branches.split(':') %} - {%- for branch in branches %} - {% if loop.index0 is divisibleby 10 and not loop.first %} - \ - {% endif %} - {% if loop.first %} - {% filter indent(2, first=True) -%} - {%- if loop.first -%}"{%- endif -%}{{ branch }}{%- if not loop.last -%}:{%- endif %} - {%- endfilter %} - {% else %} - {{ branch}}{%- if not loop.last -%}:{%- endif %} - {% endif %} - {%- endfor %}" /mnt/unionfs + "{{ mergerfs_mount_branches }}" /mnt/unionfs mergerfs_mount_stop_command: /bin/fusermount3 -uz /mnt/unionfs diff --git a/roles/unionfs/tasks/subtasks/mergerfs.yml b/roles/unionfs/tasks/subtasks/mergerfs.yml index 90cee00f00..1afff23250 100644 --- a/roles/unionfs/tasks/subtasks/mergerfs.yml +++ b/roles/unionfs/tasks/subtasks/mergerfs.yml @@ -48,6 +48,21 @@ mode: "0644" force: "{{ mergerfs_override_service }}" +- name: "MergerFS | Create '/srv/scripts' directory" + ansible.builtin.file: + path: "/srv/scripts" + state: directory + owner: "{{ user.name }}" + group: "{{ user.name }}" + mode: "0775" + +- name: "MergerFS | Import 'mergerfs.sh'" + ansible.builtin.template: + src: mergerfs.sh.j2 + dest: /srv/scripts/mergerfs.sh + mode: "0755" + force: "{{ mergerfs_override_service }}" + - name: "MergerFS | Systemd reload daemon" ansible.builtin.systemd_service: daemon_reload: true diff --git a/roles/unionfs/templates/mergerfs.service.j2 b/roles/unionfs/templates/mergerfs.service.j2 index 0bcda1d93b..ce1b769833 100644 --- a/roles/unionfs/templates/mergerfs.service.j2 +++ b/roles/unionfs/templates/mergerfs.service.j2 @@ -15,7 +15,7 @@ After={{ mergerfs_mount_service_after }} [Service] Type=forking GuessMainPID=no -ExecStart={{ mergerfs_mount_start_command }} +ExecStart=/srv/scripts/mergerfs.sh ExecStop={{ mergerfs_mount_stop_command }} [Install] diff --git a/roles/unionfs/templates/mergerfs.sh.j2 b/roles/unionfs/templates/mergerfs.sh.j2 new file mode 100644 index 0000000000..87c5d49149 --- /dev/null +++ b/roles/unionfs/templates/mergerfs.sh.j2 @@ -0,0 +1,3 @@ +#!/bin/bash + +{{ mergerfs_mount_start_command }}