Wednesday, February 26, 2020

Setup NFS Server and Client Using Ansible


SETUP NFS SERVER AND CLIENT USING ANSIBLE
***************************************************

If you have a centralized server and you want to share a disk from the server, the best way is to use NFS model.
You might have to create a server with enough disk space. Let’s say you have a disk with file system as /dev/xvdb and the size is 100 GB.
Now you want to share this volume with other machines. Below is the script to do it using ansible.
Read this blog before writing ansible script.
Any doubt on this blog click here --> answers for your questions

Ansible Play

inventory file entry:

1
2
3
4
5
6
[nfs_server]
10.0.0.1

[nfs_clients]
10.0.0.2
10.0.0.3


jinja2 template for nfs exports file : exports.j2 :

1
2
3
4
5
6
7
8
9
10
11
# /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)
#
/nfs            10.0.0.1/24(rw,sync,no_root_squash,no_subtree_check)



Sever side configuration Play book Creation:
===============================

nfs-server.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
- hosts: nfs_server
  remote_user: ubuntu
  sudo: yes

  tasks:
    - name: Create mountable dir
      file: path=/share state=directory mode=777 owner=root group=root

    - name: make sure the mount drive has a filesystem
      filesystem: fstype=ext4 dev={{ mountable_share_drive | default('/dev/xvdb') }}

    - name: set mountpoints
      mount: name=/share src={{ mountable_share_drive | default('/dev/xvdb') }} fstype=auto opts=defaults,nobootwait dump=0 passno=2 state=mounted

    - name: Ensure NFS utilities are installed.
      apt: name={{ item }} state=installed update_cache=yes
      with_items:
        - nfs-common
        - nfs-kernel-server

    - name: copy /etc/exports
      template: src=exports.j2 dest=/etc/exports owner=root group=root

    - name: restart nfs server
      service: name=nfs-kernel-server state=restarted



Client side configuration Play book Creation:
===============================

nfs_clients.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
- hosts: nfs_clients
  remote_user: ubuntu
  sudo: yes

  tasks:
    - name: Ensure NFS common is installed.
      apt: name=nfs-common state=installed update_cache=yes

    - name: Create mountable dir
      file: path=/nfs state=directory mode=777 owner=root group=root

    - name: set mountpoints
      mount: name=/nfs src={{hostvars[groups['nfs_server'][0]]['ansible_eth0']['ipv4']['address']}}:/share fstype=nfs opts=defaults,nobootwait dump=0 passno=2 state=mounted

No comments:

Post a Comment

Networking terms in basic level

Basics of Computer Networking Open system: A system which is connected to the network and is ready for communication. Closed system...