Ansible playbook for installing a NFS server for Media consumption
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Simon Cornet 4a99b78f6e
All checks were successful
ci/woodpecker/push/linting Pipeline was successful
docs: improve readme
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-05 17:28:30 +02:00
.woodpecker chore(package): update cr.simoncor.net/dockerhub/davidanson/markdownlint-cli2 docker tag to v0.23.3 2026-09-20 05:49:11 +00:00
roles ci: update role sources to forgejo 2026-05-15 13:18:14 +02:00
vars fix: permissions download shrae 2026-04-10 08:25:08 +02:00
.ansible-lint fix: exclude only sops yml files from lint 2026-07-14 16:23:47 +02:00
.editorconfig chore: add .editorconfig and .gitattributes 2026-05-27 14:23:52 +02:00
.gitattributes chore: add .editorconfig and .gitattributes 2026-05-27 14:23:52 +02:00
.gitignore feat: initial commit 2026-04-07 17:12:18 +02:00
.markdownlint-cli2.jsonc style: ignore line length for markdown tables 2026-05-15 13:44:02 +02:00
.sops.yaml fix: correct sops regex to ya?ml 2026-07-14 16:01:54 +02:00
.yamllint chore: exclude .yml files from lint configs 2026-07-14 16:17:30 +02:00
ansible.cfg chore: sync linting and config files from common 2026-07-14 11:33:15 +02:00
playbook.yaml chore(playbook): run galaxy install only on first host 2026-08-13 08:49:04 +02:00
readme.md docs: improve readme 2026-10-05 17:28:30 +02:00
renovate.json feat: initial commit 2026-04-07 17:12:18 +02:00

Ansible Playbook: NFS Media

Playbook-only repository that configures the NFS server for media file sharing by feeding the shares defined in vars/shares.yaml to the nfs_server role.

Dependencies

Role Description Repository
nfs_server NFS server configuration nfs-server

The role is installed from roles/requirements.yml (branch main).

Variables

Only one variable is set, shares in vars/shares.yaml, which is loaded by the playbook through vars_files. See the nfs-server repository for all share keys and defaults (owner and group default to root, mode to 0770).

Exports

All shares use the client options rw,no_root_squash,no_subtree_check.

Path Client IP Client Owner:Group Mode
/srv/nfs/media/downloads 192.168.10.94 torrent.siempie.internal 10500:10000 777
/srv/nfs/media 192.168.10.74 tdarr.siempie.internal role default 775
/srv/nfs/media 192.168.10.77 jellyfin.siempie.internal role default 775
/srv/nfs/media 192.168.10.80 tdarr-worker.siempie.internal role default 775
/srv/nfs/media 192.168.10.87 radarr.siempie.internal role default 775
/srv/nfs/media 192.168.10.88 sonarr.siempie.internal role default 775
/srv/nfs/media 192.168.10.90 bazarr.siempie.internal role default 775

The /srv/nfs/media share is listed once per client because the role supports one client per entry.

Example

Adding a client to the media share:

shares:

  # newclient.siempie.internal
  - name: "media"
    path: "/srv/nfs/media"
    mode: "775"
    client_ip: "192.168.10.99"
    client_options: "rw,no_root_squash,no_subtree_check"

Usage

Run playbook.yaml via Semaphore. The playbook first runs ansible-galaxy install -f -r roles/requirements.yml on the controller and then includes the nfs_server role on all hosts, so point the Semaphore inventory at the NFS server.