Writing Your First Ansible Playbook

Hands-On Lab

 

Photo of Stosh Oldham

Stosh Oldham

Course Development Director in Content

Length

01:00:00

Difficulty

Intermediate

Playbooks are the heart of Ansible. They provide a means of executing numerous tasks across any number of systems. This exercise sets you on the path to Ansible mastery by allowing you to craft and execute an Ansible playbook.

What are Hands-On Labs?

Hands-On Labs are scenario-based learning environments where learners can practice without consequences. Don't compromise a system or waste money on expensive downloads. Practice real-world skills without the real-world risk, no assembly required.

Writing Your First Ansible Playbook

Introduction

Playbooks are the heart of Ansible. They provide a means of executing numerous tasks across any number of systems. This exercise sets you on the path to Ansible mastery by allowing you to craft and execute an Ansible playbook.

Your supervisor has asked you to find a way to automate and audit basic system configuration for new servers in your environment. Given that Ansible is already configured at a basic level in your environment, the simplest solution would be to just write a playbook for bootstrapping your new hosts. Create a playbook called /home/ansible/bootstrap.yml to fulfill the following boot strap requirements:

All servers:

  • Edit /etc/hosts to include the following entry:

    ansible.xyzcorp.com 169.168.0.1

  • Install elinks

  • Create the user xyzcorp_audit

  • Copy the files /home/ansible/motd and /home/ansible/issue to /etc/

Network servers:

  • Install nmap-ncat
  • Create the user xyzcorp_network

SysAdmin servers:

  • Copy /home/ansible/scripts.tgz from the control node to /mnt/storage

The Ansible control node has been configured for you and each testing server has already been configured for use with Ansible. The default inventory has been configured to include a the groups network and sysadmin. Each group includes a sample host.

Solution

Begin by logging in to the Ansible control node using the credentials on the hands-on lab page:

ssh cloud_user@PUBLIC_IP_ADDRESS

Become the ansible user:

sudo -i -u ansible  

Create a basic playbook for all servers in the Ansible inventory

Create a basic playbook in /home/ansible/bootstrap.yml that completes the noted task required for all servers in the Ansible inventory.

  1. Create the file /home/ansible/bootstrap.yml and add the following content:

    vim /home/ansible/bootstrap.yml
    ---
    - hosts: all
      become: yes
      tasks:
        - name: edit host file
          lineinfile:
            path: /etc/hosts
            line: "ansible.xyzcorp.com 169.168.0.1"
        - name: install elinks
          package:
            name: elinks
            state: latest
        - name: create audit user
          user:
            name: xyzcorp_audit
            state: present
        - name: update motd
          copy:
            src: /home/ansible/motd
            dest: /etc/motd
        - name: update issue
          copy:
            src: /home/ansible/issue
            dest: /etc/issue

Add a section to the playbook for the Network servers in the Ansible inventory

Add a section to the playbook in /home/ansible/bootstrap.yml that completes the noted task required for the Network servers in the Ansible inventory.

  1. Create a play in the file /home/ansible/bootstrap.yml similar to the following:

     - hosts: network
       become: yes
       tasks:
         - name: install netcat
           yum:
             name: nmap-ncat
             state: latest
         - name: create network user
           user:
             name: xyzcorp_network
             state: present

Add a section to the playbook for the SysAdmin servers in the Ansible inventory

Add a section to the playbook in /home/ansible/bootstrap.yml that completes the noted task required for the s SysAdmin servers in the Ansible inventory.

  1. Create a play in the file /home/ansible/bootstrap.yml similar to the following:

     - hosts: sysadmin
       become: yes
       tasks:
         - name: copy tarball
           copy:
             src: /home/ansible/scripts.tgz
             dest: /mnt/storage/

Execute playbook to verify your playbook works correctly

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

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

Conclusion

Congratulations, you've completed this hands-on lab!