From 5e64e896479fb9fae7a20a3145b57e26050ac866 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Mon, 20 Oct 2025 11:40:31 +0200 Subject: [PATCH] feat(nfs): Add auto mounted nfs filesystem --- group_vars/headless.yaml | 1 - play.yaml | 2 ++ roles/nfs/defaults/main.yaml | 12 +++++++ roles/nfs/handlers/main.yaml | 8 +++++ roles/nfs/tasks/main.yaml | 48 ++++++++++++++++++++++++++++ roles/nfs/templates/auto.nfs.jinja | 3 ++ roles/nfs/templates/nfs.autofs.jinja | 1 + 7 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 roles/nfs/defaults/main.yaml create mode 100644 roles/nfs/handlers/main.yaml create mode 100644 roles/nfs/tasks/main.yaml create mode 100644 roles/nfs/templates/auto.nfs.jinja create mode 100644 roles/nfs/templates/nfs.autofs.jinja diff --git a/group_vars/headless.yaml b/group_vars/headless.yaml index 2b1ad36..fc9999b 100644 --- a/group_vars/headless.yaml +++ b/group_vars/headless.yaml @@ -9,7 +9,6 @@ packages_terminal: - aerc - ansible - atuin - - autofs - bat - bc - bottom diff --git a/play.yaml b/play.yaml index c04d189..13f1f0f 100644 --- a/play.yaml +++ b/play.yaml @@ -44,6 +44,8 @@ tags: power - role: gnupg tags: gnupg + - role: nfs + tags: nfs - role: fonts tags: fonts diff --git a/roles/nfs/defaults/main.yaml b/roles/nfs/defaults/main.yaml new file mode 100644 index 0000000..07f2dae --- /dev/null +++ b/roles/nfs/defaults/main.yaml @@ -0,0 +1,12 @@ +--- + +nfs_mount_dir: /mnt/nfs + +# TODO: Remove hard-coding to IP for vpn access +nfs_mounts: + - name: media + src: "192.168.0.151:/srv/media" + - name: files + src: "192.168.0.151:/srv/files" + - name: videos + src: "192.168.0.151:/mnt/ext/data/videos" diff --git a/roles/nfs/handlers/main.yaml b/roles/nfs/handlers/main.yaml new file mode 100644 index 0000000..9c93e0f --- /dev/null +++ b/roles/nfs/handlers/main.yaml @@ -0,0 +1,8 @@ +--- +- name: Restart autofs service + community.general.runit: + name: autofs + state: restarted + retries: 3 + tags: + - services diff --git a/roles/nfs/tasks/main.yaml b/roles/nfs/tasks/main.yaml new file mode 100644 index 0000000..a5ec3af --- /dev/null +++ b/roles/nfs/tasks/main.yaml @@ -0,0 +1,48 @@ +--- +- name: Install nfs related packages + community.general.xbps: + name: + - nfs-utils + - autofs + state: "{{ desired_package_state | default('present') }}" + tags: + - packages + +- name: Ensure autofs master config directory + ansible.builtin.file: + dest: "/etc/autofs/auto.master.d" + state: directory + mode: "0755" + +- name: Add nfs master autofs configuration + ansible.builtin.template: + src: nfs.autofs.jinja + dest: "/etc/autofs/auto.master.d/nfs.autofs" + owner: root + group: root + mode: "0644" + force: true + notify: Restart autofs service + +- name: Ensure nfs main mount directory + ansible.builtin.file: + dest: "{{ nfs_mount_dir }}" + state: directory + mode: "0755" + +- name: Add nfs automounts configuration + ansible.builtin.template: + src: auto.nfs.jinja + dest: "/etc/autofs/auto.nfs" + owner: root + group: root + mode: "0644" + force: true + notify: Restart autofs service + +- name: Enable autofs service + ansible.builtin.file: + force: "yes" + src: "/etc/sv/autofs" + dest: "/etc/runit/runsvdir/default/autofs" + state: link diff --git a/roles/nfs/templates/auto.nfs.jinja b/roles/nfs/templates/auto.nfs.jinja new file mode 100644 index 0000000..354b1b2 --- /dev/null +++ b/roles/nfs/templates/auto.nfs.jinja @@ -0,0 +1,3 @@ +{% for mount in nfs_mounts %} +{{ mount.name }} -fstype=nfs4,rw,soft,intr {{ mount.src }} +{% endfor %} diff --git a/roles/nfs/templates/nfs.autofs.jinja b/roles/nfs/templates/nfs.autofs.jinja new file mode 100644 index 0000000..5934528 --- /dev/null +++ b/roles/nfs/templates/nfs.autofs.jinja @@ -0,0 +1 @@ +{{ nfs_mount_dir }} /etc/autofs/auto.nfs --timeout=300