Writing Tasks and Handlers - Ansible Tutorial

Welcome to the tutorial on writing tasks and handlers in Ansible. Tasks and handlers are essential components of Ansible playbooks that allow you to define the actions to be performed on remote hosts. In this tutorial, we will explore how to write tasks and handlers effectively to automate configuration management tasks.

Introduction to Tasks and Handlers

In Ansible, tasks are the individual units of work that perform specific actions on hosts. They are defined within playbooks and executed sequentially. Tasks can include various operations such as installing packages, managing files, configuring services, or running commands.

Handlers, on the other hand, are special tasks that are only executed when explicitly triggered by another task. Handlers are typically used to restart services or perform specific actions that need to be triggered after a change has been made on a host.

Step-by-Step Guide

Follow these steps to write tasks and handlers in Ansible:

Step 1: Define the Playbook Structure

Create a new file with a `.yml` extension and define the basic structure of the playbook. The playbook should include the list of hosts, variables, and a series of tasks to be executed.

Step 2: Write Tasks

Within the playbook, define the tasks to be executed on the hosts. Each task consists of a module and its parameters. Modules provide the functionality to perform various operations. For example, the `apt` module can be used to install packages on Ubuntu-based systems.

Here's an example of a task that installs the `nginx` package:

- name: Install Nginx
    name: nginx
    state: present

Step 3: Write Handlers

Define handlers within the playbook to perform specific actions triggered by tasks. Handlers are written as separate tasks and should be named. They are typically placed at the end of the playbook.

Here's an example of a handler that restarts the Nginx service:

- name: Restart Nginx
    name: nginx
    state: restarted

Step 4: Execute the Playbook

Run the playbook using the `ansible-playbook` command followed by the name of the playbook file. Ansible will connect to the specified hosts, execute the tasks defined in the playbook, and trigger the handlers when necessary.

Common Mistakes

  • Incorrect indentation in tasks or handlers.
  • Using the wrong module or module parameters.
  • Not specifying the correct target hosts for the tasks.
  • Missing or misconfigured variables in the playbook.
  • Not considering idempotence and making tasks non-idempotent.

Frequently Asked Questions (FAQs)

  1. Q: Can I use conditionals in tasks?
    A: Yes, you can use conditionals such as `when` or `failed_when` to control the execution of tasks based on certain conditions.
  2. Q: How do I handle errors or failures in tasks?
    A: You can use the `failed_when` parameter to define conditions under which a task should be considered failed. Additionally, you can use the `ignore_errors` parameter to ignore errors and continue executing the playbook.
  3. Q: Can I run a specific task from a playbook?
    A: Yes, you can use the `--start-at-task` option followed by the name of the task to start the playbook execution from that specific task.


Tasks and handlers are fundamental components of Ansible playbooks that allow you to automate configuration management tasks. In this tutorial, we discussed the concept of tasks and handlers, their roles within playbooks, and how to write them effectively. We provided a step-by-step guide to help you create tasks and handlers within a playbook. Additionally, we highlighted common mistakes to avoid and answered frequently asked questions. By mastering the art of writing tasks and handlers, you can leverage the full power of Ansible to automate and streamline your infrastructure management tasks.