[PATCH 10/12] linux-mirror: add distribution-specific NFS server support
Daniel Gomez <[email protected]> Thu, 06 Nov 2025 23:36:04 +0100
| Newsgroups | dev.linux.lists.kdevops |
|---|---|
| Message-ID | <[email protected]> |
From: Daniel Gomez <[email protected]> The original NFS support only worked on RedHat/Fedora systems, failing on Debian/Ubuntu with "Could not find the requested service nfs-server" because package and service names differ across distributions. RedHat uses nfs-utils package with nfs-server service, while Debian/Ubuntu use nfs-kernel-server for both, and SUSE uses nfs-kernel-server package with nfsserver service. Created distribution-specific package installation tasks under install-deps/nfs/ with separate files for debian, redhat, and suse. A dispatcher in nfs/main.yml uses import_tasks to include the correct distribution file based on ansible_os_family. Using import_tasks instead of include_tasks ensures the when conditions are applied at parse time to all imported tasks, avoiding the need for redundant conditions in each distribution file. The nfs_server_service variable is set in main.yml using three set_fact tasks with distribution-specific conditionals. Setting the variable in the main task scope rather than in imported files ensures it is available when the systemd service enablement task runs. This approach separates package installation (distribution-specific) from service management (common across all distributions). Generated-by: Claude AI Signed-off-by: Daniel Gomez <[email protected]> --- .../tasks/install-deps/nfs/debian/main.yml | 9 ++++++ .../linux-mirror/tasks/install-deps/nfs/main.yml | 15 ++++++++++ .../tasks/install-deps/nfs/redhat/main.yml | 9 ++++++ .../tasks/install-deps/nfs/suse/main.yml | 9 ++++++ playbooks/roles/linux-mirror/tasks/main.yml | 34 +++++++++++++++++----- 5 files changed, 69 insertions(+), 7 deletions(-) diff --git a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/debian/main.yml b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/debian/main.yml new file mode 100644 index 00000000..98c0b1dc --- /dev/null +++ b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/debian/main.yml @@ -0,0 +1,9 @@ +--- +- name: Install NFS server packages on Debian/Ubuntu + become: true + ansible.builtin.package: + name: + - rpcbind + - nfs-kernel-server + state: present + tags: ["mirror"] diff --git a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml new file mode 100644 index 00000000..0f67427a --- /dev/null +++ b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/main.yml @@ -0,0 +1,15 @@ +--- +- name: Import Debian NFS dependencies + ansible.builtin.import_tasks: debian/main.yml + when: + - ansible_os_family == 'Debian' + +- name: Import RedHat NFS dependencies + ansible.builtin.import_tasks: redhat/main.yml + when: + - ansible_os_family == 'RedHat' + +- name: Import SUSE NFS dependencies + ansible.builtin.import_tasks: suse/main.yml + when: + - ansible_os_family == 'Suse' diff --git a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/redhat/main.yml b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/redhat/main.yml new file mode 100644 index 00000000..936705e8 --- /dev/null +++ b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/redhat/main.yml @@ -0,0 +1,9 @@ +--- +- name: Install NFS server packages on RedHat/Fedora + become: true + ansible.builtin.package: + name: + - rpcbind + - nfs-utils + state: present + tags: ["mirror"] diff --git a/playbooks/roles/linux-mirror/tasks/install-deps/nfs/suse/main.yml b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/suse/main.yml new file mode 100644 index 00000000..9734a038 --- /dev/null +++ b/playbooks/roles/linux-mirror/tasks/install-deps/nfs/suse/main.yml @@ -0,0 +1,9 @@ +--- +- name: Install NFS server packages on SUSE + become: true + ansible.builtin.package: + name: + - rpcbind + - nfs-kernel-server + state: present + tags: ["mirror"] diff --git a/playbooks/roles/linux-mirror/tasks/main.yml b/playbooks/roles/linux-mirror/tasks/main.yml index bd47acd3..103996a3 100644 --- a/playbooks/roles/linux-mirror/tasks/main.yml +++ b/playbooks/roles/linux-mirror/tasks/main.yml @@ -256,18 +256,38 @@ enabled: true tags: ["mirror"] -- name: Install NFS server packages (for root user and if NFS is enabled) - become: true - ansible.builtin.package: - name: - - rpcbind - state: present +- name: Install NFS server dependencies + ansible.builtin.include_tasks: install-deps/nfs/main.yml when: - not install_only_git_daemon|bool - ansible_user_id == 'root' - linux_mirror_nfs | bool tags: ["nfs", "mirror"] +- name: Set NFS server service name for Debian/Ubuntu + ansible.builtin.set_fact: + nfs_server_service: nfs-kernel-server + when: + - ansible_os_family == 'Debian' + - linux_mirror_nfs | bool + tags: ["mirror"] + +- name: Set NFS server service name for RedHat/Fedora + ansible.builtin.set_fact: + nfs_server_service: nfs-server + when: + - ansible_os_family == 'RedHat' + - linux_mirror_nfs | bool + tags: ["mirror"] + +- name: Set NFS server service name for SUSE + ansible.builtin.set_fact: + nfs_server_service: nfsserver + when: + - ansible_os_family == 'Suse' + - linux_mirror_nfs | bool + tags: ["mirror"] + - name: Ensure rpcbind and NFS services are started and enabled (for root user and if NFS is enabled) become: true ansible.builtin.systemd: @@ -276,7 +296,7 @@ enabled: true loop: - rpcbind - - nfs-server + - "{{ nfs_server_service }}" when: - ansible_user_id == 'root' - not install_only_git_daemon|bool -- 2.51.0