How to mount an NFS share in Linux with Ansible?

I'm going to show you a live Playbook with some simple Ansible code.

I'm Luca Berton and welcome to today's episode of Ansible Pilot.

Ansible mounts an NFS Share in Linux

  • ansible.posix.mount
  • Control active and configured mount points

Today we're talking about the Ansible module mount.

The full name is ansible.posix.mount, which means that is part of the collection of modules "ansible.posix" to interact with POSIX platforms.

The purpose of the module is to control active and configured mount points.

For Windows, use the community.windows.win_mapped_drive module instead.

Parameters

  • path string - mount point (e.g. /mnt)
  • state string - mounted / unmounted / present / absent / remounted
  • src string - device or network volume
  • fstype string - ext4, xfs, iso9660, nfs, cifs, etc.
  • opts string- mount options

This module has many parameters to perform any task.

The only required are "path" and "state".

The parameter "path" specifies the path to the mount point (e.g. /mnt/).

The parameter "state" allows us to verify a specific state of the mount point. The options "mounted", "unmounted" and "remounted" change the device status. The "present" and "absent" options only change the /etc/fstab file.

The src parameter specifies the device or network volume for NFS or SMB/CIFS.

The fstype parameter specifies the filesystem type. For example ext4, XFS, iso9660, NFS, CIFS, etc.

The opts parameter allows us to specify some mount options, that vary for each filesystem type.

## Playbook

Let's jump in a real-life Ansible Playbook to mount an NFS share in Linux RedHat-like and Debian-like.

code

  • nfs.yml

``yaml

---

  • name: mount module Playbook

hosts: all

become: true

vars:

mynfs: "192.168.0.200:/nfs/share"

mountpoint: "/share"

permission: '0777'

myopts: 'rw,sync'

tasks:

- name: utility present redhat-like

ansible.builtin.yum:

name:

- nfs-utils

- nfs4-acl-tools

state: present

when: ansible_os_family == 'RedHat'

- name: utility present debian-like

ansible.builtin.apt:

name:

- nfs-common

- nfs4-acl-tools

state: present

when: ansible_os_family == 'Debian'

- name: check mountpoint exist

ansible.builtin.file:

path: "{{ mountpoint }}"

state: directory

mode: "{{ permission }}"

owner: root

group: root

- name: mount network share

ansible.posix.mount:

src: "{{ mynfs }}"

path: "{{ mountpoint }}"

fstype: nfs

opts: "{{ myopts }}"

state: mounted

`

execution

``bash

$ ansible-playbook -i virtualmachines/demo/inventory mount\ drive/nfs.yml

PLAY [mount module Playbook] **

TASK [Gathering Facts]

ok: [demo.e