Summary
In general, Ansible does a great job at determining when there are failures or actual changes made by a task. However, sometimes, Ansible is either incapable or just needs some fine-tuning based on the situation. To facilitate this, a set of task constructs exist for playbook authors to utilize. Additionally, task blocks provide a method to gracefully recover from errors so that cleanup routines can be performed, and the rest of the play(s) can be completed. In the next chapter, we'll explore the use of Roles to organize tasks, files, variables, and other content.