Day-04 | Ansible Role in 30 minutes | Write your First Ansible Role
Table of Contents
Introduction
In this tutorial, you will learn how to write your first Ansible role in just 30 minutes. Ansible roles are essential for organizing and reusing automation code effectively. By the end of this guide, you will understand the structure of Ansible roles, the purpose of playbooks, plays, tasks, and modules, and how to deploy a web server using Ansible.
Step 1: Understand Ansible Roles
- An Ansible role is a way to group related tasks, variables, files, and templates.
- Roles allow you to create reusable automation components, making it easier to manage complex playbooks.
- Familiarize yourself with the key benefits of using roles, including better organization and easier collaboration.
Step 2: Explore the Ansible Role Structure
Ansible roles have a specific directory structure:
my_role/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
├── files/
├── vars/
│ └── main.yml
├── defaults/
│ └── main.yml
└── meta/
└── main.yml
- tasks: Contains the main tasks to be executed.
- handlers: Contains handlers that can be triggered by tasks.
- templates: Contains Jinja2 templates for dynamic content.
- files: Contains static files to be copied to remote machines.
- vars: Variables specific to the role.
- defaults: Default variables that can be overridden.
- meta: Metadata about the role (e.g., dependencies).
Step 3: Create the Role
- Navigate to your workspace and create a new role:
ansible-galaxy init my_role
- This command sets up the directory structure automatically.
Step 4: Write Tasks in the Role
- Open
tasks/main.yml
and define the tasks. For example, to install a web server and deploy a static application:
---
- name: Install Apache web server
apt:
name: apache2
state: present
- name: Copy static HTML file
copy:
src: files/index.html
dest: /var/www/html/index.html
- name: Start Apache service
service:
name: apache2
state: started
enabled: yes
Step 5: Create the Playbook
- Create a playbook file (e.g.,
site.yml
) to utilize the role:
---
- hosts: webservers
roles:
- my_role
Step 6: Execute the Playbook
- Ensure your inventory file includes the target hosts.
- Run the playbook using the following command:
ansible-playbook site.yml -i inventory
Conclusion
In this tutorial, you have learned how to create and utilize an Ansible role to install a web server and deploy a static application. Key takeaways include understanding the role structure, writing tasks, and executing a playbook. As a next step, consider exploring more complex roles and integrating additional features such as handlers and templates to enhance your automation capabilities. Happy automating!