Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

YDA-6166: experimental support for NFS resources #535

Open
wants to merge 2 commits into
base: release-1.9
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions environments/development/allinone/group_vars/allinone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,13 @@ irods_enable_gocommands: false
irods_resources:
- name: dev001_1
host: "{{ irods_icat_fqdn }}"
vault_path: /var/lib/irods/Vault1_1
vault_path: /nfs/Vault1_1
resource_type: unixfilesystem

- name: dev001_2
resource_type: unixfilesystem
host: "{{ irods_icat_fqdn }}"
vault_path: /var/lib/irods/Vault1_2
vault_path: /nfs/Vault1_2

- name: dev001_p1
resource_type: passthru
Expand All @@ -130,7 +130,7 @@ irods_resources:
- name: dev002_1
resource_type: unixfilesystem
host: "{{ irods_resource_fqdn }}"
vault_path: /var/lib/irods/Vault2_1
vault_path: /nfs/Vault2_1

- name: dev002_p1
resource_type: passthru
Expand Down Expand Up @@ -187,6 +187,19 @@ s3_access_key: minioadmin
s3_secret_key: minioadmin
s3_hostname: localhost:9000

# NFS configuration
enable_nfs_resource: true
nfs_mounts:
- host: combined.yoda.test
src: "{{ ansible_host }}:/var/nfs/Vault1_1"
path: "/nfs/Vault1_1"
- host: combined.yoda.test
src: "{{ ansible_host }}:/var/nfs/Vault1_2"
path: "/nfs/Vault1_2"
- host: combined.yoda.test
src: "{{ ansible_host }}:/var/nfs/Vault2_1"
path: "/nfs/Vault2_1"

# Mail notifications
send_notifications: 1 # Enable notifications: yes (1) or no (0)
notifications_sender_email: noreply@yoda.test # Notifications sender email address
Expand Down
6 changes: 6 additions & 0 deletions playbook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,10 @@
when: enable_s3_resource
- role: minio
when: enable_s3_resource and yoda_environment == "development"
- role: nfs_server
when: enable_nfs_resource and yoda_environment == "development"
- role: nfs_client
when: enable_nfs_resource
- irods_microservices
- irods_completion
- irods_rodsadmin
Expand Down Expand Up @@ -164,6 +168,8 @@
- irods_resource
- role: irods_resource_plugin_s3
when: enable_s3_resource
- role: nfs_client
when: enable_nfs_resource
- irods_runtime
- irods_microservices
- irods_completion
Expand Down
16 changes: 16 additions & 0 deletions roles/nfs_client/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
# copyright Utrecht University

nfs_mounts:

# Example configuration for development environment.
# nfs_mounts:
# - host: combined.yoda.test
# src: "{{ ansible_host }}:/var/nfs/Vault1_1"
# path: "/nfs/Vault1_1"
# - host: combined.yoda.test
# src: "{{ ansible_host }}:/var/nfs/Vault1_2"
# path: "/nfs/Vault1_2"
# - host: combined.yoda.test
# src: "{{ ansible_host }}:/var/nfs/Vault2_1"
# path: "/nfs/Vault2_1"
13 changes: 13 additions & 0 deletions roles/nfs_client/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
# copyright Utrecht University

galaxy_info:
author: Leonidas Triantafyllou
description: Install NFS client
license: GPLv3
min_ansible_version: '2.16'
platforms:
- name: EL
version: 9
- name: Ubuntu
version: noble
39 changes: 39 additions & 0 deletions roles/nfs_client/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
# copyright Utrecht University

- name: Ensure NFS utilities are installed (Debian)
ansible.builtin.package:
name: nfs-common
state: present
when: ansible_os_family == 'Debian'


- name: Ensure NFS utilities are installed (RedHat)
ansible.builtin.package:
name: nfs-utils
state: present
when: ansible_os_family == 'RedHat'


- name: Ensure NFS mount points exist
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: irods
group: irods
mode: '0755'
loop: "{{ nfs_mounts if nfs_mounts is iterable else [] }}"
when: item.host == ansible_fqdn


- name: Ensure NFS shares are mounted and present in /etc/fstab
ansible.posix.mount:
path: "{{ item.path }}"
src: "{{ item.src }}"
fstype: nfs
opts: rw,sync,hard,intr
state: mounted
dump: 0
passno: 0
loop: "{{ nfs_mounts if nfs_mounts is iterable else [] }}"
when: item.host == ansible_fqdn
10 changes: 10 additions & 0 deletions roles/nfs_server/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
# copyright Utrecht University

nfs_export_base: "/var/nfs"

# NFS exports for development environment.
nfs_exports:
- "{{ nfs_export_base }}/Vault1_1"
- "{{ nfs_export_base }}/Vault1_2"
- "{{ nfs_export_base }}/Vault2_1"
7 changes: 7 additions & 0 deletions roles/nfs_server/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
# copyright Utrecht University

- name: Reload NFS
ansible.builtin.command: 'exportfs -ra'
changed_when: false
when: nfs_exports | length > 0
13 changes: 13 additions & 0 deletions roles/nfs_server/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
# copyright Utrecht University

galaxy_info:
author: Leonidas Triantafyllou
description: Install NFS server
license: GPLv3
min_ansible_version: '2.16'
platforms:
- name: EL
version: 9
- name: Ubuntu
version: noble
61 changes: 61 additions & 0 deletions roles/nfs_server/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
# copyright Utrecht University

- name: Include OS-specific variables
ansible.builtin.include_vars: "{{ ansible_os_family }}.yml"


- name: Ensure NFS server is installed (Debian)
ansible.builtin.package:
name: nfs-kernel-server
state: present
when: ansible_os_family == 'Debian'


- name: Ensure NFS utilities are installed (RedHat)
ansible.builtin.package:
name: nfs-utils
state: present
when: ansible_os_family == 'RedHat'


- name: Ensure NFS share directories exist
ansible.builtin.file:
path: /var/nfs
state: directory
owner: irods
group: irods
mode: '0755'


- name: Ensure NFS share directories exist
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: irods
group: irods
mode: '0755'
loop: "{{ nfs_exports if nfs_exports is iterable else [] }}"


- name: Ensure NFS exports are configured
ansible.builtin.template:
src: exports.j2
dest: /etc/exports
owner: root
group: root
mode: '0644'
notify: Reload NFS
when: nfs_exports is iterable


- name: Ensure NFS deamon is running
ansible.builtin.service:
name: "{{ nfs_server_daemon }}"
state: started
enabled: true
when: nfs_exports is iterable


- name: Flush handlers to apply NFS exports
ansible.builtin.meta: flush_handlers
13 changes: 13 additions & 0 deletions roles/nfs_server/templates/exports.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
{% for export in nfs_exports %}
{{ export }} *(rw,sync,no_subtree_check)
{% endfor %}
4 changes: 4 additions & 0 deletions roles/nfs_server/vars/Debian.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
# copyright Utrecht University

nfs_server_daemon: nfs-kernel-server
4 changes: 4 additions & 0 deletions roles/nfs_server/vars/RedHat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
# copyright Utrecht University

nfs_server_daemon: nfs-server