Add tasks that configure NFS ganesha.
This commit is contained in:
parent
e0f3be8797
commit
e54b91f170
|
@ -1,4 +1,4 @@
|
||||||
Role Name
|
basic-system-setup
|
||||||
=========
|
=========
|
||||||
|
|
||||||
This role runs a set of tasks that perform some basic systems configurations
|
This role runs a set of tasks that perform some basic systems configurations
|
||||||
|
@ -6,7 +6,9 @@ This role runs a set of tasks that perform some basic systems configurations
|
||||||
Role Variables
|
Role Variables
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
timezone: 'Europe/Rome'
|
```yaml
|
||||||
|
See the `defaults/main.yml` file
|
||||||
|
```
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
@ -16,4 +18,4 @@ EUPL-1.2
|
||||||
Author Information
|
Author Information
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
An optional section for the role authors to include contact information, or a website (HTML is not allowed).
|
Andrea Dell'Amico <andrea.dellamico@isti.cnr.it>
|
||||||
|
|
|
@ -43,6 +43,48 @@ autofs_packages_el:
|
||||||
autofs_maps: []
|
autofs_maps: []
|
||||||
# - { map_name: 'data', mountpoint_prefix: '/', path: 'data', nfs_server: 'nfs.example.com', remote_export: '/export', is_home: False }
|
# - { map_name: 'data', mountpoint_prefix: '/', path: 'data', nfs_server: 'nfs.example.com', remote_export: '/export', is_home: False }
|
||||||
|
|
||||||
|
nfs_server_enabled: False
|
||||||
|
nfs_server_ganesha_enabled: '{{ nfs_server }}'
|
||||||
|
|
||||||
|
nfs_server_ganesha_el_repos:
|
||||||
|
- centos-release-nfs-ganesha28
|
||||||
|
- centos-release-ceph-nautilus
|
||||||
|
nfs_server_ganesha_el_pkgs:
|
||||||
|
- nfs-utils
|
||||||
|
- nfs4-acl-tools
|
||||||
|
- nfs-ganesha
|
||||||
|
- nfs-ganesha-vfs
|
||||||
|
- librados2
|
||||||
|
|
||||||
|
nfs_server_ganesha_deb_pkgs:
|
||||||
|
- 'nfs-ganesha'
|
||||||
|
- 'nfs-ganesha-vfs'
|
||||||
|
- 'nfs-ganesha-xfs'
|
||||||
|
|
||||||
|
#Protocols = 3,4,9P;
|
||||||
|
nfs_server_ganesha_server_protocols: '4'
|
||||||
|
nfs_server_ganesha_path_pseudo: False
|
||||||
|
nfs_server_ganesha_mdcache: False
|
||||||
|
nfs_server_ganesha_mdcache_hwmark: 100000
|
||||||
|
nfs_server_ganesha_exports: []
|
||||||
|
# name, id, path, pseudo_path, access_type (RW, RO), protocols (global), squash (true,false), disable_actl (true,false), sectype, fsal (VFS, XFS), clients
|
||||||
|
# (*) indicate an optional parameter
|
||||||
|
# - name: export_filename
|
||||||
|
# id: 1
|
||||||
|
# path: /export
|
||||||
|
# pseudo: /nfs_export
|
||||||
|
# access_type(*): 'RW'
|
||||||
|
# protocols(*): '{{ nfs_server_ganesha_server_protocols }}'
|
||||||
|
# squash(*): 'root_squash'
|
||||||
|
# disable_acl(*): 'false'
|
||||||
|
# sectype(*): 'sys'
|
||||||
|
# nfs_commit(*): 'false'
|
||||||
|
# delegations(*): 'none'
|
||||||
|
# fsal: 'VFS'
|
||||||
|
# clients:
|
||||||
|
# - host1
|
||||||
|
# - hostN
|
||||||
|
|
||||||
# tmpreaper
|
# tmpreaper
|
||||||
tmpreaper_install: False
|
tmpreaper_install: False
|
||||||
tmpreaper_protect_extra: ''
|
tmpreaper_protect_extra: ''
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
---
|
||||||
|
- name: Create the export directory trees
|
||||||
|
block:
|
||||||
|
- name: Create the directory of the nextcloud NFS export
|
||||||
|
ansible.builtin.file:
|
||||||
|
dest: '{{ san_nextcloud_data_directory_for_export }}'
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
tags: [ 'san', 'nfs', 'storage', 'ganesha', 'ganesha_export' ]
|
||||||
|
|
||||||
|
- name: Repositories and packages on EL
|
||||||
|
block:
|
||||||
|
- name: Install storage SIG repositories
|
||||||
|
ansible.builtin.yum:
|
||||||
|
name: '{{ nfs_server_ganesha_el_repos }}'
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install the SAN NFS packages
|
||||||
|
ansible.builtin.yum:
|
||||||
|
name: '{{ san_nfs_packages }}'
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install the files needed to produce a SELinux policy for ganesha
|
||||||
|
ansible.builtin.copy:
|
||||||
|
src: '{{ item }}'
|
||||||
|
dest: '/usr/local/lib/{{ item }}'
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0600
|
||||||
|
loop:
|
||||||
|
- ganesha_selinux.pp
|
||||||
|
- ganesha_selinux.te
|
||||||
|
register: ganesha_selinux_policy
|
||||||
|
|
||||||
|
- name: Generate the SELinux policy module
|
||||||
|
ansible.builtin.shell: semodule -i /usr/local/lib/ganesha_selinux.pp && touch /usr/local/lib/.ganesha_selinux
|
||||||
|
when: ganesha_selinux_policy is changed
|
||||||
|
|
||||||
|
when: ansible_distribution_file_variety == "RedHat"
|
||||||
|
|
||||||
|
- name: Repositories and packages on Ubuntu/Debian
|
||||||
|
block:
|
||||||
|
- name: Install the nfs ganesha packages on deb systems
|
||||||
|
ansible.builtin.apt:
|
||||||
|
pkg: '{{ nfs_server_ganesha_deb_pkgs }}'
|
||||||
|
state: present
|
||||||
|
cache_valid_time: 1800
|
||||||
|
|
||||||
|
when: ansible_distribution_file_variety == "Debian"
|
||||||
|
|
||||||
|
- name: Install and configure ganesha exports using the VFS backend
|
||||||
|
block:
|
||||||
|
- name: Install the ganesha configuration files
|
||||||
|
template: src={{ item }}.j2 dest=/etc/ganesha/{{ item }} owner=root group=root mode=0644
|
||||||
|
loop: '{{ san_ganesha_conf_files }}'
|
||||||
|
register: ganesha_conf_files
|
||||||
|
|
||||||
|
- name: Install the ganesha export files
|
||||||
|
template: src={{ item }}.j2 dest=/etc/ganesha/{{ item }} owner=root group=root mode=0644
|
||||||
|
loop: '{{ san_ganesha_export_files }}'
|
||||||
|
register: ganesha_conf_files
|
||||||
|
|
||||||
|
- name: Ensure that ganesha is started and enabled
|
||||||
|
service: name=nfs-ganesha state=started enabled=yes
|
||||||
|
|
||||||
|
- name: Reload ganesha after a reconfiguration
|
||||||
|
service: name=nfs-ganesha state=reloaded
|
||||||
|
when: ganesha_conf_files is changed
|
||||||
|
|
||||||
|
tags: [ 'san', 'nfs', 'storage', 'ganesha', 'ganesha_conf' ]
|
|
@ -9,4 +9,5 @@
|
||||||
when: autofs_client_mountpoint
|
when: autofs_client_mountpoint
|
||||||
- import_tasks: tmpreaper.yml
|
- import_tasks: tmpreaper.yml
|
||||||
- import_tasks: trusted_ca.yml
|
- import_tasks: trusted_ca.yml
|
||||||
|
- ansible.builtin.import_tasks: ganesha-nfs.yml
|
||||||
|
when: nfs_server_ganesha_enabled
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
EXPORT
|
||||||
|
{
|
||||||
|
# Export Id (mandatory, each EXPORT must have a unique Export_Id)
|
||||||
|
Export_Id = {{ item.id }};
|
||||||
|
|
||||||
|
# Exported path (mandatory)
|
||||||
|
Path = {{ item.path }};
|
||||||
|
|
||||||
|
# Pseudo Path (required for NFS v4)
|
||||||
|
Pseudo = {{ item.pseudo }};
|
||||||
|
|
||||||
|
# Required for access (default is None)
|
||||||
|
# Could use CLIENT blocks instead
|
||||||
|
Access_Type = {{ item.access_type | default('RW') }};
|
||||||
|
|
||||||
|
## Restrict the protocols that may use this export. This cannot allow
|
||||||
|
## access that is denied in NFS_CORE_PARAM.
|
||||||
|
Protocols = {{ nfs_server_ganesha_server_protocols | default('4') }};
|
||||||
|
|
||||||
|
## Whether to squash various users.
|
||||||
|
Squash = {{ item.squash | default('root_squash') }};
|
||||||
|
|
||||||
|
NFS_Commit = {{ item.nfs_commit | default('false') }};
|
||||||
|
|
||||||
|
Delegations= {{ item.delegations | default('None') }};
|
||||||
|
|
||||||
|
Disable_ACL = {{ item.disable_acl | default('false') }};
|
||||||
|
## Allowed security types for this export
|
||||||
|
Sectype = {{ item.sectype | default('sys') }};
|
||||||
|
|
||||||
|
# Exporting FSAL
|
||||||
|
FSAL {
|
||||||
|
Name = {{ item.fsal }};
|
||||||
|
}
|
||||||
|
CLIENT
|
||||||
|
{
|
||||||
|
Clients = {% for nfs_client in item.clients %}{{ nfs_client }}{% if not loop.last %},{% endif %}{% endfor %};
|
||||||
|
Access_Type = {{ item.access_type }};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
## These are core parameters that affect Ganesha as a whole.
|
||||||
|
NFS_CORE_PARAM {
|
||||||
|
{% if nfs_server_ganesha_path_pseudo %}
|
||||||
|
## Allow NFSv3 to mount paths with the Pseudo path, the same as NFSv4,
|
||||||
|
## instead of using the physical paths.
|
||||||
|
mount_path_pseudo = true;
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
## Configure the protocols that Ganesha will listen for. This is a hard
|
||||||
|
## limit, as this list determines which sockets are opened. This list
|
||||||
|
## can be restricted per export, but cannot be expanded.
|
||||||
|
#Protocols = 3,4,9P;
|
||||||
|
Protocols = {{ nfs_server_ganesha_server_protocols }};
|
||||||
|
}
|
||||||
|
|
||||||
|
{% if nfs_server_ganesha_mdcache %}
|
||||||
|
## Configure settings for the object handle cache
|
||||||
|
MDCACHE {
|
||||||
|
## The point at which object cache entries will start being reused.
|
||||||
|
Entries_HWMark = {{ nfs_server_ganesha_mdcache_hwmark }};
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% for export_file in nfs_server_ganesha_exports %}
|
||||||
|
%include "{{ export_file.name }}.conf"
|
||||||
|
{% endfor %}
|
Loading…
Reference in New Issue