Ansible Playbooks - Error Handling

1.5 hours
  • 6 Learning Objectives

About this Hands-on Lab

Advanced error handling is one of the many strengths of Ansible. Software systems are seldom perfect, and that is an issue in this exercise. Students must configure an Ansible playbook to handle an unreliable connection. This skill is not only essential for practical Ansible use, but also an objective on the Red Hat Certified Ansible Specialist Exam.

*This course is not approved or sponsored by Red Hat.*

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create a playbook: `/home/ansible/report.yml`

echo "---" >> /home/ansible/report.yml

Configure the Playbook to Download *http://apps.l33t.com/transaction_list* to `/home/ansible/transaction_list` on `localhost` and Outputs the Message “File downloaded.” to `stdout`

Using a text editor, such as vim, edit /home/ansible/report.yml to contain the following text block below the line containing "—":

- hosts: localhost
  tasks:
    - name: download transaction_list
      get_url:
        url: http://apps.l33t.com/transaction_list 
        dest: /home/ansible/transaction_list
    - debug: msg="File downloaded"
Configure the Playbook to Handle Connection Failure by Outputting “l33t.com appears to be down. Try again later.” to `stdout`

Using a text editor, such as vim, edit the tasks section in /home/ansible/report.yml to contain the new lines as shown below. Note that the get_url line was changed to include a leading hyphen:

---
- hosts: localhost
  tasks:
    - name: download transaction_list
      block:
        - get_url:
            url: http://apps.l33t.com/transaction_list
            dest: /home/ansible/transaction_list
        - debug: msg="File downloaded"
      rescue:
        - debug: msg="l33t.com appears to be down.  Try again later."
Configure the Playbook to Output “Attempt Completed” to `stdout`, Whether It Was Successful or Not

Using a text editor, such as vim, edit the tasks section in /home/ansible/report.yml to contain the new lines as shown below.

---
- hosts: localhost
  tasks:
    - name: download transaction_list
      block:
        - get_url:
            url: http://apps.l33t.com/transaction_list
            dest: /home/ansible/transaction_list
        - debug: msg="File downloaded"
      rescue:
        - debug: msg="l33t.com appears to be down.  Try again later."
      always:
        - debug: msg="Attempt completed."
Configure the Playbook to Replace All Instances of `#BLANKLINE` with the Line Break Character `n`

Using a text editor, such as vim, edit the block section in /home/ansible/report.yml to contain the new lines as shown below:

---
- hosts: localhost
  tasks:
    - name: download transaction_list
      block:
        - get_url:
            url: http://apps.l33t.com/transaction_list
            dest: /home/ansible/transaction_list
        - replace: 
            path: /home/ansible/transaction_list 
            regexp: "#BLANKLINE"
            replace: 'n'
        - debug: msg="File downloaded"
      rescue:
        - debug: msg="l33t.com appears to be down.  Try again later."
      always:
        - debug: msg="Attempt completed."
Verify Configuration by Running the Playbook

ansible-playbook /home/ansible/report.yml

Additional Resources

We have to set up automation to pull down a data file, from a notoriously unreliable third-party system, for integration purposes. Create a playbook that attempts to pull down http://apps.l33t.com/transaction_list to localhost. The playbook should gracefully handle the site being down by outputting the message "l33t.com appears to be down. Try again later." to stdout. If the task succeeds, the playbook should write "File downloaded." to stdout. No matter if the playbook errors or not, it should always output "Attempt completed." to stdout.

If the report is collected, the playbook should write and edit the file to replace all occurrences of #BLANKLINE with a line break n.

Tasks list summary:

  • Create a playbook, /home/ansible/report.yml.
  • Configure the playbook to download http://apps.l33t.com/transaction_list to /home/ansible/transaction_list on localhost and output "File downloaded." to stdout.
  • Configure the playbook to handle connection failure by outputting "l33t.com appears to be down. Try again later." to stdout.
  • Configure the playbook to output "Attempt Completed" to stdout, whether it was successful or not.
  • Configure the playbook to replace all instances of #BLANKLINE with the line break character n.
  • Run the playbook using the default inventory to verify whether things work or not.

Important notes:

  • For convenience, Ansible has been installed on the control node.
  • The user ansible already exists on all servers, with appropriate shared keys for access to the necessary servers from the control node.
  • The ansible user has the same password as cloud_user.
  • All necessary Ansible inventories have already been created.
  • apps.l337.com is unavailable by default.
  • We may force a state change by running /home/ansible/scripts/change_l33t.sh.

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?