Deploying Services Using Ansible

1.5 hours
  • 4 Learning Objectives

About this Hands-on Lab

Ansible is frequently used to manage software configuration and deployment. This exercise allows students to deploy and configure an NFS server using key features of Ansible.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create the necessary template files on the Ansible control node.

Create the files exports.j2 and etc.hosts.j2 in /home/ansible with the noted content:


{{ share_path }} *(rw)

/home/ansible/etc.hosts.j2   localhost {{ ansible_hostname}}
{{ nfs_ip }}    {{ nfs_hostname }}
Create a playbook for the server ‘nfs’ in the Ansible inventory.

Create a playbook in /home/ansible/nfs.yml that meets the provided specification for the server nfs in the ansible inventory.

Create a playbook in /home/ansible/nfs.yml with the following content:

  • hosts: nfs
    become: yes
    share_path: /mnt/nfsroot

    • name: install nfs
      name: nfs-utils
      state: latest
    • name: start and enable nfs-server
      name: nfs-server
      state: started
      enabled: yes
    • name: configure exports
      src: /home/ansible/exports.j2
      dest: /etc/exports
      notify: update nfs
    • name: update nfs exports
      command: exportfs -a
      listen: update nfs
Add a play for the remote host group.

Edit /home/ansible/nfs.yml such that changes are executed on the remote host group to meet the provided requirements.

Edit /home/ansible/nfs.yml to contain the following content after the nfs play:

  • hosts: remote
    become: yes
    nfs_ip: "{{ hostvars[‘nfs’][‘ansible_default_ipv4’][‘address’] }}"
    nfs_hostname: "{{ hostvars[‘nfs’][‘ansible_hostname’] }}"

    • /home/ansible/user-list.txt
    • name: configure hostsfile
      src: /home/ansible/etc.hosts.j2
      dest: /etc/hosts.nfslab
    • name: get file status
      path: /opt/user-agreement.txt
      register: filestat
    • name: debug info
      var: filestat
    • name: create users
      name: "{{ item }}"
      when: filestat.stat.exists
      loop: "{{ users }}"
Execute playbook to verify your playbook works correctly.

Execute playbook /home/ansible/nfs.yml to verify your playbook works correctly.

Run ansible-playbook /home/ansible/nfs.yml from the control node.

Additional Resources

The team has been working on automating the builds for common services using Ansible. You have been tasked with creating the build for a common NFS server. Write a playbook that satisfies the following requirements:

On nfs:

  • Make sure nfs-utils is installed.

  • Configure /etc/exports via an Ansible template stored in /home/ansible/exports.j2. Deploy the template so that /mnt/nfsroot is exported with read and write to all hosts.

    • Note: Your template file should contain the following with the variable {{ share_path }} being defined within your playbook:

      {{ share_path }} *(rw)

    • Note: The file /etc/exports on nfs should have the following content once deployed:

      /mnt/nfsroot *(rw)

  • Create a handler that runs the command exportfs -a if the file /etc/exports is modified in a playbook task.

  • You can assume all necessary firewall rules have been deployed.

On remote:

  • Configure /etc/hosts from a template file stored on control at /home/ansible/etc.hosts.j2 with the following entries: localhost {{ ansible_hostname }}
    {{ nfs_ip }}  {{ nfs_hostname }}
    • Note: You should populate the variables {{ nfs_ip }} and {{ nfs_hostname }} using magic variables in your playbook.
  • Create users from file stored on control at /home/ansible/user-list.txt only if the remote host has the file /opt/user-agreement.txt.

The Ansible control node has been configured for you and all other servers have already been configured for use with Ansible. The default inventory has been configured to include the group remote and server nfs.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?